Postgresql 使用dblink进行跨数据库查询

Postgresql 使用dblink进行跨数据库查询,postgresql,dblink,Postgresql,Dblink,我想在postgres中使用dblink将数据从本地数据库复制到远程数据库。这就是我想到的: SELECT*FROM dblink('archive','INSERT-to-data SELECT*FROM local.data') 这行不通,我想我明白为什么。我得到的错误关系“local.data”不存在,如果可能,我想在本地数据库的存储过程中运行它,换句话说,我想将数据推送到“archive”服务器,而不是拉到“archive”服务器 我如何告诉postgres在本地数据库中查找?如何从db

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

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

这行不通,我想我明白为什么。我得到的错误
关系“local.data”不存在
,如果可能,我想在本地数据库的存储过程中运行它,换句话说,我想将数据推送到“archive”服务器,而不是拉到“archive”服务器


我如何告诉postgres在本地数据库中查找?如何从dblink查询内部寻址本地数据库?

要将行从本地数据库复制到远程数据库,应在远程主机上运行
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)
)

更改本地信息的

我找不到通过dblink执行此操作的方法,但可以使用postgres\u 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;

我不知道您想要什么,所以您是否查看本地数据库并在远程数据库中插入新的寄存器?请记住,您需要在末尾键入resultset。@这是正确的。我正在转换一个现有的存储过程并将其移动到远程服务器,这将导致一些额外的更改。如果可能的话,我会尽量避免这种情况。@SlackGroverglow:你说“避免这种情况”是什么意思?您想插入到本地表中-这就是方法。@一个有\u no \u名称的\u horse \u此解决方案对我来说不是最好的,因为我将有多个服务器将数据推送到存档中。我认为归档服务器的速度不足以单独从所有服务器中提取数据。是的,一个外部表是一个不错的选择。