不能将CSV复制到postgreSQL表中:列不接受空字符串

我要将CSV文件导入9.2版,但CSV文件在最终列位置中具有双引号双引号以表示NULL值:

“2”,“1001”,“9”,“2”,“0”,“0”,“130”,“”,“2012-10-22 09:33:07.073000000” “”

,它映射到类型为Timestamp的列。 postgreSQL不喜欢“”。我试图设置NULL选项,但也许我不是做正确吗?我尝试了 NULL as'“和 NULL''和 NULL as' 和 NULL“”但未成功;这是我的命令:

  COPY SCH.DEPTS 
FROM'H:/backups/DEPTS.csv'
WITH(
FORMAT CSV,
DELIMITER',',
NULL'',
HEADER TRUE,
QUOTE'“'

,但失败并显示错误:

错误:类型为timestamp的输入语法无效:

CONTEXT:COPY depts,line 2,column expirydate:“”

PS有一种方法可以指定布尔值到COPY命令的字符串表示形式?生成CSV(其中有很多)的实用程序使用“false “和”true“。


解决方案

空字符串(”“)不是有效的时间戳, COPY 似乎不提供 FORCE NULL 或 FORCE EMPTY TO NULL 模式;它有相反的, FORCE NOT NULL ,但这不会做你想要的。


可能需要将 COPY 数据导入具有文本字段的表格,可能是 UNLOGGED 或 TEMPORARY 表,然后使用 INSERT INTO real_table SELECT col1,col,col3,NULLIF(tscol, ')FROM temp_table; 。


COPY true 和 false 作为布尔值,因此您不应该有任何问题。


或者,使用简单的Python脚本和 csv 模块读取CSV,然后使用 psycopg2 到 COPY 行插入Pg。或者只需写入新的清理过的CSV并将其送入 COPY 。或使用执行数据变换(如Pentaho Kettle或Talend)的ETL工具。


来源:http://www.it1352.com/550074.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值