postgresql – Postgres INSERT ON CONFLICT DO UPDATE vs INSER
我有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:
这是您尝试实现的最佳实践. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- ajax效果模拟――隐藏的iframe无刷新效果
- ruby – 使用Mongoid按日期分组的最佳方式
- c – 为什么动态创建的对象与对象的大小相差两倍?
- 如何在c中获得图层类型的caffe
- 是否有一个C#实用程序来匹配(语法分析)树中的模式?
- ios – 在UINavigationController push和pop之后跳转的UISc
- material-design – 出现屏幕键盘时隐藏FAB
- ruby-on-rails – 用于main的局部变量或方法`config’:Obj
- ruby-on-rails – 如何在Ruby / Rails中匹配和替换模板标签
- ajax提交数据到后台php接收(实现方法)
- c# – 将T-SQL类型作为字符串,将它评估为.Net类型
- objective-c – 在iOS中以编程方式实例化类
- VB.NET – 如何移动到下一个项目a For Each Loop
- ruby-on-rails – 更改密码后用户会话无效,但只有
- swift – 奇怪的String.unicodeScalars和Charact
- 为什么在grep正则表达式中包含单个字母?
- ruby-on-rails-3 – 帮助在Rails中移植时间和时区
- 混合模式程序集是针对“v2.0.50727”版的运行时生
- swift3 – Xcode 8 – swift 3:创建一个未知类型
- ruby – 错误:符号`pread64’已经定义