正在运行 COPY
导致 ERROR: invalid input syntax for integer: ""
我的错误消息。我错过了什么?
我的 /tmp/people.csv
文件:
"age","first_name","last_name"
"23","Ivan","Poupkine"
"","Eugene","Pirogov"
我的/tmp/csv_test.sql
文件:
CREATE TABLE people (
age integer,
first_name varchar(20),
last_name varchar(20)
);
COPY people
FROM '/tmp/people.csv'
WITH (
FORMAT CSV,
HEADER true,
NULL ''
);
DROP TABLE people;
输出:
$ psql postgres -f /tmp/sql_test.sql
CREATE TABLE
psql:sql_test.sql:13: ERROR: invalid input syntax for integer: ""
CONTEXT: COPY people, line 3, column age: ""
DROP TABLE
琐事:
- PostgreSQL 9.2.4
最佳答案
ERROR: invalid input syntax for integer: ""
""
不是有效整数。 PostgreSQL 在 CSV 中默认接受 unquoted 空白字段为 null,但是 ""
就像这样写:
SELECT ''::integer;
并因同样的原因而失败。
如果您想要处理 CSV,其中包含空整数的带引号的空字符串,您需要通过预处理器将其提供给 PostgreSQL,这样可以稍微整理一下。 PostgreSQL 的 CSV 输入不理解 CSV 的所有奇怪和美妙的可能滥用。
选项包括:
- 将其加载到电子表格中并导出完整的 CSV 文件;
- 使用Python
csv
模块、PerlText::CSV
等进行预处理; - 使用 Perl/Python/任何加载 CSV 并将其直接插入数据库
- 使用 CloverETL、Talend Studio 或 Pentaho Kettle 等 ETL 工具
关于postgresql - PG COPY错误: invalid input syntax for integer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18297980/