一度に次の操作を実行したいです。
SELECT * FROM jobs WHERE status='PENDING';
UPDATE jobs SET status='RUNNING' WHERE status='PENDING';
したがって、保留中のジョブをすべて取得し、その後すぐにそれらを「実行中」として設定します。
これを 2 つのステートメントで順番に実行したくない理由は、SELECT の後、UPDATE の前にジョブが 'PENDING' としてジョブ テーブルに追加される可能性があるためです。そのため、ジョブが PENDING 状態の間に取得していないにもかかわらず、ジョブが RUNNING として設定されてしまいます。
これを 1 つで実行する方法はありますか? SELECT と UPDATE の結果をその場で実行したいのです。
ありがとう。
ベストアンサー1
RETURNING 句を使用して、両方を 1 つのステートメントで処理してみませんか。
UPDATE jobs
SET status='RUNNING'
WHERE status='PENDING'
RETURNING *
こうすることで、UPDATE によって変更されたすべての行を単一のアトミック操作で取得できます。