PostgreSQL "database is being accessed by other users" Çözümü
PostgreSQL "database is being accessed by other users" — Drop Neden Engelleniyor?
Hata mesajı semptomdur, kök neden değildir. Sunucuyu yeniden başlatmadan veya rastgele ayar değiştirmeden önce aşağıdaki "Nedeni ayırt eden tek sorgu"yu çalıştırarak gerçek senaryoyu netleştirin.
▸Belirti
ERROR: database "test_db" is being accessed by other users
DETAIL: There are 3 other sessions using the database.Bu hata DROP DATABASE ve ALTER DATABASE ... RENAME işlemlerinde çıkar. Mesaj kaç oturum olduğunu söyler ama kim olduğunu söylemez — ve asıl sürpriz, o oturumların bazen pg_stat_activity'de hiç görünmemesidir.
▸Adım adım çözüm
1. Yeni bağlantıları kesin (PostgreSQL 13+). Sıralama kritiktir: önce kapıyı kapatın, sonra içeridekileri çıkarın. Aksi halde oturumları sonlandırırken uygulama saniyeler içinde yeni bağlantı açar ve kısır döngüye girersiniz.
ALTER DATABASE test_db WITH ALLOW_CONNECTIONS false;2. Mevcut oturumları sonlandırın.
SELECT pg_terminate_backend(pid)
FROM pg_stat_activity
WHERE datname = 'test_db'
AND pid <> pg_backend_pid();3. İşlemi tekrarlayın. Tek tur genellikle yetmeyebilir; aynı iki komutu art arda çalıştırın.
4. Görünmeyen engelleri kontrol edin. Hata devam ediyorsa neden normal bağlantılar değildir. Üç kritik olasılık:
-- a) Hazırlıklı (prepared) transaction'lar: oturuma bağlı değildir
SELECT gid, database, prepared FROM pg_prepared_xacts;
-- b) Mantıksal replikasyon slot'ları: veritabanını kilitler
SELECT slot_name, database, active FROM pg_replication_slots WHERE database = 'test_db';
-- c) Açık mantıksal replikasyon abonelikleri
SELECT subname, subdbid::regdatabase FROM pg_subscription;pg_terminate_backend ile sonlandıramazsınız; açıkça ROLLBACK PREPARED 'gid'; çalıştırmanız gerekir. Replikasyon slot'unu ise SELECT pg_drop_replication_slot('slot_name'); ile düşürmeden veritabanı silinemez.5. Veritabanını silin (veya erişimi geri açın).
DROP DATABASE test_db;Silmiyorsanız kapıyı geri açmayı unutmayın:
ALTER DATABASE test_db WITH ALLOW_CONNECTIONS true;▸Bunu bir daha yaşamamak için
Veritabanı silme ve bakım işlemlerini bir tatbikat runbook'una bağlayın: uygulamayı durdur → bağlantıları kes (ALLOW_CONNECTIONS false) → slot ve prepared transaction kontrolü → drop.
- •İlgili Runbook: PostgreSQL Backup Doğrulama & Restore Tatbikatı
- •İlgili Hata: PostgreSQL duplicate key violates unique constraint
PostgreSQL Diğer Üretim Rehberleri
Aynı veritabanı motoruna ait doğrulanmış diğer içerikler.
PostgreSQL Backup'ınızı Doğrulayın: İlk Restore Tatbikatı
Backup job'unun başarılı bitmesi verinin geri dönülebildiğini kanıtlamaz. Bu runbook, izole tatbikat ortamında uçtan uca restore ve veri doğrulama adımlarını yürütür.
PostgreSQL Replication Lag: Darboğazı Adım Adım Teşhis Etme
Replica geriden geldiğinde sorun WAL üretiminde mi, ağ aktarımında mı yoksa replay darboğazında mı? Salt okunur sorgularla darboğazı adım adım tespit edin.
psql CLI Hızlı Referans
Bağlantı parametreleri, meta komutlar (\d, \l, \du), .psqlrc şablonu, COPY streaming ve anlık kilit/aktivite teşhis sorguları.