これが表です(簡略化):
テーブル「public.link」 コラム| タイプ| 修飾子 --------------- + ----------------------------- + ---- ----------------------------------------------- id | 整数| nullではないデフォルトnextval('link_id_seq' :: regclass) page_id | 整数| Placed_at | タイムゾーンなしのタイムスタンプ| デフォルトのnow() インデックス: "link_pkey" PRIMARY KEY、btree(id) "link_page_id_index" btree(page_id) 外部キーの制約: "link_page_id_foreign_key"外部キー(page_id)参照page(id)ON UPDATE RESTRICT ON DELETE RESTRICT
そしてここにクエリがあります(簡略化されています):
UPDATEリンクSETpage_id=?、placed_at = now()
WHERE id IN(SELECT id FROM link ...)AND page_id IS NOT NULL
デッドロックメッセージ:
エラー:デッドロックが検出されました 詳細:プロセス5822は、トランザクション19705でShareLockを待機します。プロセス5821によってブロックされました。 プロセス5821は、トランザクション19706でShareLockを待機します。プロセス5822によってブロックされました。 ヒント:クエリの詳細については、サーバーログを参照してください。
複数のプロセスによって並行して実行されるそのクエリは、どのようにしてデッドロックにつながる可能性がありますか?
ありがとう!