场景:有一张表,其中发生行的更新。该表还具有一个BEFORE UPDATE 行触发器,它在工作开始时使用 pg_advisory_xact_lock。
问题:先使用哪把锁?因为 UPDATE 操作本身没有密钥更新而阻塞?或者 pg_advisory_xact_lock?
根据Postgresql 文档,“语句级 BEFORE 触发器在语句开始执行任何操作之前触发”。这让人觉得应该首先应用 pg_advisory_xact_lock 锁。
但是在进行实验之后:在并行事务中,我首先手动应用 pg_advisory_xact_lock,然后进行无键更新,然后尝试使用触发器触发来更新行。我得到的结果是第二个事务由于无法获取表记录锁而被取消,而不是由于无法获取咨询锁。表示先获取行锁,再执行触发器。
但我在文档中没有找到任何证实我的实验结果的证据。有人知道我可以在哪里阅读此场景中的操作顺序吗?