これが表です(簡略化):
テーブル「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によってブロックされました。 ヒント:クエリの詳細については、サーバーログを参照してください。
複数のプロセスによって並行して実行されるそのクエリは、どのようにしてデッドロックにつながる可能性がありますか?
ありがとう!