![](/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.