通过psql导入csv时,违反了默认值列的not-null约束

wydwbb8l  于 5个月前  发布在  其他
关注(0)|答案(1)|浏览(78)

我使用命令my $cmd = "/usr/bin/psql -h $host -d $dbname -p $port -U $user -c \"\\\\COPY ${shema_name}.$table_name FROM '$csvFile' WITH CSV HEADER DELIMITER '$delimiter' \";";将csv文件导入Postgres DB。然后通过Perl代码执行该命令:

my ($stdout, $stderr) = capture {system ($runCmd)};

字符串
表格定义为:

CREATE TABLE schema.table (
col1 varchar(50) NOT NULL,
col2 timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP
);


CSV文件:

col1;col2
0023124;


CSV的导入似乎在不使用列col2的情况下工作,或者如果它包含一些值。但是当col2中没有值时,即使定义了DEFAULT值,它也会失败并显示错误消息null value in column "col2" of relation "table" violates not-null constraint。如果我从CSV中删除col2,它会返回错误missing data for column col2
有谁知道,如何将csv导入Postgres表,以便将默认值current_timestamp用于col2?

i5desfxk

i5desfxk1#

您必须使用PostgreSQL v16或更高版本。

COPY tab FROM STDIN (
   FORMAT 'csv',
   HEADER,
   DELIMITER ';',
   DEFAULT '',
   NULL 'some nonsensical stuff that doesn''t occur'
);

字符串
在引入DEFAULT的v16之前,我不认为你可以用COPY实现你的目标。

相关问题