示例CSV行:

"2012","Test User","ABC","First","71.0","","","0","0","3","3","0","0","","0","","","","","0.1","","4.0","0.1","4.2","80.8","847"

"First"之后的所有值都是数字列.很多空值都是这样引用的,对吧.

try 复制:

copy mytable from 'myfile.csv' with csv header quote '"';

不:ERROR: invalid input syntax for type numeric: ""

嗯,是的.这是一个空值.try 2复制:

copy mytable from 'myfile.csv' with csv header quote '"' null '""';

不:ERROR: CSV quote character must not appear in the NULL specification

一个男人该怎么办?在运行COPY之前删除文件中的所有双引号?我能做到,但我想这是一个非常普遍的问题,有一个合适的解决方案.

推荐答案

虽然一些数据库产品将空字符串视为空值,但标准规定它们是不同的,而PostgreSQL将它们视为不同的.

最好是生成具有明确表示形式的CSV文件.虽然您可以使用sed或其他方法将文件过滤为良好的格式,但另一个选项是将数据放入一个表中,其中text列可以接受空字符串,然后填充目标表.NULLIF函数可能会有帮助:http://www.postgresql.org/docs/9.1/interactive/functions-conditional.html#FUNCTIONS-NULLIF--如果两个参数都匹配,它将返回NULL,如果不匹配,则返回第一个值.因此,NULLIF(txtcol, '')::numeric之类的函数可能适合您.

Postgresql相关问答推荐

创建发布性能

如何在PostgreSQL中以行值的形式获取列

为什么不能超过 10 个并发连接到 Postgres RDS 数据库

如何计算过滤器中的百分比

如何在 Postgres 中的列上删除唯一约束?

更新列或列或列时触发触发

Select 日期最高的行

如何使用 pg_dump 或 psql 从 *.sql 恢复 PostgreSQL 表?

并发刷新materialized视图

如何确定 NULL 是否包含在 Postgres 的数组中?

PostgreSQL:将时间戳转换为时间 - 或仅从时间戳列中检索时间

声明变量set = select

将主键更改为自动递增

在 postgresql 中,如何在 jsonb 键上返回布尔值而不是字符串?

如何判断 PostgreSQL 事务中的待处理操作

仅当 PostgreSQL 表不存在时才添加主键

PostgreSQL 使用 UUID 与文本作为主键

调用 getNextException 来查看原因:如何让 Hibernate / JPA 显示异常的数据库服务器消息

错误:permission denied for language c

如何获取一个月的天数?