微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

批量插入时忽略冲突时不做任何子句

如何解决批量插入时忽略冲突时不做任何子句

只有存在于产品表中的产品才能添加到价目表中。

脚本

update pricelistnew set timestamp=to_char(Now(),'YYYYMMDDHH24MISS');

truncate pricelist;

insert into pricelist
select * from pricelistnew
on conflict do nothing;

抛出错误

错误:插入或更新表“pricelist”违反外键 约束“pricelist_product_fkey” 细节:钥匙 (product)=(TMMEM0EM00691BDS ) 不存在于表“product”中。

带有额外外键检查的脚本

insert into pricelist
select * from pricelistnew
where product in (select product  from product)
on conflict do nothing;

工作。

为什么忽略 on conflict do nothing 子句? 如何只添加与外键匹配的产品而不使用额外的检查

product in (select product  from product )

价目表有 300000 行,此命令在快速服务器上需要几分钟才能完成。它锁定表,以便其他同时运行的查询被延迟。如何有效地进行批量插入?

使用

Postgresql 13.2,由 Visual C++ build 1900 编译,64 位

更新

表结构:

create table product (
   product char(20) primary key );

create table pricelist ( product char(20) references product on update cascade on delete cascade deferrable,timestamp char(14),price numeric(12,2) );

create table pricelistnew ( product char(20),2) );

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。