PostgreSQL - advisory lock query

เมื่อรัน application หรือ query database postgreSQL แล้วพบ “advisory lock” เราจำเป็นต้องตรวจสอบ query ที่ทำให้เกิด Lock และ kill query นั้นทิ้ง เพื่อให้ระบบสามารถืำงานได้ต่อ

วิธีการตรวจสอบและแก้ไข
ใช้คำสั่งด้านล่างนี้เพื่อตรวจสอบ PID ที่ทำให้เกิด “advisory lock”

SELECT * FROM pg_locks JOIN pg_stat_activity USING (pid) WHERE locktype='advisory';

หลังจากรันคำสั่งแล้วจะได้ค่า PID มา ซึ่งจำเป็นต้อง terminate PID นี้ โดยให้รันคำสั่ง

SELECT pg_cancel_backend(PID);

PID คือเลข PID ที่ได้จากรันคำสั่งค้นหา advisory lock
แต่ถ้าหากยังไม่สามารถ terminate PID นี้ได้ ให้ใช้คำสั่งด้านล่างนี้แทน

SELECT pg_terminate_backend(PID);