【问题标题】:How to use (install) dblink in PostgreSQL?如何在 PostgreSQL 中使用(安装)dblink?
【发布时间】:2011-04-21 05:31:53
【问题描述】:

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

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

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

当我执行此命令时,我收到以下错误:

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

有人有想法吗?在使用它们之前,我们是否必须“激活” dblink 或做一些事情?

在我们要查询的远程数据库上有什么事情要做吗?我们也必须激活 dblink 吗?我一直有一个could not establish connection。这是行是类型:

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

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

【问题讨论】:

    标签: sql postgresql dblink


    【解决方案1】:

    PostgreSQL 9.1 开始,安装附加模块很简单。 Registered extensions like 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。从 Postgres 10 开始,只有一个 postgresql-contrib 元包。

    【讨论】:

    • PostgreSQL 没有这么简单... 错误 "/usr/share/postgresql/9.1/extension/dblink.control": File ou directory not found... 有一个简单的命令可以修复是吗?
    • ... 在另一台具有现代 pg9.3 的服务器中(在 Debian 上)。 SQL消息是“错误:无法打开扩展控制文件'/usr/share/postgresql/9.3/extension/dblink.control':没有这样的文件或目录”
    • @PeterKrauss:您是否按照建议安装了 contrib 包? pg 9.3 不在当前的稳定版本中(喘不过气来)。您可以从 PostgreSQL Apt Repository 获得它。
    • 感谢您提供的所有提示和线索(!),我会成功的……但是,我再次确认 PostgreSQL 永远不会是即插即用的……如果“已经简化”,速度很慢,需要更多,而世界其他地方发展得更快。
    • 为什么 postgres 默认不启用这个?来自 SQL Server 的我经常做跨数据库查询,这似乎是一个常见的需求?
    【解决方案2】:

    我正在使用 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');
    

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

      • 使用包postgres-contrib-9.3dblink.sql 现在是dblink--1.1.sql
      • 我的被发现到/usr/share/pgsql/contrib/。 PostgreSQL 9.5,在 CentOS 6 上运行。
      【解决方案4】:

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

      假设类似 linux 的操作系统

      find / -name dblink.sql
      

      验证位置并运行它

      【讨论】:

        【解决方案5】:

        可以通过以下方式添加:

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

        【讨论】:

          【解决方案6】:
          # 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\";'"
          

          【讨论】:

            猜你喜欢
            • 2015-06-19
            • 1970-01-01
            • 1970-01-01
            • 2015-08-01
            • 1970-01-01
            • 2017-08-02
            • 1970-01-01
            • 1970-01-01
            • 2019-01-17
            相关资源
            最近更新 更多