最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PostgreSQL中ON?CONFLICT的使用及一些擴展用法

 更新時間:2024年06月04日 09:33:45   作者:圍城客  
Postgres?ON?CONFLICT是PostgreSQL數(shù)據(jù)庫中的一個功能,用于處理插入或更新數(shù)據(jù)時的沖突情況,下面這篇文章主要給大家介紹了關(guān)于PostgreSQL中ON?CONFLICT的使用及一些擴展用法的相關(guān)資料,需要的朋友可以參考下

在 PostgreSQL 中,ON CONFLICT 子句是用在 INSERT 語句中的一種機制,它可以幫助你處理當插入操作遇到違反唯一性約束(比如唯一索引或主鍵約束)時的情況。使用 ON CONFLICT 子句,你可以指定當違反唯一性約束時應(yīng)該采取的操作,比如忽略這個插入,或者更新已經(jīng)存在的行。

ON CONFLICT (sample_id_lims) DO UPDATE 是指當你在插入數(shù)據(jù)時,如果 sample_id_lims 字段的值導(dǎo)致了唯一性約束的沖突,那么不是放棄這次插入,而是更新已經(jīng)存在的那一行數(shù)據(jù)。

這里有一個具體的例子:

假設(shè)你有一個名為 samples 的表,它有一個名為 sample_id_lims 的字段,該字段上有一個唯一索引。現(xiàn)在,你想插入一個新的樣本數(shù)據(jù),但如果 sample_id_lims 的值已經(jīng)存在,你希望更新這條記錄的其他字段而不是放棄插入。

INSERT INTO samples (sample_id_lims, data_field1, data_field2)
VALUES ('123', 'New Data 1', 'New Data 2')
ON CONFLICT (sample_id_lims) DO UPDATE
SET data_field1 = EXCLUDED.data_field1,
    data_field2 = EXCLUDED.data_field2;

在這個例子中,如果 sample_id_lims 為 '123' 的記錄已經(jīng)存在,那么 ON CONFLICT 子句會觸發(fā),并執(zhí)行 DO UPDATE 操作。SET 子句用于更新沖突行的 data_field1 和 data_field2 字段。關(guān)鍵字 EXCLUDED 用來引用那些原本嘗試插入但發(fā)生沖突的值。
通過使用 ON CONFLICT 子句,你可以確保表中的數(shù)據(jù)保持唯一性,同時仍然可以通過更新操作來應(yīng)對重復(fù)的插入嘗試。

ON CONFLICT 子句在 PostgreSQL 中的使用不僅限于簡單的 UPDATE 操作。這里有一些擴展用法:

1、指定唯一約束名稱:如果表中有多個唯一約束,你可以通過唯一約束的名稱指定應(yīng)對哪個約束的沖突。

INSERT INTO table_name (column1, column2) VALUES (value1, value2)
ON CONFLICT ON CONSTRAINT constraint_name
DO NOTHING; -- 或者 DO UPDATE ...

2、條件更新:在執(zhí)行 UPDATE 操作時,可以加入 WHERE 子句來設(shè)置條件,僅在滿足某些條件時才更新。

INSERT INTO table_name (column1, column2) VALUES (value1, value2)
ON CONFLICT (column1) DO UPDATE
SET column2 = EXCLUDED.column2
WHERE table_name.column3 > 10;

3、使用 DO NOTHING:如果你不想在發(fā)生沖突時執(zhí)行任何操作,可以使用 DO NOTHING。這樣,如果插入的數(shù)據(jù)違反了唯一性約束,PostgreSQL 會忽略這個插入,并且不會報錯。

INSERT INTO table_name (column1, column2) VALUES (value1, value2)
ON CONFLICT (column1) DO NOTHING;

4、返回插入或更新后的行:通過 RETURNING 子句,你可以在 INSERT 操作完成后返回插入或更新的行的信息。

INSERT INTO table_name (column1, column2) VALUES (value1, value2)
ON CONFLICT (column1) DO UPDATE
SET column2 = EXCLUDED.column2
RETURNING *;

5、使用 WHERE 子句過濾沖突的行:你可以在 ON CONFLICT 子句中使用 WHERE 來過濾哪些沖突行應(yīng)該被更新。

INSERT INTO table_name (column1, column2, status) VALUES (value1, value2, 'pending')
ON CONFLICT (column1) WHERE (table_name.status = 'active') DO UPDATE
SET column2 = EXCLUDED.column2;

上面的例子中,只有當沖突行的 status 字段為 'active' 時,才會執(zhí)行 UPDATE 操作。

使用 ON CONFLICT 子句可以幫助你以一種優(yōu)雅的方式處理可能的數(shù)據(jù)插入沖突,確保數(shù)據(jù)的完整性,同時還能靈活地進行各種條件處理。

