如何在PostgreSQL中使用(安装)dblink?

时间:2010-10-05 10:08:57

标签: sql postgresql dblink

我习惯使用Oracle并在我的架构中创建一个dblink,然后访问这样的远程数据库:mytable@myremotedb,对PostgreSQL有没有相同的做法?

现在我正在使用这样的dblink:

SELECT logindate FROM dblink('host=dev.toto.com
                              user=toto
                              password=isok
                              dbname=totofamily', 'SELECT logindate FROM loginlog');

执行此命令时,出现以下错误:

  

提示:没有函数匹配给定的名称和参数类型。您可能需要添加显式类型转换。

有人有想法吗?我们是否必须“激活”dblinks或在使用它们之前做些什么?

我们要查询的远程数据库有什么问题吗?我们还要激活dblink吗?我一直有could not establish connection。这是行类型:

SELECT dblink_connect_u('host=x.x.x.x dbname=mydb user=root port=5432');

IP地址正确且Postgres正在远程服务器上运行。有什么想法吗?

6 个答案:

答案 0 :(得分:104)

使用 PostgreSQL 9.1或更高版本,简化了其他模块的安装。可以使用Registered extensions (including dblink)安装CREATE EXTENSION

CREATE EXTENSION dblink;

安装到默认架构(默认情况下为public)。在运行命令之前,请确保已正确设置search_path,并且所有必须使用该模式的用户都可以看到该模式。

或者,您可以安装到您选择的任何架构:

CREATE EXTENSION dblink SCHEMA extensions;

请参阅:

每个数据库运行一次。或者在标准系统数据库template1中运行它以自动将其添加到每个新创建的数据库中。 Details in the manual.

您需要首先在服务器上安装提供模块的文件。对于Debian和派生类,这显然是包postgresql-contrib-9.1 - 对于PostgreSQL 9.1来说。

答案 1 :(得分:19)

我正在使用DBLINK连接内部数据库以进行跨数据库查询。

<强> Reference taken from this article.

安装DbLink扩展程序。

CREATE EXTENSION dblink;

验证DbLink:

SELECT pg_namespace.nspname, pg_proc.proname 
FROM pg_proc, pg_namespace 
WHERE pg_proc.pronamespace=pg_namespace.oid 
   AND pg_proc.proname LIKE '%dblink%';

测试数据库的连接:

SELECT dblink_connect('host=localhost user=postgres password=enjoy dbname=postgres');

答案 2 :(得分:12)

在linux上,找到dblink.sql,然后在postgresql控制台中执行类似这样的操作来创建所有必需的函数:

\i /usr/share/postgresql/8.4/contrib/dblink.sql 

您可能需要安装contrib包:sudo apt-get install postgresql-contrib

答案 3 :(得分:4)

安装模块通常需要您运行数据库安装中包含的sql脚本。

假设类似Linux的操作系统

find / -name dblink.sql

验证位置并运行

答案 4 :(得分:2)

可以使用以下方法添加:

$psql -d databaseName -c "CREATE EXTENSION dblink"

答案 5 :(得分:0)

# or even faster copy paste answer if you have sudo on the host 
sudo su - postgres  -c "psql template1 -c 'CREATE EXTENSION IF NOT EXISTS \"dblink\";'"