postgresql中根據唯一索引實現更新或新增

2021-10-09 13:17:29 字數 1246 閱讀 9254

postgresql提供的方法:

on conflict do update保證乙個原子的 insert或者 update結果。在沒有無關錯誤的

前提下,這兩種 結果之一可以得到保證,即使在很高的併發度也能保證。這也可以被稱作

upsert — 「update 或 insert」。

但是這個方法和oracle中merge into 的方法差異較大,只能單條資料更新或新增,且需要建主鍵,一般情況下入庫的表不建主鍵,故用do$$**塊實現更新或新增的需要

do

$$ declare

rec record;

record_id integer

;begin

for rec in

(select b.s_city_id

b.week_no,

b.sad

from imp_send_info_w b

where b.week_no = to_char(

current_date-7

,'yyyyiw'))

loop

select

count(1

)into record_id

from imp_send_info_week

where

coalesce(s_city_id,

'-1')=

coalesce

(rec.s_city_id,

'-1'

)and week_no = rec.week_no;

if record_id =

0then

insert

into imp_send_info_week

(s_city_id,

week_no,

sad,

int_id)

values

(rec.s_city_id,

rec.week_no,

nextval(

'public.seq_imp_net_optimization'))

;else

update imp_send_info_week

set sad=rec.sad

where s_city_id=rec.s_city_id

and week_no = rec.week_no

endif;

endloop

;end

$$;

根據MAC生成唯一IP

冷勝魁 seaquester lengshengkui gmail.com 2009 5 15 mac2ip.sh bin sh if ne 1 then echo usage basename 0 exit 1 fi we need convert to uppercase,otherwise t...

vue根據陣列物件中某個唯一標識去重

由於在vue中,會自動在陣列和物件中加入 obser 觀察者模式的一些屬性,所以直接用陣列的filter去重 下面這種 indexof不能準確識別 var arr 1,2,2,3,4,5,5,6,7,7 var arr2 arr.filter function x,index,self consol...

如何根據當前時間生成唯一編號

long id new date gettime 是當前時間的唯一的編號 system.currenttimemillis 只是獲取當前的時間戳,單位是毫秒,但是這並不是唯一的.如果你在1毫秒中進行了兩次操作,那麼這兩個id就是相等的.問題的解決看你要求的精度如何了.一般可以使用當前的時間戳作為ra...