2012-05-04 73 views
5

我一直在使用JDBC和本地Postgres數據庫,使用Postgres COPY命令將數據從CSV文件複製到數據庫中。我使用Java將現有CSV文件解析爲CSV格式,與數據庫中的表格匹配。然後我將這個解析的CSV保存到我的本地磁盤。然後,我使用解析的CSV執行一個COPY命令到我的本地數據庫。一切都按預期工作。 現在我試圖在使用JDBC的遠程服務器上的Postgres數據庫上執行相同的過程。然而,當JDBC試圖執行復制我得到PostgreSQL COPY可以從遠程位置讀取CSV文件嗎?

org.postgresql.util.PSQLException: ERROR: could not open file "C:\data\datafile.csv" for reading: No such file or directory 

上午我理解正確的,因爲COPY命令告訴DB在本地尋找這個文件? I.E.遠程服務器正在查看其C:驅動器(不存在)。

如果是這種情況,是否有指示覆制命令在我的計算機上查看而不是在遠程計算機上「本地」查看?通過複製文檔閱讀我沒有發現任何指示此功能的內容。

如果功能不存在,我想的只是填充整個數據庫在本地,然後複製到數據庫到遠程服務器,但只是想檢查我沒有錯過什麼。

感謝您的幫助。

回答

1

據我所知,COPY命令只能用於從運行數據庫的機器本地讀取(從標準輸入或文件)。

你可以讓你逃到哪裏,你在Java轉換shell腳本,然後使用psql\copy命令,從客戶機器上的文件中讀取。

+1

COPY可以讀取「FROM STDIN」 - 它不必從磁盤本身讀取文件。 –

+0

@FrankFarmer根據你的評論更新。 –

5

創建SQL文件,您的客戶端機器上進行如下

COPY testtable (column1, c2, c3) FROM STDIN WITH CSV; 
1,2,3 
4,5,6 
\. 

然後執行,你的客戶

psql -U postgres -f /mylocaldrive/copy.sql -h remoteserver.example.com

+0

謝謝,這是我做的(以某種形式),因爲我最終已經在我的本地機器上創建了表。展望未來,我將使用下面列出的API。 – babcoccl