postgresql - PG COPY错误: invalid input syntax for integer

标签 postgresql csv import 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

最佳答案

ERROR: invalid input syntax for integer: ""

"" 不是有效整数。 PostgreSQL 在 CSV 中默认接受 unquoted 空白字段为 null,但是 "" 就像这样写:

SELECT ''::integer;

并因同样的原因而失败。

如果您想要处理 CSV,其中包含空整数的带引号的空字符串,您需要通过预处理器将其提供给 PostgreSQL,这样可以稍微整理一下。 PostgreSQL 的 CSV 输入不理解 CSV 的所有奇怪和美妙的可能滥用。

选项包括:

  • 将其加载到电子表格中并导出完整的 CSV 文件;
  • 使用Python csv模块、Perl Text::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/

相关文章:

csv - 无法将数据csv导入yii2中的数据库

mysql - 当加载的原始数据具有许多唯一字符时,如何将 CSV 数据加载到 MySQL 数据库中

postgresql - 如何在列中具有单个唯一值而其他值不是唯一的?

arrays - 如何使用 spring JdbcTemplate 更新 postgresql 数组列?

postgresql - Postgres + Play 2.2.1 Java - 未找到驱动程序 : [ org. postgresql.Driver]

python - 保存到 csv 数据透视表时出现错误 "Process finished with exit code 139"

python - 如何将整个 SQL Server 表复制到 CSV(包括列标题)?

postgresql - 是否有类似于 mysql 的 $HOME/my.cnf 的 psql 客户端配置文件?

python - pandas 中的列重复重命名

import - MVC4 Less Bundle @import 目录