我已经习惯了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正在远程服务器上运行.任何的想法?
使用PostgreSQL 9.1或更高版本,可以简化其他模块的安装.已注册的扩展(包括dblink)可以安装CREATE EXTENSION
:
CREATE EXTENSION dblink;
安装到默认架构中(public
默认情况下).search_path
在运行命令之前,请确保已正确设置,并且所有必须使用该模式的用户都可以看到该模式.
或者,您可以安装到您选择的任何架构:
CREATE EXTENSION dblink SCHEMA extensions;
看到:
在Postgres数据库中的多个模式上安装hstore的最佳方法?
每个数据库运行一次.或者在标准系统数据库中运行它以自动template1
将其添加到每个新创建的数据库中.手册中的详细信息.
您需要首先在服务器上安装提供模块的文件.对于Debian和衍生产品来说,这显然是对postgreSQL 9.1的postgresql-contrib-9.1软件包.
我正在使用DBLINK连接内部数据库以进行跨数据库查询.
参考本文.
安装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');
在linux上,找到dblink.sql,然后在postgresql控制台中执行类似这样的操作来创建所有必需的函数:
\i /usr/share/postgresql/8.4/contrib/dblink.sql
您可能需要安装contrib包: sudo apt-get install postgresql-contrib