INSERT
は確かです 、UPDATE
またはDELETE
ROW EXCLUSIVE
を取得する必要があります 更新するテーブルをロックします。
ただし、このロックはSELECT
を妨げるものではありません。 正常に動作することから。 SELECT
ACCESS SHARE
のみが必要です ロック。このロックはROW EXCLUSIVE
と互換性があります -つまり、SELECT
を完全に実行できます。 他のデータはINSERT
によって更新されます 、UPDATE
またはDELETE
、明示的なロックを取得しない限り。
つまり、2番目のアプローチを使用してデッドロックが発生することはありません(SELECT FOR UPDATE
を使用しないでください)。 大丈夫です。
詳細については、PostgreSQLのドキュメント をご覧ください。 。