PostgreSQL复制包含引号的csv

6

这是一个非常简单的问题,我正在使用psql终端命令COPY,如下所示:

COPY tbname FROM '/tmp/file.csv'
delimiter '|' csv;

然而,这个file.csv包含了一些数据,例如:

random|stuff|32"

以及
random|other "stuff"|15

我尝试使用双引号来转义引号,正如Postgres网站所建议的那样。

random|stuff|32""
random|other ""stuff""|15

这似乎完全删除了引号,而我不希望这样。是否有一种方法可以让导入程序将这些引号视为普通字符,以使它们在数据库中与csv文件中的出现方式相同?

1个回答

12
根据文档,默认引号符为",因此您需要提供一个带有不同符号的QUOTE参数。 引号符必须是单个一字节字符。
COPY tbname FROM '/tmp/file.csv'
delimiter '|' QUOTE '}' csv; -- use a symbol you know does not appear in your file.

这个非常完美,谢谢,我没有想到会有这么好的解决方案。 - TheLovelySausage
7
希望看到一个解决方案,适用于无法确定任何符号缺失的情况。 - Joffer
@mlinth 我有一个情况,我正在使用COPY命令将表数据复制到CSV文件中。在CSV文件中,我发现所有字符串值都被双引号包裹着。是否添加类似QUOTE '}'的语句可以去掉这些双引号呢? - Mano
@Mano 我认为默认的引号是双引号,所以我认为如果要删除它们,你需要 QUOTE '',即没有引号。不过我还没有尝试过。 - mlinth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接