Postgresql

如何在使用 PostgreSQL 插入之前檢查記錄是否存在?

  • September 1, 2022

我有一個記錄:

insert into posts(id, title, body) values(1, 'First post', 'Awesome');

如果First post標題和Awesome正文已經存在於數據庫中,我想忽略它。

創建表時,可以使用IF NOT EXISTS語法。對於插入,有沒有簡單的方法?

如果您在標題和正文列上創建唯一鍵約束,您可以使用如下插入語句忽略記錄是否已存在

insert into posts(id, title, body) values (1, 'First post', 'Awesome') on conflict (title, body) do nothing;

基本上就像你說的那樣:

insert into posts (id, title, body) 
select 1, 'First post', 'Awesome' 
where not exists (
 select null from posts 
 where (title, body) = ('First post', 'Awesome')
)

您還可以定義一個唯一約束(title, body)並簡單地忽略程序中的相應異常。

無論哪種情況,如果您的應用程序有多個執行緒試圖做同樣的事情,您需要確保它可以正確處理錯誤。

引用自:https://dba.stackexchange.com/questions/316319