Postgresql

Postgres copy 命令到沒有分隔符的單列

  • March 24, 2021

我正在嘗試將大型固定長度文件導入 Postgres,並且我正在使用複制命令和本指南之後的臨時表。

問題是這個文件有很多不同的字元,我不知道用哪個作為分隔符。事實上,我根本不需要分隔符,因為我正在將文件導入單個列表中。

您不能使用COPY或者\copy如果沒有確定不會出現在數據中的字元。您將需要選擇一個字元作為分隔符,然後轉義或引用它以及輸入文件中的轉義/引號字元(可能使用 PROGRAM)。或者,不使用COPYor \copy,而是使用INSERT

從您的問題中不清楚您的文件是否有換行符作為記錄分隔符,或者每個文件都是一個記錄並且內部換行符是文字。如果您確實使用後者COPYor \copy,您也必須轉義/引用它。

Postgres 無法處理這種格式,但它可以處理 CSV,而且翻譯相當容易。

sed 's/"/""/g;s/^\|$/"/g' 將文本文件轉換為單列 CSV 文件,然後可以通過副本讀取。

所以你的進口可能會像

sed 's/"/""/g;s/^\|$/"/g'_yourfile_ | psql _yourdatabase_ -C copy _yourtable_ from stdin with CSV

sed 's/"/""/g;1 s/^/"/;$ s/$/"/' 如果您需要翻譯,則會將文本文件翻譯成單個 CSV 記錄。

引用自:https://dba.stackexchange.com/questions/242067