我花了很多時間研究這個問題,而且還沒有真正找到任何解釋這個的地方,所以我希望這裏有人能夠提供幫助。我目前正在編寫一個程序來清理並向Postgres表中輸入大量數據(可能爲數十GB)。PostgreSQL COPY FROM file vs STDIN
我目前的設置讓我讀入原始CSV數據並清理成新的CSV文件,然後再運行COPY FROM命令,將新的CSV文件讀入表格。
這存在一些明顯的問題,包括基本讀取文件2-3次,以及需要雙倍的存儲空間。讀入新文件然後將該文件讀入Postgres中似乎效率不高,而不是直接將其直接傳輸到Postgres shell的STDIN,並直接將該文件插入到表中。
如果任何人有類似問題的處理經驗,你覺得它更快/可能簡單地流文件到STDIN的Postgres?我在Java中實現了這個功能,因此我非常感謝能夠解決這個問題的任何和所有幫助。
謝謝!
您可以使用JDBC驅動程序的'CopyManager'支持:https://jdbc.postgresql.org/documentation/publicapi/org/postgresql/copy/CopyManager.html –
我一直在嘗試使用它,但一直未能弄清楚如何將數據「串流」到Postgres的STDIN,我最終所做的只是在清理結束時調用copyIn函數並將SQL語句以及fileReader打開了我清理過的文件。您是否有任何示例代碼或解釋說明如何將每個CSV行插入到STDIN中,因爲它們是從清潔中進來的? – schriste92
'copyIn()'只需要'Reader'作爲參數。讓你的「清潔代碼」實現該接口,然後將其傳遞給CopyManager –