Karn Tirasoontorn

August 12, 2021

PostgreSQL: เมื่อจะลบฐานข้อมูลแล้วลบไม่ได้เพราะ There is 1 other session using the database

หลายครั้งที่พยายามจะลบฐานข้อมูลเก่าๆ ของ Postgresql ที่อยู่ในเครื่องแล้วลบไม่ได้ เนื่องจากมี error พ่นออกมาบอกว่ามี session กำลังใช้งานฐานข้อมูลนี้อยู่

drop_database.png


ทั้งๆ ที่เราก็มั่นใจว่าไม่ได้เชื่อมต่อกับฐานข้อมูลดังกล่าวแล้ว และทุกครั้งก็ใช้วิธีง่ายๆ คือการรีสตาร์ท PosgreSQL แล้วกลับไปลบฐานข้อมูลใหม่ แต่วิธีการนี้ทำให้การเชื่อมต่อฐานข้อมูลอื่นๆ ที่กำลังใช้งานอยู่หลุดไปด้วย

ถ้าไม่อยากจะรีสตาร์ท PostgreSQL จะลบฐานข้อมูลได้อย่างไรนะ เราสามารถที่จะทำตรวจสอบ และลบการเชื่อมต่อที่เข้าถึงฐานข้อมูลของเราได้จาก pg_stat_activity

ตรวจสอบการเชื่อมต่อกับฐานข้อมูล

select datid, datname, pid, usesysid, usename, application_name 
from pg_stat_activity 
where datname = 'dummy_data';

check_activity.png


ลบการเชื่อมต่อกับฐานข้อมูล

terminate_connections.png


select pg_terminate_backend(pg_stat_activity.pid)
from pg_stat_activity
where pg_stat_activity.datname = 'dummy_data';

เพียงเท่านี้เราก็สามารถจะลบฐานข้อมูลได้แล้ว

!! คำสั่งข้างต้นรองรับตั้งแต่ PostgreSQL เวอร์ชัน 9.2 ขึ้นไป