PostgreSQL 中的更新顺序

UPDATE order in PostgreSQL

我有一个mysql命令:

 update table_demo SET flag= 1 where flag=0 ORDER BY id ASC LIMIT 10

并且在 Postgres 中需要相同的命令,我得到这个错误:

ERROR: syntax error at or near 'ORDER'

要更新前 10 行(实际上需要更新):

UPDATE table_demo t
SET    flag = 1
FROM  (
   SELECT table_demo_id   -- use your actual PK column(s)
   FROM   table_demo
   WHERE  flag IS DISTINCT FROM 1
   ORDER  BY id
   LIMIT  10
   FOR    UPDATE
   ) u
WHERE  u.table_demo_id = t.table_demo_id;

FOR UPDATE(行级锁)仅用于防止并发写访问。如果您的交易是唯一写入该 table 的交易,则不需要它。

如果定义了flag NOT NULL,你可以使用WHERE flag <> 0.

具有更多解释和链接的相关答案:

  • Update top N values using PostgreSQL

  • How do I (or can I) SELECT DISTINCT on multiple columns?