2013-02-10 92 views
3

我正在使用PostgreSQL 9.1。我需要将一个数据库的一个表中所需的列转移到另一个数据库的另一个表中,而不是模式。
我发现dblink.sql文件必须在share/contrib。但我的contrib文件夹是空的。我在哪里可以下载dblink.sql文件并且可以执行我的查询?使用dblink.sql在PostgreSQL中的两个表之间复制数据

当我执行查询现在它显示一个错误信息:

cross database reference is not possible ... 

谁能帮助我如何两个数据库之间的数据传输?

+0

可能重复( http://stackoverflow.com/questions/3862648/how-to-use-install-dblink-in-postgresql) – 2013-02-10 11:47:16

回答

5

您所安装的软件包到你的系统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; 
的[?如何使用(安装)在PostgreSQL的DBLINK]