PG COPY 错误:整数的输入语法无效
·
问题:PG COPY 错误:整数的输入语法无效
运行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
解答
错误:整数的无效输入语法:“”
""不是有效整数。 PostgreSQL 在 CSV 中默认接受 unquoted 空白字段为 null,但""就像这样写:
SELECT ''::integer;
并因同样的原因而失败。
如果您想处理包含空整数引用的空字符串之类的 CSV,您需要通过预处理器将其提供给 PostgreSQL,该预处理器可以对其进行整理。 PostgreSQL 的 CSV 输入无法理解 CSV 的所有奇怪而奇妙的可能滥用。
选项包括:
-
将其加载到电子表格中并导出健全的 CSV;
-
使用 Python
csv模块,PerlText::CSV等对其进行预处理; -
使用 Perl/Python/whatever 加载 CSV 并将其直接插入数据库
-
使用 ETL 工具,如 CloverETL、Talend Studio 或 Pentaho Kettle
更多推荐
所有评论(0)