![](/img/trans.png)
[英]How do I insert multiple records with an ON CONFLICT UPDATE clause in Postgres?
[英]Postgres conditional insert with an ON CONFLICT clause
我有下表:
CREATE TABLE orders(
order_id text primary key,
payment_status text not null
)
如果它發生變化,我想更新payment_status:
INSERT INTO orders(
order_id,
payment_status
)
VALUES(
'101',
'Paid'
)
ON CONFLICT (order_id) DO UPDATE SET
payment_status = EXCLUDED.payment_status
有三種可能的付款狀態:
ON CONFLICT 子句用於在訂單行從“已付款”更改為“已退款”時更新訂單行。 但是,該表應該只包含狀態為“已付款”或“已退款”的訂單行,而不是“等待付款”的行。 如果我在語句末尾指定 WHERE 條件為
WHERE EXCLUDED.payment_status != 'Awaiting payment'
此 where 條件僅適用於主鍵發生沖突時,而不適用於插入新的 order_id 時,從而讓具有“等待付款”狀態的訂單在第一次插入時傳遞。
我怎樣才能做這樣一個插入,只允許在第一個插入時插入某些 pay_status 值?
該表應僅包含狀態為“已付款”或“已退款”的訂單行,而不是“等待付款”的行。
CHECK
約束是正確的解決方案,也不限於特定查詢。
CREATE TABLE orders(
order_id text primary key,
payment_status text not null CHECK (payment_status IN ('Paid', 'Refunded'))
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.