Скопируйте огромные наборы данных между двумя серверами Postgres - PullRequest
0 голосов
/ 26 мая 2019

Я хочу скопировать огромные наборы данных между двумя серверами postgres. В частности, я хочу:

  1. скопировать некоторые столбцы (не все) из двух таблиц на исходном сервере БД в одна таблица на целевом сервере БД.
  2. переименуйте эти столбцы в таблице назначения (поскольку наборы данных являются копиями), поскольку имя столбца назначения не совпадает с именем столбца источника (возможно, я должен сказать, вставить значения в some_column_name в таблице назначения).

Я понимаю, postgres_fdw нельзя использовать для выполнения этой задачи, поскольку он копирует всю таблицу в новую (не объединяя выбранное поле для формирования новой таблицы), а таблицы происхождения и назначения должны иметь совпадающий номер столбца.

Мой исходный db-сервер является удаленным I ssh, и наборы данных для копирования составляют около 5 ГБ.

Любое предложение для достижения моей задачи?

1 Ответ

0 голосов
/ 26 мая 2019

Идея:

  • Пусть один сервер (хост) запишет в промежуточную таблицу (пример ниже).
  • Когда сервер хостазаписывает в промежуточную таблицу, устанавливает created_ts.

  • Когда внешний сервер успешно считывает данные, он устанавливает xchange_ts.

При использовании обёртки сторонних данных вам может не потребоваться поле xchange_err, но идея этого заключается в том, чтобы сообщить о неудачном импорте.


CREATE TABLE staging
( id          SERIAL PRIMARY KEY
, created_ts  TIMESTAMPTZ
, xchange_ts  TIMESTAMPTZ
, xchange_err TEXT DEFAULT NULL
, colA        type_datatype
, colB        type_datatype
);

Я на самом деле не использовал postgres_fdw, но я думаю, что внешняя таблица будет определена примерно так:

CREATE FOREIGN TABLE staging 
( id          INTEGER PRIMARY KEY
, created_ts  TIMESTAMPTZ
, xchange_ts  TIMESTAMPTZ
, xchange_err TEXT DEFAULT NULL
, colA        type_datatype
, colB        type_datatype
)
SERVER <server_name>
OPTIONS (schema_name '<schema_name>', table_name 'staging');
...