【问题标题】:Cross database connection issue in PostgreSQLPostgreSQL中的跨数据库连接问题
【发布时间】:2018-01-23 13:33:49
【问题描述】:

我正在尝试使用 Forigen Data Wrapper 从 A 表中获取数据到另一个数据库。

它在我的系统中运行良好。但是相同的命令在远程服务器中引发错误。

CREATE FOREIGN DATA WRAPPER fwd_test VALIDATOR postgresql_fdw_validator;
CREATE SERVER ser_test FOREIGN DATA WRAPPER fwd_test OPTIONS (hostaddr '127.0.0.1', dbname 'database_one', port '5433');
CREATE USER MAPPING FOR postgres SERVER ser_test OPTIONS (user 'postgres', password 'emr123');
SELECT dblink_connect('ser_test');

并且服务器返回以下错误

ERROR: could not establish connection
SQL state: 08001
Detail: missing "=" after "ser_test" in connection info string

同一组行在本地实例中工作。

【问题讨论】:

  • dblink_connect 用于检查这里的连接。
  • @a_horse_with_no_name:令人惊讶的是,dblink_connect() 将接受外部服务器名称来代替连接字符串:postgresql.org/docs/current/static/…

标签: postgresql postgresql-9.1


【解决方案1】:

根据文档判断,dblink_connect() 已扩展为接受介于 9.29.3 之间的外部服务器名称。

我猜测(基于问题标签)您的远程服务器正在运行 9.1,但您的本地实例是更新的。

【讨论】:

    【解决方案2】:

    您无需创建自己的外部数据包装器;该扩展程序会为您创建一个名为 postgres_fdw

    你当然可以创建一个新的外部数据包装对象,但正确的做法是这样的:

    CREATE FOREIGN DATA WRAPPER fdw_test
      HANDLER postgres_fdw_handler
      VALIDATOR postgres_fdw_validator;
    

    你忘记了处理程序,没有它,外部数据包装器不知道它的代码在哪里。

    您的 PostgreSQL 9.1 标签没有意​​义,因为 postgres_fdw 是在 9.3 版中添加的。

    【讨论】:

      猜你喜欢
      • 2011-09-11
      • 2021-07-17
      • 2017-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-29
      • 2015-10-25
      • 2020-02-20
      相关资源
      最近更新 更多