0

错误:函数 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!"

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

4

2 回答 2

1

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

psql -d "database_name" < "dblink_location"/dblink.sql

于 2013-09-21T03:59:50.850 回答
0

当您省略 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);
于 2013-09-11T03:55:32.537 回答