【发布时间】:2021-06-22 19:49:13
【问题描述】:
我正在尝试复制一个 csv 文件,其中每一列都用双引号括起来。我使用的 COPY 语句是:
\COPY schema.table_name FROM 'file_name.csv' WITH (FORMAT CSV, DELIMITER ',', ESCAPE '\', QUOTE '"', FORCE_NULL(col1,col2,col3,col4))
“col3”列定义为 VARCHAR(255)。 csv 文件中的一行有一个字符串,该字符串的文字“\n”重复了 4 次,使字符串的长度为 259。我期望每次出现的 '\n' 都将转换为换行符,使字符串变为 255字符长。但是,COPY 语句失败并出现以下错误:
错误:类型字符变化的值太长(255)
COPY schema.table_name,第 11859 行,col3 列:“RN 推荐 3HX3D(周一、周三、周五)的 PCA/服务。\nincontinence 用品\nPERS new\nConsumer stat...”
当我将列长度更改为 260 时,COPY 工作正常。我无法更改列的长度,因为我不知道该列中可能包含多少个 '\n' 文字。这是 postgreSQL 中的错误吗?如果没有,如何解决?我正在使用 12.3 版的 postgreSQL。 提前致谢!
【问题讨论】:
-
增加大小。在 Postgres 中没有大小的 varchar 是可以的。 [你必须来自 Oracle 或 mysql 世界?]
-
@wildplasser,感谢您的回复!更改列并删除大小后,COPY 工作得很好。
-
我认为
\n在 CSV 格式中没有任何特殊含义,因此您可能需要对数据进行清理。
标签: postgresql