【问题标题】:Shell Script to connect from one postgres database to another database using dblink使用 dblink 从一个 postgres 数据库连接到另一个数据库的 Shell 脚本
【发布时间】:2013-09-21 11:59:50
【问题描述】:

错误:函数 dblink_connect_u(text, text) 不存在 第 3 行:来自 dblink_connect_u(cast(varchar 'dbname=test_db... ^ 提示:没有函数匹配给定的名称和参数类型。您可能需要添加显式类型转换。

亲爱的,

执行我的 shell 脚本以使用 dblink 从一个数据库连接到不同服务器中的另一个数据库时出现错误。上面显示了我遇到的错误。顺便说一句,我已经检查了我在 linux 服务器中的共享目录,我有以下功能: /usr/share/postgresql/8.4/contrib/dblink.sql

但是,我怎么还是遇到了上面的错误呢?

下面是我的shell脚本代码:

echo "Start insert records..."
psql cr032 <<THE_END
select t1.*
into test_table
from dblink_connect_u(cast(varchar 'dbname=TEST_DB port=5432 host=10.0.0.10 user=test password=123456' as text),
            cast(varchar 'select applicationid, appname, appversion, apppath, appdatetime, description, systemtype from test_table' as text))
       as t1(applicationid varchar(36), appname varchar(100), appversion varchar(20), apppath varchar(200), appdatetime timestamp, description text, systemtype smallint);
THE_END
echo "End insert records!"

请提供帮助,我们非常感谢您的帮助!

【问题讨论】:

  • 您似乎遗漏了一些代码。调用 db_connect_u 的行实际上是什么样的?
  • 啊,没关系,您似乎遇到了隐藏代码的格式问题。我修好了它。待批准

标签: sql postgresql shell


【解决方案1】:

我找到了错误的根本原因,这是因为我安装后没有将dblink.sql加载到我的postgres数据库中。 下面是加载 dblink.sql 到 postgres 的命令,在 postgres/bin 文件夹下执行命令:

psql -d "database_name"

【讨论】:

    【解决方案2】:

    当你省略 cast varchar...as text 会发生什么? 也沿着下面的思路思考。您使用 dblink_connect_u 建立连接,然后使用 dblink 执行查询。

       Select dblink_connect_u( 'connection1',
         'dbname=TEST_DB port=5432 host=10.0.0.10 
            user=test password=123456')
    
      select t1.*
       into test_table
       from dblink('connection1',
        'select applicationid, appname, appversion, apppath, 
         appdatetime, description, systemtype from test_table' )
       as t1(applicationid varchar(36), appname varchar(100), 
        appversion varchar(20), apppath varchar(200), 
          appdatetime  timestamp, description text, systemtype smallint);
    

    【讨论】:

    • 您好 Neil Neyman,感谢您的回复并提供了建议解决方案。我已按照您的建议更改了代码,但是,测试后我仍然遇到相同的错误。
    • 嗨 Neil Neyman,我找到了错误的根本原因,这是因为我在安装后没有将 dblink.sql 加载到我的 postgres 数据库中。下面是加载 dblink.sql 到 postgres 的命令,在 postgres/bin 文件夹下执行命令: psql -d "database_name"
    • 很高兴你解决了它。您应该将解决方案添加为您自己问题的答案,因为它可能对其他人有所帮助。
    猜你喜欢
    • 1970-01-01
    • 2021-08-08
    • 1970-01-01
    • 2017-04-02
    • 1970-01-01
    • 2020-06-06
    • 1970-01-01
    • 2020-01-13
    • 2018-11-16
    相关资源
    最近更新 更多