2013-09-11 51 views
0

ERROR从一个Postgres数据库连接到另一个数据库从dblink_connect_u(CAST(VARCHAR“DBNAME = TEST_DB ... ^ 提示:没有匹配指定名称和参数类型,你可能需要增加明确的类型转换。Shell脚本使用DBLINK

亲爱的朋友们,

我有错误,当我执行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!" 

敬请帮助和您的帮助是高度赞赏!

+0

好像你留下了一些码。调用db_connect_u的行实际上是什么样的? –

+0

啊,不用担心它看起来像你有一个格式问题隐藏你的代码。我修好了它。待批准 –

回答

0

当您省略cast varchar ...作为文本时会发生什么? 也考虑下面的这一行。您使用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); 
+0

嗨Neil Neyman,感谢您的回复并提供了建议解决方案。我按照你的建议改变了我的代码,但是,我仍然在测试后得到同样的错误。 – user2767069

+1

嗨Neil Neyman,我找到了错误的根本原因,这是因为我安装后没有将dblink.sql加载到我的postgres数据库中。下面是将dblink.sql加载到postgres中的命令,在postgres/bin文件夹下执行命令:psql -d“database_name”<“dblink_location”/dblink.sql – user2767069

+0

很高兴你解决了它。您应该添加解决方案作为您自己问题的答案,因为它可能会帮助其他人。 –

1

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

的psql -d“数据库名称” <“dblink_location” /dblink.sql