Postgres - 使用双引号

时间:2017-07-11 17:28:10

标签: postgresql

我从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上文件的相对路径。我想避免修改输入文件,因为它可能是巨大的。

1 个答案:

答案 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或其他编码进行编码。