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