2011-06-09 78 views
2

我是PostgreSQL的新手。我有PostgreSQL 9.0中的2個數據庫,db1和db2,以及db2我有隻讀訪問權限。我想創建一個存儲的函數,否則使用JOIN或嵌套查詢很容易實現,PostgreSQL不能跨數據庫進行操作。PostgreSQL加入2個數據庫

DB1中,我已經表1在哪裏可以查詢一組外鍵的鍵,我可以使用DB2中的表2搜索記錄,像這樣:

SELECT * from db2.table2 WHERE db2.table2.primary_key IN (
    SELECT db1.table1.foreign_key FROM db1.table1 WHERE 
     db1.table1.primary_key="whatever"); 

什麼是最好的做法在Postgres中做這件事?我不能在db2中使用臨時表,並且將外鍵作爲db2中運行的存儲函數中的參數傳遞似乎不是一個好的解決方案。

注:該鍵都是VARCHAR(11)

+0

一種選擇是使用模式的:http://www.postgresql.org/docs/8.4/interactive/ddl-schemas.html – 2011-06-10 23:47:44

回答

5

你要考慮的db_link的contrib。

另外,如果您熟悉C語言,還有一個叫做foreign data wrappers的可愛功能。它允許使用純SQL操作幾乎任何源。 Example with Twitter:你可能要調查

SELECT from_user, created_at, text FROM twitter WHERE q = '#postgresql'; 
+1

這似乎在安裝後工作確定DBLINK: 'SELECT * FROM table2的 WHERE table2.primary_key IN( SELECT * FROM DBLINK( 'DBNAME = DB1用戶=只讀', 'SELECT foreign_key FROM表1 WHERE foreign_key =?') AS temp1目錄( foreign_key varchar(11)) );' – MuffinMan 2011-06-09 17:12:10