问题描述
只有存在于产品表中的产品才能添加到价目表中。
脚本
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 (将#修改为@)