我从csv文件导入制表符分隔数据时遇到问题,因为数据中出现双引号,例如:
→语音"邮件→
我使用pgadmin III中的import选项导入数据。我将tab指定为分隔符,并尝试使用QUOTE和/或ESCAPE选项。这些都没有奏效。我知道它是双引号的问题,因为我从文件中删除它并导入成功。我也知道这个问题已经提升(Is it possible to turn off quote processing in the Postgres COPY command with CSV format?)但我不能使用选项COPY <tablename> FROM <filename>
,因为我正在将数据导入远程数据库,并且不接受我PC上文件的相对路径。我想避免修改输入文件,因为它可能是巨大的。
答案 0 :(得分:3)
如果要保留双引号,请将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"
在psql中执行以下命令
\copy dialogue FROM '/path/to/dialogue.txt' WITH CSV QUOTE '$' DELIMITER E'\t';
示例输出:
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)
我正在将数据导入远程数据库,并且不接受我PC上文件的相对路径。我想避免修改输入文件,因为它可能是巨大的。
使用psql命令行客户端进行postgresql。它支持包含sql命令\copy
的{{1}}元命令,并允许您将记录从本地计算机流式传输到服务器。
我试过'|'因为我的数据有许多特殊字符,例如:%$ ^&amp; *#我收到此错误:错误:编码“WIN1252”中字节序列为0x8f的字符在编码UTF8时没有等效字符。我的系统区域是:波兰语(波兰)
COPY
命令有COPY
选项。您可以使用它来指定文件以utf8或其他编码进行编码。