使用dblink跨库查询
Cross database query using dblink
我想在 postgres 中使用 dblink 将数据从本地数据库复制到远程数据库。这是我想出的:
SELECT * FROM dblink('archive', 'INSERT INTO data SELECT * FROM local.data')
它不会工作,我想我明白为什么。我收到错误 relation "local.data" does not exist
,如果可能的话,我想 运行 在本地数据库的存储过程中,换句话说,我想将数据推送到 '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_fwd 执行此操作。我必须创建一个外部 table 首先与我要插入的 table 相关联。
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;
我想在 postgres 中使用 dblink 将数据从本地数据库复制到远程数据库。这是我想出的:
SELECT * FROM dblink('archive', 'INSERT INTO data SELECT * FROM local.data')
它不会工作,我想我明白为什么。我收到错误 relation "local.data" does not exist
,如果可能的话,我想 运行 在本地数据库的存储过程中,换句话说,我想将数据推送到 '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_fwd 执行此操作。我必须创建一个外部 table 首先与我要插入的 table 相关联。
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;