PostgreSQL "database is being accessed by other users" — Drop Neden Engelleniyor?
DROP DATABASE öncesi oturumları güvenle sonlandırma, ALLOW_CONNECTIONS, hazırlıklı transaction'lar ve replication slot engeli.
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
Diğer Veritabanı Hata Teşhisleri
Kriz anında başvurabileceğiniz diğer doğrulanmış hata rehberleri.
PostgreSQL too many clients already Hatası: 6 Adımda Çözüm
FATAL: sorry, too many clients already hatasının üç nedeni, nedeni ayırt eden tek sorgu ve max_connections ile PgBouncer üzerinden kalıcı çözümü.
PostgreSQL password authentication failed Hatası: Neden ve Çözüm
psql password authentication failed hatasının dört nedeni: yanlış şifre, md5/SCRAM uyuşmazlığı, pg_hba.conf sırası ve yanlış cluster. Adım adım teşhis.
MySQL ERROR 1045 Access denied: root Şifresi Sıfırlama Rehberi
MySQL 1045 hatasının dört nedeni, "using password: YES/NO" ayrımının anlamı ve kilitli kalınca --init-file ile güvenli şifre sıfırlama.