PostgreSQL "database does not exist" ve "role does not exist" Hataları: Kök Neden, Acil Müdahale ve IaC Çözümü
Typo, büyük/küçük harf tırnak duyarlılığı ("Prod" vs prod) ve restore/migration sonrası eksik rol/veritabanı ayrımı, acil nesne oluşturma ve Terraform / IaC yönetimi.
Operasyonel Doğrulama & Güvenilirlik Standardı
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
Uygulama veya CI/CD deployment pipeline'ı başlarken bağlantı reddedilir ve sunucu loglarında şu hata görünür:
FATAL: database "prod" does not exist
FATAL: role "deploy" does not exist▸Sahada Ne Görürsün?
Kubernetes pod'ları CrashLoopBackOff durumuna düşer. Veritabanı sağlıklıdır ancak istemci yanlış isim veya tırnaklama nedeniyle kümeye kabul edilmez.
▸Kök Neden Matrisi
| Olasılık | Kök Neden | Açıklama |
|---|---|---|
| %50 | Büyük/Küçük Harf ve Tırnaklama | PostgreSQL tırnaksız tanımlayıcıları küçük harfe zorlar (lowercase). "Prod" ile prod farklı nesnelerdir. |
| %30 | Restore / Dump Sonrası Eksik Rol | pg_dump sadece şema ve veriyi alır, küme seviyesindeki rolleri (pg_dumpall --globals-only) taşımaz. |
| %20 | Konfigürasyon / Typo | Ortam değişkenlerinde (DATABASE_URL, POSTGRES_DB) yazım hatası yapılmıştır. |
▸ACİL RUNBOOK (0-5dk)
-- 1. Mevcut veritabanlarını ve sahiplerini listele
\l
-- 2. Mevcut rolleri ve oturum izinlerini listele
\du
-- 3. Acil eksik veritabanını oluştur ve yetkilendir
CREATE DATABASE prod OWNER app_user;
-- 4. Acil eksik rolü oluştur ve şifre ata
CREATE ROLE deploy LOGIN PASSWORD 'GucluGeciciSifre2026!';
GRANT CONNECT ON DATABASE prod TO deploy;▸KALICI BLUEPRINT & IaC
- 1Globals Dump Standardı: Küme rolleri mutlaka düzenli yedeklenmelidir:
pg_dumpall --globals-only -f /backups/globals.sql - 2Terraform / IaC Otomasyonu: Rol ve veritabanı yönetimi kodla tanımlanmalıdır.
- 3Migration Kontrolü: Liquibase/Flyway init aşamasında idempotent
IF NOT EXISTSkontrolleri eklenmelidir.
▸Doğrulama
SELECT datname, pg_catalog.pg_get_userbyid(datdba) AS owner FROM pg_database WHERE datname = 'prod';
SELECT rolname, rolcanlogin FROM pg_roles WHERE rolname = 'deploy';Diğer Veritabanı Hata Teşhisleri
Kriz anında başvurabileceğiniz diğer doğrulanmış hata rehberleri.
PostgreSQL Bağlantı Tükenmesi ve too many clients Teşhisi
FATAL: sorry, too many clients already ve remaining connection slots hatalarının üç temel kök nedeni, yetki sınırlarıyla salt okunur pg_stat_activity teşhisi ve kalıcı iki katmanlı havuzlama çö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.
PostgreSQL connection refused: 8 Adımda Kesin Teşhis
Connection refused, timeout ve "no pg_hba.conf entry" arasındaki fark; listen_addresses, port, firewall ve Docker port yayınlama kontrolleri.