由于数据中出现双引号,我在从 csv 文件导入制表符分隔数据时遇到问题,例如:
\n\n\xe2\x86\x92语音"邮件\xe2\x86\x92
\n\n我正在使用 pgadmin III 中的导入选项导入数据。我指定制表符作为分隔符,并尝试使用选项 QUOTE 和/或 ESCAPE。这些都不起作用。我知道这是双引号的问题,因为我将其从文件中删除并导入成功。我也知道这个问题已经出现(Is it possible to close quoteprocessing in the Postgres COPY command with CSV format?),但我无法使用选项COPY <tablename> FROM <filename>,因为我正在将数据导入到远程数据库,并且我的电脑上文件的相对路径是不接受。我想避免修改输入文件,因为它可能很大。
如果您想保留双引号,请将 设为QUOTE其他内容(我将使用数据文件中不存在的字符)。
示例:(在 postgresql 9.6 上测试)
创建一个测试表
CREATE TABLE dialogue (person TEXT, dialogue TEXT);
Run Code Online (Sandbox Code Playgroud)
使用以下示例数据创建测试数据文件(制表符分隔)。
# dialogue.txt
jim I ran into your ex. He says "hi"
rachel did he now? well tell him i said "don't call me"
Run Code Online (Sandbox Code Playgroud)
在psql中执行以下命令
\copy dialogue FROM '/path/to/dialogue.txt' WITH CSV QUOTE '$' DELIMITER E'\t';
Run Code Online (Sandbox Code Playgroud)
示例输出:
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)
Run Code Online (Sandbox Code Playgroud)
我正在将数据导入到远程数据库,但我的电脑上的文件的相对路径不被接受。我想避免修改输入文件,因为它可能很大。
使用 postgresql 的 psql 命令行客户端。它支持\copy包装 sql 命令的 meta 命令COPY,并允许您将记录从本地计算机流式传输到服务器。
我试过用“|” 作为引用,因为我的数据有很多特殊字符,例如:%$^&*# 我收到此错误:错误:编码“WIN1252”中字节序列为 0x8f 的字符在编码 UTF8 中没有等效字符。我的系统区域设置是:波兰语(波兰)
该COPY命令有一个ENCODING选项。您可以使用它来指定文件采用 utf8 或其他编码进行编码。
| 归档时间: |
|
| 查看次数: |
5765 次 |
| 最近记录: |