on conflict 用法真的很方便,不存在就插入,存在可以更新 可以do nothing,就是用起來要注意幾點

  • 字段必須完全同名。試了半天不行,改了同名就行。
  • 拿不到原表的內(nèi)容。退而求其次用原表做一個內(nèi)連接就行,取原值然后想怎么玩都行。下面這個例子就是取原值并加上新統(tǒng)計值更新回原表。
  • 建臨時表可以加入很多自己需要的內(nèi)容,操作空間更大
  • excluded代表新選擇出來的內(nèi)容。
	insert into plate_no_info  
	select plate_no,total_orders ,first_parking_time,last_parking_time
	from (
	select t1.plate_no,(plate_no_info.total_orders + cnt ) as total_orders,plate_no_info.first_parking_time,t1.last_parking_time
	from (
	select plate_no,count(id) cnt,min(parking_time) first_parking_time,max(parking_time) last_parking_time
	from order_list 
	WHERE created_at > CURRENT_DATE - 1
	and plate_no ~'^[\u2e80-\ua4cf]|[\uf900-\ufaff]|[\ufe30-\ufe4f]'
	GROUP BY plate_no
	) t1,
	plate_no_info
	WHERE 1=1
	AND t1.plate_no = plate_no_info.plate_no
	)
	as t_temp
	on conflict(plate_no) 
-- 	do NOTHING
	do update 
	set 
	total_orders = excluded.total_orders,
	first_parking_time = excluded.first_parking_time,
	last_parking_time = excluded.last_parking_time;

總結(jié)

到此這篇關(guān)于PostgreSQL中ON CONFLICT的使用及一些擴展用法的文章就介紹到這了,更多相關(guān)PGSQL中ON CONFLICT使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Mac系統(tǒng)重置PostgreSQL密碼的方法示例代碼

    Mac系統(tǒng)重置PostgreSQL密碼的方法示例代碼

    PostgreSQL 是一個免費的對象-關(guān)系數(shù)據(jù)庫服務(wù)器(ORDBMS),在靈活的BSD許可證下發(fā)行。這篇文章主要介紹了Mac系統(tǒng)重置PostgreSQL密碼的方法示例代碼,需要的朋友可以參考下
    2020-02-02
  • PostgreSQL 添加各種約束語法的操作

    PostgreSQL 添加各種約束語法的操作

    這篇文章主要介紹了PostgreSQL 添加各種約束語法的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • PostgreSQL 慢查詢SQL跟蹤操作

    PostgreSQL 慢查詢SQL跟蹤操作

    這篇文章主要介紹了PostgreSQL 慢查詢SQL跟蹤操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • postgresql 計算距離的實例(單位直接生成米)

    postgresql 計算距離的實例(單位直接生成米)

    這篇文章主要介紹了postgresql 計算距離的實例(單位直接生成米),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • postgresql coalesce函數(shù)數(shù)據(jù)轉(zhuǎn)換方式

    postgresql coalesce函數(shù)數(shù)據(jù)轉(zhuǎn)換方式

    這篇文章主要介紹了postgresql coalesce函數(shù)數(shù)據(jù)轉(zhuǎn)換方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • Linux CentOS 7安裝PostgreSQL9.3圖文教程

    Linux CentOS 7安裝PostgreSQL9.3圖文教程

    這篇文章主要為大家詳細介紹了Linux CentOS 7安裝PostgresSQL9.3圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • 從原理到實戰(zhàn)詳解PostgreSQL數(shù)據(jù)恢復(fù)的完整指南

    從原理到實戰(zhàn)詳解PostgreSQL數(shù)據(jù)恢復(fù)的完整指南

    本文將從原理到實戰(zhàn),萬字詳解?PostgreSQL?如何實現(xiàn)數(shù)據(jù)恢復(fù),覆蓋邏輯恢復(fù)、物理恢復(fù)PITR、誤操作回滾、從庫重建、工具選型及最佳實踐,希望對大家有所幫助
    2026-02-02
  • docker快速部署postgresql的完整步驟記錄

    docker快速部署postgresql的完整步驟記錄

    PostgreSQL?(pSQL)?是一個功能強大的開源關(guān)系型數(shù)據(jù)庫系統(tǒng),使用?Docker?部署?PostgreSQL?可以快速搭建開發(fā)、測試或生產(chǎn)環(huán)境,下面這篇文章主要介紹了docker快速部署postgresql的相關(guān)資料,需要的朋友可以參考下
    2025-09-09
  • PostgreSQL如何選擇合適的數(shù)據(jù)類型

    PostgreSQL如何選擇合適的數(shù)據(jù)類型

    本文詳細介紹了PostgreSQL中各種數(shù)據(jù)類型的特性、適用場景、潛在陷阱及最佳實踐,涵蓋了數(shù)值、字符、時間、布爾、枚舉、網(wǎng)絡(luò)、JSON、幾何、全文搜索、范圍、自定義類型等核心類別,并通過真實案例說明了數(shù)據(jù)類型選型的邏輯,感興趣的朋友跟隨小編一起看看吧
    2026-01-01
  • 如何獲取PostgreSQL數(shù)據(jù)庫中的JSON值

    如何獲取PostgreSQL數(shù)據(jù)庫中的JSON值

    這篇文章主要介紹了如何獲取PostgreSQL數(shù)據(jù)庫中的JSON值操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01

最新評論

武乡县| 和静县| 邻水| 元氏县| 铜鼓县| 伊宁市| 中方县| 兰考县| 苍梧县| 淮北市| 崇明县| 长宁区| 鄂尔多斯市| 大宁县| 彰武县| 龙陵县| 奉节县| 肇东市| 宁蒗| 历史| 肥乡县| 咸宁市| 儋州市| 万源市| 邯郸县| 长沙县| 杨浦区| 县级市| 云梦县| 奉化市| 阆中市| 耿马| 乐清市| 德格县| 清河县| 景德镇市| 万年县| 安顺市| 土默特左旗| 股票| 宁河县|