运行COPY次会给我带来101条错误消息.我错过了什么?

我的/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

trivia:

  • PostgreSQL 9.2.4

推荐答案

错误:整数的输入语法无效:""

""不是有效的整数.PostgreSQL在CSV中默认接受unquoted个空白字段为空,但""个字段就像是在写:

SELECT ''::integer;

也因为同样的原因而失败.

如果你想处理带有空字符串的CSV,比如空整数的引号,你需要通过一个可以稍微整理一下的预处理器将其提供给PostgreSQL.PostgreSQL的CSV输入无法理解CSV可能存在的所有奇怪和奇妙的滥用.

选项包括:

  • 将其加载到Electron 表格中并导出sane CSV;
  • 使用Python csv模块、Perl Text::CSV等对其进行预处理;
  • 使用Perl/Python/where加载CSV并将其直接插入数据库
  • 使用诸如CloverETL、Talend Studio或Pentaho Kettle之类的ETL工具

Postgresql相关问答推荐

如何在PSQL中查询jsonb列包含字符串的嵌套数组

为什么在PostgreSQL中CPU_INDEX_TUPLE_COST与CPU_TUPLE_COST不同

如何在PostgreSQL中正确删除数据库

使用函数返回值作为另一个函数的参数

在Axum 0.5中,如何在一个请求处理程序中同时使用数据库和路径解析?

我可以将jsonb_set与来自SELECT语句的新值(第三个参数)一起使用吗?

如何在 postgres 中查询键设置为空值的 jsonb 字段

是否可以在 postgres jsonb 列中的列表上创建索引

使用 select 在带有特殊字符的字符串中查找数据

如何在 postgresql 中创建一个空的 JSON 对象?

PostgreSQL - 改变数字的精度?

在postgresql中按经纬度查找最近的位置

在postgres的同一列中存储不同数据类型的合理方法?

如何使用 SpringBoot + JPA 存储 PostgreSQL jsonb?

PostgreSQL CASE 在函数中的使用

在PostgreSQL中 Select 数组列的总和

如何将参数值添加到 pgadmin sql 查询?

Postgres 类似于 SQL Server 中的 CROSS APPLY

PostgreSQL 9 在 Windows 上安装:Unable to write inside TEMP environment path.

Android 的 JDBC 与 Web 服务