Postgres - 导入带双引号的数据



由于数据中出现双引号,我在从csv文件导入制表符分隔数据时遇到问题,例如:

→语音"邮件→

我正在使用 pgadmin III 中的导入选项导入数据。我指定制表符作为分隔符,并尝试使用选项 QUOTE 和/或 ESCAPE。这些都不起作用。我知道这是双引号的问题,因为我将其从文件中删除并导入成功。我也知道这个问题已经被提出(是否可以使用 CSV 格式关闭 Postgres COPY 命令中的报价处理?(但我无法使用选项COPY <tablename> FROM <filename>,因为我正在将数据导入远程数据库并且我的 PC 上的文件的相对路径不被接受。我想避免修改输入文件,因为它可能很大。

如果要保留双引号,请将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上文件的相对路径。我想避免修改输入文件,因为它可能很大。

使用 PostgreSQL 的 psql 命令行客户端。它支持copymeta 命令,该命令环绕 sql 命令COPY,并允许您将记录从本地计算机流式传输到服务器。

我尝试使用"|"作为 QUOTE,因为我的数据有很多特殊字符,例如:%$^&*# 我收到此错误:错误:编码"WIN1252"中带有字节序列0x8f的字符在编码 UTF8 时没有等效项。我的系统区域设置是:波兰语(波兰(

COPY命令具有ENCODING选项。您可以使用它来指定文件以 utf8 或其他编码编码。

最新更新