久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

PostgreSQL數據庫如果不存在則插入,存在則更新

144次閱讀
沒有評論

共計 1057 個字符,預計需要花費 3 分鐘才能閱讀完成。

自動寫代碼機器人,免費開通

新遇到一個業務需求,往 postgresql 中插入數據的時候需滿足:如果數據庫存在這條記錄,則進行修改;不存在則進行插入。

Oracle 中可以用 merge 來解決。Pg 中之前沒做過類似操作,百度查了一下,PostgreSQL 9.5 版本帶來了一個新特性:UPSERT。UPSERT 是 INSERT, ON CONFLICT UPDATE 的簡寫,簡而言之就是:插入數據,正常時寫入,主鍵沖突時更新。

示例來看一下:

一張測試表,結構如下:

yqm=# \d student;

 Table public.student

 Column |  Type  | Modifiers

——–+———————–+———–

 id  | integer  |

 name  | character varying(20) |

Indexes:

  id_cons UNIQUE CONSTRAINT, btree (id)

目前數據如下:

yqm=# select * from student;

 id | name

—-+——

 1 | a

 2 | b

 3 | c

(3 rows)

要插入的表要有一條唯一性約束,不然會報如下錯:

yqm=# insert into student values(4, d) on conflict(id) do update set name= as

ERROR:  there is no unique or exclusion constraint matching the ON CONFLICT specification

如果存在這種報錯,需要創建一條唯一性約束

yqm=# alter table student add constraint id_cons unique(id);

ALTER TABLE

再次插入

yqm=# insert into student values(4, d) on conflict(id) do update set name= as

INSERT 0 1

查看結果,已經新增了

yqm=# select * from student;

 id | name

—-+——

 1 | a

 2 | b

 3 | c

 4 | d

(4 rows)

再次執行,會做更改操作

yqm=# insert into student values(4, d) on conflict(id) do update set name= as

INSERT 0 1

yqm=# select * from student;

 id | name

—-+——

 1 | a

 2 | b

 3 | c

 4 | as

(4 rows)

 

 

 

向 AI 問一下細節

丸趣 TV 網 – 提供最優質的資源集合!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-12-18發表,共計1057字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 南木林县| 博乐市| 宁南县| 余干县| 崇礼县| 清河县| 台东县| 承德县| 玉溪市| 扶沟县| 大石桥市| 怀安县| 株洲市| 垣曲县| 竹溪县| 卢龙县| 祥云县| 邳州市| 松滋市| 丹寨县| 蛟河市| 铅山县| 济南市| 隆昌县| 玉树县| 泗阳县| 广安市| 广南县| 儋州市| 韶关市| 得荣县| 宜良县| 水城县| 布拖县| 昌邑市| 濮阳县| 和顺县| 湘西| 长葛市| 隆林| 日照市|