2012-09-02 21 views
1

請幫助我建立從PostgreSQL到Informix的連接(兩者的最新版本)。我希望能夠在PostgreSQL上對Informix執行查詢。我正在尋找一種解決方案,不需要爲每個查詢輸入數據(從Informix)和導入(到PostgreSQL)。從PostgreSQL與Informix進行通信?

我在PostgreSQL中很新,需要詳細的說明。

回答

2

您還沒有說出自己正在使用的版本。有一些限制需要注意,但是有很多選擇。

既然你說這是導入/導出,我會認爲只讀選項是不夠的。這就排除了PostgreSQL 9.1的外部數據包裝系統。

根據您的版本,David Fetter的DBI-Link可能會滿足您的需求,因爲它可以在遠程表上執行查詢(請參閱https://github.com/davidfetter/DBI-Link)。它有一段時間沒有更新,但實現應該是相當穩定和可用的版本。如果失敗了,你可以使用不可信的語言編寫存儲過程(PL/PythonU,PL/PerlU等),以連接到Informix並在那裏運行查詢。請注意,在這種情況下,您將遇到事務處理的限制,所以您可能希望使用延遲約束觸發器在其他表上運行任何查詢,以便在提交時運行所有內容。

編輯:一個更清晰的方式發生在我身上:使用外部數據包裝進行導入和一個單獨的客戶端應用程序導出。

在這種方法中,您將擁有四個基本組件,但這將鬆散耦合並受適當的事務控制。如果你願意,你甚至可以使用兩階段提交。這四個組件(這裏沒有提供一個完整的工作的例子,但至少一個路線圖,一個):

  1. 數據導入外部數據封裝器,讓您從Informix看到的數據。
  2. 要導出的數據的視圖。
  3. 管理出口方面的外部應用程序,用您選擇的語言編寫。這聽似於底層表LISTEN export_informix;
  4. 觸發通道,這使得視圖,其養NOTIFY export_informix

的通知riased的承諾,因此基本上你有兩個階段的交易中導出數據的上這樣:

  1. 在PostgreSQL中寫入數據,要導出的標誌數據。承諾。
  2. 從PostgreSQL讀取數據,導出到Informix。承諾雙方(TPC?)。
+0

像往常一樣,我指出了DBI-Link,不幸的是,甚至沒有一個例子如何用informix做到這一點:示例代碼,安裝程序。相同的perl/python。我的應用程序使用常規查詢,幾乎不可更改,我的版本是Informix和Postgres的最新版本,我可以安裝和購買所有內容。 –

+0

在這兩種情況下,您都會像使用其他數據庫一樣使用它。 –

+0

我的建議是在交易結束時將它們連接起來,例如,如果您正在推送數據,請使用CONSTRAINT觸發器激發您的代碼並將其推遲。否則,您可以使用標準PL參考和您選擇的語言參考來連接到其他數據庫。例如,如果使用PL/J,您將創建一個到Informix的JDBC連接,並像使用其他任何JDBC連接一樣使用它。使用PL/Perl,您可以使用DBI並像其他任何DBI連接一樣使用。 –

2

正如Chris Travers所說,你要做的事並不容易。從理論上講,如果您使用Informix並需要訪問PostgreSQL,則可以(購買和)使用企業網關管理器(EGM)並使用PostgreSQL的ODBC驅動程序來允許Informix連接到PostgreSQL。在實際訪問PostgreSQL時,EGM將盡最大努力成爲另一個Informix數據庫。 (我沒有驗證過PostgreSQL是支持的,但是EGM基本上需要一個ODBC驅動程序來工作,所以應該沒有任何問題 - 可能是'最後的名言')。這將包括仿真2PC(兩階段承諾);不完美,但適度接近。

對於反向連接(使用PostgreSQL並連接到Informix),您需要查看PostgreSQL工具套件或其他來源。

+0

你是什麼意思PostgreSQL工具套件?你能否提供一個鏈接到這個功能。 –

+0

我的意思是任何工具隨PostgreSQL一起提供。我沒有這個產品的詳細知識,但是可以編寫訪問PostgreSQL數據庫的代碼,並且可能有其他支持工具來管理PostgreSQL數據庫,並且在那個地方的某個地方可能會有一些有用的東西。或者不......如我所說,我不知道。 –

+0

好的,我解決了它。一切都很簡單:我在PostgreSQL上創建了Python過程並在其上創建了視圖。調用dbaccess的過程將數據通過Linux管道和PostgreSQL複製回PostgreSQL表格,然後複製到過程,然後再查看。由於系統調用有點慢,但是我希望並且可以用於任何數據庫供應商。我也是在Informix上做的。 –