เมื่อคุณพยายามเข้าถึงหรือลบฐานข้อมูล PostgreSQL และได้รับข้อความแสดงข้อผิดพลาดดังนี้:
ERROR: database "database_name" is being accessed by other users
DETAIL: There are 1 other session(s) using the database.
ข้อผิดพลาดนี้เกิดขึ้นเมื่อมีผู้ใช้หรือโปรแกรมอื่นกำลังเชื่อมต่อกับฐานข้อมูลที่คุณพยายามเข้าถึง ต่อไปนี้คือวิธีแก้ไขปัญหา:
ขั้นตอนที่ 1: ตรวจสอบเซสชันที่ใช้งานฐานข้อมูล
ใช้คำสั่ง SQL ต่อไปนี้เพื่อดูรายการเซสชันที่กำลังเชื่อมต่อกับฐานข้อมูลของคุณ:
SELECT * FROM pg_stat_activity WHERE datname = '<ชื่อฐานข้อมูล>';
แทน <ชื่อฐานข้อมูล> ด้วยชื่อฐานข้อมูลที่คุณกำลังตรวจสอบ
คำสั่งนี้จะแสดงข้อมูลเกี่ยวกับเซสชันทั้งหมดที่กำลังใช้งานฐานข้อมูลนั้น รวมถึง PID (Process ID), ชื่อผู้ใช้, แอปพลิเคชันที่เชื่อมต่อ และอื่น ๆ
ขั้นตอนที่ 2: ยกเลิกการเชื่อมต่อเซสชัน
หลังจากที่คุณได้ตรวจสอบเซสชันแล้ว คุณสามารถยกเลิกการเชื่อมต่อทั้งหมดโดยใช้คำสั่งต่อไปนี้:
SELECT pg_terminate_backend(pid)
FROM pg_stat_get_activity(NULL::integer)
WHERE datid=(SELECT oid from pg_database where datname = '<ชื่อฐานข้อมูล>');
แทน <ชื่อฐานข้อมูล> ด้วยชื่อฐานข้อมูลที่คุณต้องการยกเลิกการเชื่อมต่อ
คำสั่งนี้จะยกเลิกการเชื่อมต่อทุกเซสชันที่กำลังใช้งานฐานข้อมูลที่ระบุ
ข้อควรระวัง
- การยกเลิกการเชื่อมต่อเซสชันอาจส่งผลกระทบต่อผู้ใช้หรือแอปพลิเคชันอื่นที่กำลังใช้งานฐานข้อมูล ควรใช้ความระมัดระวังและแจ้งเตือนผู้ใช้ก่อนดำเนินการ
- หากเป็นไปได้ ควรตรวจสอบและปิดการเชื่อมต่อจากแอปพลิเคชันหรือผู้ใช้อื่นๆ ก่อนที่จะใช้คำสั่งยกเลิกการเชื่อมต่อโดยตรง
- ในสภาพแวดล้อมการผลิต ควรวางแผนการบำรุงรักษาฐานข้อมูลอย่างรอบคอบเพื่อหลีกเลี่ยงการหยุดชะงักของบริการ -หลังจากยกเลิกการเชื่อมต่อแล้ว ควรตรวจสอบอีกครั้งเพื่อให้แน่ใจว่าไม่มีเซสชันใหม่เชื่อมต่อเข้ามา
การใช้คำสั่งเหล่านี้อย่างระมัดระวังจะช่วยให้คุณจัดการกับปัญหาการเข้าถึงฐานข้อมูลที่ถูกใช้งานโดยผู้ใช้อื่นได้อย่างมีประสิทธิภาพ
Top comments (0)