我正在使用PostgreSQL 9.1。我需要将所需的列从一个数据库的一个表传输到另一个数据库的另一个表,而不是模式
我发现dblink.sql
文件必须在share/contrib
中。但是我的contrib
文件夹是空的。我在哪里可以下载dblink.sql
文件并可以执行我的查询?
当我现在执行查询时,它会显示一条错误消息:
cross database reference is not possible ...
任何人都可以帮我解决如何在两个数据库之间传输数据的问题吗?
答案 0 :(得分:6)
将软件包安装到系统as detailed in the related question后,将extension dblink
安装到数据库中(运行此代码的数据库,外部数据库不需要它):
CREATE EXTENSION dblink;
您可以找到code examples in the manual 这是我用于在dbs之间复制数据的简单版本: 首先,create a FOREIGN SERVER
CREATE SERVER mydb
FOREIGN DATA WRAPPER postgresql
OPTIONS (hostaddr '111.111.111.111',port '5432',dbname 'mydb');
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;