如何在 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');

当我执行这个命令时,会得到以下错误:

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

有人有什么主意吗? 在使用闪光灯之前,我们是否必须“激活”闪光灯或者做些什么?

在我们要查询的远程数据库上是否有要做的事情?我们也要启动闪烁吗?我一直有 could not establish connection。这一行是类型:

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

IP 地址正确 Postgres 正在远程服务器上运行知道吗?

182502 次浏览

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

假设操作系统类似 Linux

find / -name dblink.sql

确认位置并运行它

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

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

您可能需要安装贡献包: < code > sudo apt-get install postgreql-Contrib

由于 PostgreSQL 9.1,安装额外的模块是很简单的。 注册的扩展名,如 dblink可以与 CREATE EXTENSION一起安装:

CREATE EXTENSION dblink;

安装到默认架构中,默认情况下为 public。在运行命令之前,请确保正确设置了 search_path。架构必须对必须使用它的所有角色都可见。参见:

或者,您可以通过以下方法安装到您选择的任何模式:

CREATE EXTENSION dblink SCHEMA extensions;

参见:

每个数据库运行一次。或者在标准系统数据库 template1中运行它,将其自动添加到新创建的数据库 每个中。手册上有详细说明。

您需要首先在服务器上安装提供模块的文件。对于 Debian 和衍生产品来说,这就是包 postgresql-contrib-9.1-对于 PostgreSQL 9.1,很明显。因为 Postgres 10,只有一个 postgresql-contrib元包。

可以使用以下方法添加:

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

我使用 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');
# 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\";'"

您还应该问,在哪里安装 dblink

在大多数情况下,推荐的安装常见 Postgers 扩展的位置是 pg_catalog模式。如果在 pg _ catalog 中安装扩展,则所有相关函数都可以在任何架构中使用。如果在 public中安装扩展,那么在另一个模式中,还必须定义模式。

例如,如果 dblink 安装在 public中,那么在模式 myschema中,必须的定义 public模式。

SELECT public.dblink_get_connections();

例如,如果 dblink 安装在 pg_catalog中,那么在方案 myschema中,您可以使用 没有来定义 public方案:

SELECT dblink_get_connections();

模式 pg_catalog中的所有函数都会自动附加到其他模式。

pg_catalog中安装 dblink:

CREATE EXTENSION IF NOT EXISTS dblink WITH SCHEMA pg_catalog;