テーブル全体UPDATE
(WHERE
句を指定せずに)はPostgreSQLのテーブルをロックしますか?例えば。行が削除/挿入されるのを防ぎますか?
例えば。 UPDATE t1 SET key = 'value'
を実行する場合UPDATE
の実行中にt1
に新しい行が挿入されないことを期待できますか?
いいえの場合、UPDATE
が開始後に表示された行も更新することを期待できますか? (キーの定義にDEFAULT 'value'
はありません)
WHERE句のないUPDATEはテーブルのすべての行をロックしますが、DMLのテーブル自体はロックしません。
行はロックされているため、別のトランザクションから削除できません。
しかし、問題なく新しい行を挿入できます(それらが制約に違反していない場合)。
挿入された行後 UPDATEはUPDATEステートメントでは認識されないため、変更されません。