2013-09-11 88 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