我使用命令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?
1条答案
按热度按时间i5desfxk1#
您必须使用PostgreSQL v16或更高版本。
字符串
在引入
DEFAULT
的v16之前,我不认为你可以用COPY
实现你的目标。