使用dblink进行跨数据库查询

时间:2018-03-13 18:11:41

标签: postgresql dblink

我想在postgres中使用dblink将数据从本地数据库复制到远程数据库。这就是我提出的:

SELECT * FROM dblink('archive', 'INSERT INTO data SELECT * FROM local.data')

它不会工作,我想我理解为什么。我收到错误relation "local.data" does not exist,如果可能,我喜欢在本地数据库的存储过程中运行它,换句话说我想将数据推送到'archive'服务器,而不是将其拉到''归档”。

如何告诉postgres查看本地数据库?如何从dblink查询中寻址本地数据库?

2 个答案:

答案 0 :(得分:2)

我找不到通过dblink执行此操作的方法,但能够使用postgres_fwd执行此操作。我必须首先创建一个与我要插入的表关联的外表。

CREATE EXTENSION postgres_fdw;
CREATE SERVER archive FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host 'localhost',  dbname 'archive_db');
CREATE USER MAPPING FOR CURRENT_USER SERVER archive OPTIONS (user 'user', password 'pass');
CREATE FOREIGN TABLE archivedata (..) SERVER archive OPTIONS (schema_name 'public', table_name 'data');

INSERT INTO archivedata SELECT * FROM data;

答案 1 :(得分:1)

要将行从本地数据库复制到远程数据库,您应该在远程主机上运行insert语句并在本地主机上进行搜索。语法是这样的:

INSERT INTO t1(id, name, description, "date")
    SELECT id_foo, full_name, des, "date" FROM 
    dblink('host= ? user= ? password= ? dbname= externaldb'::text,
    'SELECT id, name, description, "date" FROM t2'::text, false)
    ttemp(id integer, name character varying,  description character varying, "date" date)
)

更改本地信息的?