2014-01-23 38 views
0

的每一行。如果我有這樣的查詢:PostgreSQL的:提取查詢結果送單獨的文件

SELECT key1, key2, text FROM mytable WHERE... 

而且我想對每個結果在它自己的文件最終保存結果出來這樣的,和該文件基於key1和key2的值命名(加上確保唯一文件名的時間戳)。

示例 - 如果這是我的查詢的結果:

key1 | key2 | text 
12345 | A  | a bunch of text 
23513 | Q  | a bunch more text 

我想有兩個文件,一個名字類似含a bunch of text12345_D_139050886127,另一個名爲像含a bunch more text23513_Q_139050886131結束了。

我的問題是:是否有postgresql工具可以輕鬆做到這一點,或者我應該只是將查詢結果導出到CSV文件,然後編寫一個perl腳本或任何將其分解爲多個小文件。後一種方法的缺點是至少暫時需要磁盤存儲空間的兩倍 - 查詢回覆可能相當大(但這不應該是一個大問題)。

+0

SQL Workbench/J可以使用它的WbExport命令來執行此操作:http://sql-workbench.net/manual/command-export.html#export-example-lobs –

+1

您可以使用'psql'直接管理結果到perl腳本。這樣它會更快,並且不需要額外的空間。 –

+0

這聽起來像最簡單的方法@IgorRomanchenko。謝謝! – PurpleVermont

回答

0

如果你能寫一個簡單的Java程序,它可以很容易地完成這項工作。此外,如果發生錯誤,如果錯誤涉及數據庫訪問,文件寫入或其他任何事情,您將很快看到。最後,改進或更新你的程序將是小菜一碟;)

+0

我一直在寫Java,但是有沒有一個用於從Java訪問PostgreSQL服務器的API? – PurpleVermont

+1

有許多有用的框架,如Hibernate,但爲了您的需要,基本的JDBC訪問就足夠了。使用org.postgresql.Driver作爲驅動程序類和類似於jdbc:postgresql:// $ {DB_SERVER}:$ {SQL_LISTEN_PORT}/$ {DB_NAME}的URL – Anthed

0

你可以用PL/Perl,PL/Python或其他任何方法來做到這一點,只要你要寫入的位置是PostgreSQL服務器有權訪問。

這就是說,沒有必要。您可以通過從光標讀取數據,或者使用fetchrow_arrayref逐步從服務器讀取數據,從而一次將幾行內容消耗到腳本中。

相關問題