2017-07-11 1 views
0

Postgresの - 二重引用符でインポートデータIは、データなどに登場するため、二重引用符のcsvファイルからタブ区切りのデータをインポートすると問題が持っている

ボイス→「メールは→

私は、インポートを使用してデータをインポートしていますオプションをpgadmin IIIで指定しました。区切り文字としてタブを指定しましたが、QUOTEやESCAPEオプションでも試しましたが、これは問題ありませんでした。 (Is it possible to turn off quote processing in the Postgres COPY command with CSV format?)既にリモートデータベースにデータをインポートしているため、COPY <tablename> FROM <filename>オプションを使用することはできません。また、PC上のファイルへの相対パスは受け入れられません。それは膨大なサイズになる可能性があるからです。

答えて

2

二重引用符を保存する場合は、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または別のエンコーディングでエンコードされていることを指定することができます。

+0

私はあなたのコメントを理解していることを確認してください。私のデータは引用符で囲まれていません(ダブルまたはシングル)がタブ区切りで、一重引用符または二重引用符が一致するか不一致になります。 WITH CSV QUOTE '$'を使用することをお勧めします。これは引用文として '$'を探すためにpostgresに指示します。データにはないので、タブを使ってデータを区切ります。 – zwornik

+0

はい、そうです。上記の解決策を試しましたか?それが動作したのか、エラーを投げたのですか? –

+0

私は '|'私のデータには以下のような特殊文字がたくさんあるので、QUOTとして:%$ ^&*#このエラーが出る:エラー:バイトシーケンスの文字0x8fのエンコーディング "WIN1252"にはUTF8のエンコードで同等のものはない – zwornik