问题: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;

  • 使用 Pythoncsv模块,PerlText::CSV等对其进行预处理;

  • 使用 Perl/Python/whatever 加载 CSV 并将其直接插入数据库

  • 使用 ETL 工具,如 CloverETL、Talend Studio 或 Pentaho Kettle

Logo

PostgreSQL社区为您提供最前沿的新闻资讯和知识内容

更多推荐