Postgresql 从CSV复制时自动生成ID列
我有一个简单的表(4个文本列和一个ID列)。我正在尝试导入没有ID列的CSV文件 在Postco中,我有如下架构设置:Postgresql 从CSV复制时自动生成ID列,postgresql,csv,Postgresql,Csv,我有一个简单的表(4个文本列和一个ID列)。我正在尝试导入没有ID列的CSV文件 在Postco中,我有如下架构设置: 但是我得到了一个错误error:column“id”中的null值违反了notnull约束您需要指定列: COPY tmp_x (commit_id, additions, deletions, file_id) FROM '/Users/George/git-parser/change_file' (format csv, delimiter E'\t'); copy语
但是我得到了一个错误
error:column“id”中的null值违反了notnull约束
您需要指定列:
COPY tmp_x (commit_id, additions, deletions, file_id)
FROM '/Users/George/git-parser/change_file' (format csv, delimiter E'\t');
copy
语句中指定的列顺序必须与输入文件中的列顺序明显匹配
您还需要更改
insert
语句
INSERT INTO changes SELECT * FROM tmp_x
将从tmp_x
向目标表中插入所有列,但由于您没有在tmp_x
表中将id
列定义为serial
,因此未生成任何内容,并且插入了null
值。而您的insert
语句只是复制这些空值
您需要跳过insert
语句中的id
列:
INSERT INTO changes (commit_id,additions,deletions,file_id)
SELECT commit_id,additions,deletions,file_id
FROM tmp_x
ON CONFLICT DO NOTHING;
实际上,您可以从
tmp\u x
中删除id
列,我检查了TEMP表SELECT*from tmp\u x代码>且ID列为空。查询错误:“id”列中的空值违反了非空约束详细信息:失败的行包含(7DC8CA21C5D5ABD4BEC9E2AD4A8F9A7BF079878,5,0,0 | contribution.md,null)。您需要将id
列定义为serial
检查更新的代码。我添加了我的表结构。仍然在列“id”中获得相同的空值
。
INSERT INTO changes (commit_id,additions,deletions,file_id)
SELECT commit_id,additions,deletions,file_id
FROM tmp_x
ON CONFLICT DO NOTHING;