如何将特定列数据从远程服务器导入本地PostgreSQL数据库?

时间:2015-08-18 18:59:13

标签: database postgresql

我希望这是一个常见的问题。我有两台不同的电脑:

  1. 我的开发计算机,
  2. 正在运行的远程服务器计算机
  3. 每台计算机都有自己运行的PostgreSQL数据库。两台计算机基本上具有相同的表名,在开发计算机中有几个表;但是在开发机器中更改了表定义和关系,以更好地处理参照完整性并符合3NF标准。

    我需要将特定数据(即列)从远程服务器导入到开发计算机的特定表中(其中开发表具有与远程服务器不同的结构)。

    这是如何在PostgreSQL中完成的? (我想只是从pgdump加载表会覆盖较新的开发表结构?)。

    (伪代码)

    的某些内容

    使用PostgreSQL 9.3:

    insert into <local computer> charges (tposted, patient_recid, fileoninsurance)
     select tposted, patient_recid, fileoninsurance 
     from <Remote Server> ( select e.tposted, e.patient_recid, d.fileoninsurance
        from encountertimes e
        join daysheets d on ( e.tposted = d.tposted and e.patient_recid =d.patient_recid).
    

    为了清楚起见,需要使用远程服务器表而不是开发机器来完成表连接。

    TIA

1 个答案:

答案 0 :(得分:1)

您可以使用COPY仅转储所需的字段,并将其加载到另一个db:

COPY (
  SELECT e.tposted, e.patient_recid, d.fileoninsurance
  FROM encountertimes e
  JOIN daysheets d USING(tposted, patient_recid)
) TO '/some/file'; -- or STDOUT

...

COPY charges (tposted, patient_recid, fileoninsurance) FROM '/some/file';

或者,使用foreign data wrappers,这与你的伪数据非常相似。

您还可以使用pg_dump转储表中的数据,作为具有命名列的INSERT,因此表结构不必完全匹配(只要目标表是超集)出口的那个)。