如何解决批量插入时忽略冲突时不做任何子句
只有存在于产品表中的产品才能添加到价目表中。
脚本
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 举报,一经查实,本站将立刻删除。