Postgresql:是否可以只复制指定的列而不在其他列中插入null

Postgresql:是否可以只复制指定的列而不在其他列中插入null,postgresql,Postgresql,用例: 我已使用COPY to命令将指定列从表复制到csv文件。CSV如下所示: id,name 1,For data test 后来,我尝试使用COPY from命令将数据从这个csv文件导入到表中,但收到了一个错误,因为csv文件不包含整个表,而只包含特定的列。错误是: null value in column "[column_name]" violates not-null constraint DETAIL: Failing row contains (1, n

用例

我已使用
COPY to
命令将指定列从表复制到csv文件。CSV如下所示:

id,name
1,For data test
后来,我尝试使用
COPY from
命令将数据从这个csv文件导入到表中,但收到了一个错误,因为csv文件不包含整个表,而只包含特定的列。错误是:

null value in column "[column_name]" violates not-null constraint
DETAIL:  Failing row contains (1, null, For data test, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null).
CONTEXT:  COPY [table_name], line 2: "1,For data test"
问题:


是否可以只从文件中插入指定的列而不接触其他列,即将其他列保留为其当前值?我在Postgres文档中没有找到任何关于这方面的信息。

您显然在寻找UPDATE语句,但copy将始终运行INSERT

您需要将该文件导入一个临时表,然后从该表运行更新

大致如下:

create table data_import
(
  id integer, 
  name text
);

copy data_import from 'your_file.csv';
完成后,您可以从以下内容更新实际表格:

update the_table t
  set name = i.name
from data_import i
where i.id = t.id;

这假设
id
是目标表中的主键(或至少是唯一的)。

是的,看起来这是针对我的情况的最佳解决方案。谢谢