在两个Postgres服务器之间复制庞大的数据集

时间:2019-05-26 13:57:49

标签: sql postgresql postgres-fdw

我想在两个postgres服务器之间复制庞大的数据集。具体来说,我想:

  1. 将源数据库服务器中两个表中的某些列(不是全部)复制到 目标数据库服务器中的单个表。
  2. 重命名目标表中的这些列(因为数据集是副本),因为目标列名称与原始列名称不同(也许我应该说在目标表的some_column_name中插入值)。

我了解postgres_fdw不能用于完成此任务,因为它将整个表复制到新表(不合并所选字段以形成新表),并且源表和目标表都必须具有匹配的列号。 / p>

我的源数据库服务器是一个远程ssh,要复制的数据集约为5GB。

有建议完成我的任务吗?

1 个答案:

答案 0 :(得分:0)

想法:

  • 让一台服务器(主机)写入登台表(下面的示例)。
  • 当主机服务器写入暂存表时,它将设置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');