Postgresql
Postgres copy 命令到沒有分隔符的單列
我正在嘗試將大型固定長度文件導入 Postgres,並且我正在使用複制命令和本指南之後的臨時表。
問題是這個文件有很多不同的字元,我不知道用哪個作為分隔符。事實上,我根本不需要分隔符,因為我正在將文件導入單個列表中。
您不能使用
COPY
或者\copy
如果沒有確定不會出現在數據中的字元。您將需要選擇一個字元作為分隔符,然後轉義或引用它以及輸入文件中的轉義/引號字元(可能使用 PROGRAM)。或者,不使用COPY
or\copy
,而是使用INSERT
。從您的問題中不清楚您的文件是否有換行符作為記錄分隔符,或者每個文件都是一個記錄並且內部換行符是文字。如果您確實使用後者
COPY
or\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 記錄。