Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 从CSV复制时自动生成ID列_Postgresql_Csv - Fatal编程技术网

Postgresql 从CSV复制时自动生成ID列

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语

我有一个简单的表(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
语句中指定的列顺序必须与输入文件中的列顺序明显匹配


您还需要更改
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;