วิธีเคลียร์เซสชั่นการเชื่อมต่อของ PostgeSQL/PostGIS
จริงๆ แล้วบทความนี้ไม่ได้มีเนื้อหาอะไรที่มากมายนัก แต่เป็นการบันทึกความรู้เล็กน้อยที่ตัวผมเองมักจะลืมวิธีการนี้อยู่บ่อยๆ ครับ เราที่เป็นนักภูมิสารสนเทศหรือนักพัฒนาระบบที่ต้องใช้ PostgreSQL และส่วนเสริม PostGIS เพื่อทำงานฐานข้อมูลเชิงพื้นที่โดยอาศัยฟังก์ชันเครื่องมือต่างของ PostGIS ก็ดีครับ แต่ถ้าเราใช้กันหลายเครื่องหรือมีการเชื่อมต่อกับฐานข้อมูลดังกล่าวนั้นหลายแหล่ง ถ้าเราจะต้องการที่จะลบหรือจัดการอะไรบางอย่างกับฐานข้อมูลก้อนนี้ แต่ดันไม่สามารถทำอะไรได้เนื่องจากการเชื่อมต่อหรือการใช้งานจากเซสชั่นนั้นอยู่ ดังข้อความด้านล่าง
ERROR: database "database_name" is being accessed by other users
DETAIL: There are 1 other session(s) using the database.
วิธีการแก้ไข ก็มีหลายๆ วิธีครับ ประมาณนี้
แบบที่ 1 ใช้ pg_terminate_backend โดยเขียนคำสั่ง SQL
SELECT
pg_terminate_backend(pid)
FROM
pg_stat_activity
WHERE
-- don't kill my own connection!
pid <> pg_backend_pid()
-- don't kill the connections to other databases
AND datname = 'database_name'
;
-- สำหรับคนที่ใช้ postgres 8.4-9.1 ให้ใช้ procpid แทน pid
SELECT
pg_terminate_backend(procpid)
FROM
pg_stat_activity
WHERE
-- don't kill my own connection!
procpid <> pg_backend_pid()
-- don't kill the connections to other databases
AND datname = 'database_name'
;
แบบที่ 2ใช้วิธีการ restart service postgresql
Windows: พิมพ์services
บนแถบค้นหา -> ทำการค้นหาpostgresql
ที่ service ของคุณ -> คลิกเลือก servicepostgresql
-> จากนั้นคลิกrestart service
Ubuntu: sudo service postgresql restart
macOS: brew services restart postgresql