วิธีเคลียร์เซสชั่นการเชื่อมต่อของ PostgeSQL/PostGIS

Chingchai Hoomhong
MAPEDIA BLOG
Published in
Jun 26, 2023
Image source: https://bitnine.net/blog-postgresql/what-is-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

--

--