我使用這樣的查詢:是否INSERT ...選擇原子事務?
INSERT INTO table
SELECT * FROM table2 t2
JOIN ...
...
WHERE table2.date < now() - '1 day'::INTERVAL
FOR UPDATE OF t2 SKIP LOCKED
ON CONFLICT (...)
DO UPDATE SET ...
RETURNING *;
我的問題是關於FOR UPDATE t2 SKIP LOCKED
。我應該在這裏使用它嗎?或者,Postgres會自動使用INSERT SELECT ON CONFLICT
鎖定這些行直到交易結束?
我的目標是阻止其他應用程序(同時)捕獲已由此人捕獲的內部SELECT
的行。
沒有理由在'INSERT ... ON CONFLICT'中自動鎖定子查詢中的行,因爲該子庫會執行一次。你應該明確地鎖定行。 – klin