Postgre SQL   发布时间:2019-11-06  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了postgresql – Postgres INSERT ON CONFLICT DO UPDATE vs INSERT或UPDATE大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有stock_price_alert表,有3列. stock_price_id是PRIMary KEY&还有FOREIGN KEY到其他表.表定义如下:
create table stock_price_alert (
    stock_price_id integer references stock_price (id) on delete cascade not null,fall_below_alert Boolean not null,rise_above_alert Boolean not null,PRIMARY KEY (stock_price_id)
);

我需要:

1)INSERT记录(如果不存在)

-- query 1
INSERT INTO stock_price_alert (stock_price_id,fall_below_alert,rise_above_alert)
VALUES (1,true,falsE);

2)updatE记录(如果存在)

-- query 2
updatE stock_price_alert SET
    fall_below_alert = true,rise_above_alert = false
WHERE stock_price_id = 1;

首先,我需要在stock_price_alert表上发出SELECT查询,以决定是执行query(1)还是(2).

POSTGRes支持INSERT INTO TABLE ….关于冲突更新…:

-- query 3
INSERT INTO stock_price_alert (stock_price_id,falsE)
ON CONFLICT (stock_price_id) DO updatE SET
    fall_below_alert = EXCLUDED.fall_below_alert,rise_above_alert = EXCLUDED.rise_above_alert;

而不是使用query(1)或(2),我总是可以使用query(3)?然后我不需要在先前和之前发出SELECT查询.它有助于简化代码.

但我想知道,这是最好的做法?查询(3)会导致性能问题或不必要的副作用吗?谢谢.

解决方法

查询3是POSTGRes 9.5中引入的“UPSERT”(= updatE或INSERT)的POSTGRes语法.

documentation

这是您尝试实现的最佳实践.

大佬总结

以上是大佬教程为你收集整理的postgresql – Postgres INSERT ON CONFLICT DO UPDATE vs INSERT或UPDATE全部内容,希望文章能够帮你解决postgresql – Postgres INSERT ON CONFLICT DO UPDATE vs INSERT或UPDATE所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。