หลายครั้งที่พยายามจะลบฐานข้อมูลเก่าๆ ของ Postgresql ที่อยู่ในเครื่องแล้วลบไม่ได้ เนื่องจากมี error พ่นออกมาบอกว่ามี session กำลังใช้งานฐานข้อมูลนี้อยู่
ทั้งๆ ที่เราก็มั่นใจว่าไม่ได้เชื่อมต่อกับฐานข้อมูลดังกล่าวแล้ว และทุกครั้งก็ใช้วิธีง่ายๆ คือการรีสตาร์ท PosgreSQL แล้วกลับไปลบฐานข้อมูลใหม่ แต่วิธีการนี้ทำให้การเชื่อมต่อฐานข้อมูลอื่นๆ ที่กำลังใช้งานอยู่หลุดไปด้วย
ถ้าไม่อยากจะรีสตาร์ท PostgreSQL จะลบฐานข้อมูลได้อย่างไรนะ เราสามารถที่จะทำตรวจสอบ และลบการเชื่อมต่อที่เข้าถึงฐานข้อมูลของเราได้จาก pg_stat_activity
ตรวจสอบการเชื่อมต่อกับฐานข้อมูล
ทั้งๆ ที่เราก็มั่นใจว่าไม่ได้เชื่อมต่อกับฐานข้อมูลดังกล่าวแล้ว และทุกครั้งก็ใช้วิธีง่ายๆ คือการรีสตาร์ท PosgreSQL แล้วกลับไปลบฐานข้อมูลใหม่ แต่วิธีการนี้ทำให้การเชื่อมต่อฐานข้อมูลอื่นๆ ที่กำลังใช้งานอยู่หลุดไปด้วย
ถ้าไม่อยากจะรีสตาร์ท PostgreSQL จะลบฐานข้อมูลได้อย่างไรนะ เราสามารถที่จะทำตรวจสอบ และลบการเชื่อมต่อที่เข้าถึงฐานข้อมูลของเราได้จาก pg_stat_activity
ตรวจสอบการเชื่อมต่อกับฐานข้อมูล
select datid, datname, pid, usesysid, usename, application_name from pg_stat_activity where datname = 'dummy_data';
ลบการเชื่อมต่อกับฐานข้อมูล
select pg_terminate_backend(pg_stat_activity.pid) from pg_stat_activity where pg_stat_activity.datname = 'dummy_data';
เพียงเท่านี้เราก็สามารถจะลบฐานข้อมูลได้แล้ว
!! คำสั่งข้างต้นรองรับตั้งแต่ PostgreSQL เวอร์ชัน 9.2 ขึ้นไป