二重引用符を保存する場合は、QUOTE
を別のものに設定します(データファイルに存在しない文字を使用します)。
例:(PostgreSQLの9.6でテスト)
CREATE TABLE dialogue (person TEXT, dialogue TEXT);
テストテーブルを作成し、次のサンプルデータとテスト・データ・ファイル(タブ区切り)を作成します。
# dialogue.txt
jim I ran into your ex. He says "hi"
rachel did he now? well tell him i said "don't call me"
\copy dialogue FROM '/path/to/dialogue.txt' WITH CSV QUOTE '$' DELIMITER E'\t';
psqlでの出力例次のコマンドを実行します。PostgreSQLのpsqlのコマンドラインクライアントを使用し
etl_db=# \copy dialogue from '~/Desktop/dialogue.txt' WITH CSV DELIMITER E'\t' QUOTE '$';
COPY 2
etl_db=# select * from dialogue;
person | dialogue
--------+--------------------------------------------------
jim | I ran into your ex. He says "hi"
rachel | did he now? well tell him i said "don't call me"
(2 rows)
I am importing data to remote DB and relative path to file on my PC is not accepted. I want to avoid modifying input file because it might be of huge size.
を。 \copy
メタコマンドをサポートしています。このコマンドはSQLコマンドCOPY
をラップし、ローカルマシンからサーバーにレコードをストリームすることができます。
I have tried with '|' as QUOTE because my data has lots of special characters like: %$^&*# I got this error: ERROR: character with byte sequence 0x8f in encoding "WIN1252" has no equivalent in encoding UTF8. My system locale is: Polish (Poland)
COPY
コマンドはENCODING
オプションがあります。これを使用して、ファイルがutf8または別のエンコーディングでエンコードされていることを指定することができます。
私はあなたのコメントを理解していることを確認してください。私のデータは引用符で囲まれていません(ダブルまたはシングル)がタブ区切りで、一重引用符または二重引用符が一致するか不一致になります。 WITH CSV QUOTE '$'を使用することをお勧めします。これは引用文として '$'を探すためにpostgresに指示します。データにはないので、タブを使ってデータを区切ります。 – zwornik
はい、そうです。上記の解決策を試しましたか?それが動作したのか、エラーを投げたのですか? –
私は '|'私のデータには以下のような特殊文字がたくさんあるので、QUOTとして:%$ ^&*#このエラーが出る:エラー:バイトシーケンスの文字0x8fのエンコーディング "WIN1252"にはUTF8のエンコードで同等のものはない – zwornik