使用dblink.sql在PostgreSQL中的两个表之间复制数据

use*_*182 3 postgresql configuration dblink postgresql-9.1

我正在使用PostgreSQL 9.1.我需要将所需的列从一个数据库的一个表传输到另一个数据库的另一个表,而不是模式.
我发现dblink.sql文件必须在那里share/contrib.但我的contrib文件夹是空的.我在哪里可以下载dblink.sql文件并可以执行我的查询?

当我现在执行查询时,它显示一条错误消息:

cross database reference is not possible ...
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮我如何在两个数据库之间传输数据?

Erw*_*ter 6

按照相关问题中的详细说明将软件包安装到系统后,扩展dblink安装到数据库中(运行此代码的扩展,外部数据库不需要它):

CREATE EXTENSION dblink;
Run Code Online (Sandbox Code Playgroud)

您可以在手册中找到代码示例.
这是我用于在dbs之间复制数据的简单版本:首先,创建一个FOREIGN SERVER

CREATE SERVER mydb
FOREIGN DATA WRAPPER postgresql
OPTIONS (hostaddr '111.111.111.111',port '5432',dbname 'mydb');
Run Code Online (Sandbox Code Playgroud)

FOREIGN DATA WRAPPER postgresql在我的情况下预先安装.
然后创建打开连接,删除旧数据(opotional),获取新数据,运行ANALYZE和关闭连接的函数:

CREATE OR REPLACE FUNCTION f_tbl_sync()
  RETURNS text AS
$BODY$
SELECT dblink_connect('mydb');  -- USER MAPPING for postgres, PW in .pgpass

TRUNCATE tbl;  -- optional

INSERT INTO tbl
SELECT * FROM dblink(
  'SELECT tbl_id, x, y
   FROM   tbl
   ORDER  BY tbl_id')
    AS b(
 tbl_id int
,x int
,y int)

ANALYZE tbl;

SELECT dblink_disconnect();
$BODY$
  LANGUAGE sql VOLATILE;
Run Code Online (Sandbox Code Playgroud)