我习惯使用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正在远程服务器上运行。有什么想法吗?
答案 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\";'"