Postgresql 使用dblink进行跨数据库查询
我想在postgres中使用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
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此解决方案对我来说不是最好的,因为我将有多个服务器将数据推送到存档中。我认为归档服务器的速度不足以单独从所有服务器中提取数据。是的,一个外部表是一个不错的选择。