DEV Community

การแก้ไขปัญหา: ฐานข้อมูล Postgres ถูกใช้งานโดยผู้ใช้อื่น

เมื่อคุณพยายามเข้าถึงหรือลบฐานข้อมูล PostgreSQL และได้รับข้อความแสดงข้อผิดพลาดดังนี้:

ERROR: database "database_name" is being accessed by other users
DETAIL: There are 1 other session(s) using the database.
Enter fullscreen mode Exit fullscreen mode

ข้อผิดพลาดนี้เกิดขึ้นเมื่อมีผู้ใช้หรือโปรแกรมอื่นกำลังเชื่อมต่อกับฐานข้อมูลที่คุณพยายามเข้าถึง ต่อไปนี้คือวิธีแก้ไขปัญหา:

ขั้นตอนที่ 1: ตรวจสอบเซสชันที่ใช้งานฐานข้อมูล

ใช้คำสั่ง SQL ต่อไปนี้เพื่อดูรายการเซสชันที่กำลังเชื่อมต่อกับฐานข้อมูลของคุณ:

SELECT * FROM pg_stat_activity WHERE datname = '<ชื่อฐานข้อมูล>';
Enter fullscreen mode Exit fullscreen mode

แทน <ชื่อฐานข้อมูล> ด้วยชื่อฐานข้อมูลที่คุณกำลังตรวจสอบ
คำสั่งนี้จะแสดงข้อมูลเกี่ยวกับเซสชันทั้งหมดที่กำลังใช้งานฐานข้อมูลนั้น รวมถึง 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 = '<ชื่อฐานข้อมูล>');
Enter fullscreen mode Exit fullscreen mode

แทน <ชื่อฐานข้อมูล> ด้วยชื่อฐานข้อมูลที่คุณต้องการยกเลิกการเชื่อมต่อ
คำสั่งนี้จะยกเลิกการเชื่อมต่อทุกเซสชันที่กำลังใช้งานฐานข้อมูลที่ระบุ

ข้อควรระวัง

  • การยกเลิกการเชื่อมต่อเซสชันอาจส่งผลกระทบต่อผู้ใช้หรือแอปพลิเคชันอื่นที่กำลังใช้งานฐานข้อมูล ควรใช้ความระมัดระวังและแจ้งเตือนผู้ใช้ก่อนดำเนินการ
  • หากเป็นไปได้ ควรตรวจสอบและปิดการเชื่อมต่อจากแอปพลิเคชันหรือผู้ใช้อื่นๆ ก่อนที่จะใช้คำสั่งยกเลิกการเชื่อมต่อโดยตรง
  • ในสภาพแวดล้อมการผลิต ควรวางแผนการบำรุงรักษาฐานข้อมูลอย่างรอบคอบเพื่อหลีกเลี่ยงการหยุดชะงักของบริการ -หลังจากยกเลิกการเชื่อมต่อแล้ว ควรตรวจสอบอีกครั้งเพื่อให้แน่ใจว่าไม่มีเซสชันใหม่เชื่อมต่อเข้ามา

การใช้คำสั่งเหล่านี้อย่างระมัดระวังจะช่วยให้คุณจัดการกับปัญหาการเข้าถึงฐานข้อมูลที่ถูกใช้งานโดยผู้ใช้อื่นได้อย่างมีประสิทธิภาพ

Top comments (0)