Teknik Not
Database 3 dk okuma

PostgreSQL’de CMD ile Backup ve Restore (Windows)

Kurumsal Hayatta Veritabanı Yönetimi Kurumsal hayatta veritabanı “sadece proje dosyası” değildir; çoğu zaman sipariş , ödeme , müşteri kayıtları gibi kritik veriler burada durur. Bu yüzden şirketler “yedek almayı” bir se...

Kurumsal Hayatta Veritabanı Yönetimi

Kurumsal hayatta veritabanı “sadece proje dosyası” değildir; çoğu zaman sipariş, ödeme, müşteri kayıtları gibi kritik veriler burada durur. Bu yüzden şirketler “yedek almayı” bir seçenek değil, bir operasyon standardı olarak görür.

Bu yazıda, Windows ortamında PostgreSQL için en yaygın iki yaklaşımı (komut satırı üzerinden) basit şekilde öğreneceksiniz:

  • Backup (yedek almak): pg_dump
  • Restore (geri yüklemek): .sql ise psql, .backup ise pg_restore

Not: Burada örnek veritabanı adı olarak sample_db kullanıyorum. Siz kendi veritabanı adınızı yazabilirsiniz.

Kurgu: Bir şirkette “neden” bu işler böyle yapılır?

Bir e-ticaret şirketi düşünün: gece boyunca siparişler, ödemeler, iade kayıtları işleniyor. Sabah operasyon ekibi rapor alacak, muhasebe mutabakat yapacak, teknik ekip logları inceleyecek.

Bu dünyada iki temel ihtiyaç vardır:

  1. Her gün düzenli yedek (bir şey ters giderse geri dönmek için)
  2. Test ortamına geri yükleme (güncelleme öncesi denemek için)

Bu yüzden şirketler backup/restore işini genelde CMD ile yönetir. Çünkü komut satırı:

  • Daha stabil çalışır (özellikle büyük veride)
  • Otomasyona uygundur (gece 02:00 yedeği gibi)
  • Sunucu ortamında da aynı şekilde çalışır (GUI’ye bağlı kalmaz)

1) .sql ile yedek/geri yükleme

Kurumsal örnek:
“Geliştirici ekip bir tabloda değişiklik yapacak. Önce hızlı bir yedek alalım; sorun olursa geri döneriz.”

Backup almak (.sql)

"C:\Program Files\PostgreSQL\17\bin\pg_dump.exe" ^
--host "localhost" --port "5432" --username "postgres" ^
--dbname "sample_db" ^
--file "D:\backup\sample_db.sql"

Restore etmek (.sql)

"C:\Program Files\PostgreSQL\17\bin\psql.exe" ^
--host "localhost" --port "5432" --username "postgres" ^
--dbname "sample_db" ^
--file "D:\backup\sample_db.sql"

Kurumsal mantıkla: .sql ne zaman tercih edilir?

  • “Hızlı bir geri dönüş planı” gerekiyorsa
  • Veri küçük/orta ölçekliyse
  • Öğrenme ve temel senaryolarda (staj, ders, lab ortamı) pratikse

2) .backup ile yedek/geri yükleme

Kurumsal örnek:
“Veritabanı 80 GB. Biz bu işi daha kontrollü ve sürdürülebilir yapmalıyız. Yedek formatını daha profesyonel seçelim.”

Backup almak (.backup)

"C:\Program Files\PostgreSQL\17\bin\pg_dump.exe" ^
--host "localhost" --port "5432" --username "postgres" ^
--format=c ^
--file "D:\backup\sample_db.backup" ^
"sample_db"

Restore etmek (.backup)

"C:\Program Files\PostgreSQL\17\bin\pg_restore.exe" ^
--host "localhost" --port "5432" --username "postgres" ^
--dbname "sample_db" ^
"D:\backup\sample_db.backup"

3) “80 GB’lık DB bu yöntemle yedeklenir mi?”

Evet, yedeklenir. Kurumsal pratikte kritik olan şudur:

  • 80 GB gibi bir boyutta .backup formatı daha mantıklı olur.
  • Yedeği mümkünse D: gibi ayrı bir diske alın.
  • SSD kullanımı süreci ciddi oranda hızlandırır.

Sık görülen durum: “Database yok” hatası

Yeni bir sunucuya restore yapacaksanız önce veritabanını oluşturmalısınız:

"C:\Program Files\PostgreSQL\17\bin\createdb.exe" ^
--host "localhost" --port "5432" --username "postgres" ^
"sample_db"

4) Cloud-to-Cloud Veritabanı Taşıma (Azure → Neon, AWS vb.)

Kurumsal projelerde zaman zaman veritabanını bir bulut sağlayıcısından diğerine taşımak gerekir. Örneğin Azure PostgreSQL'den Neon, AWS RDS, DigitalOcean veya farklı bir PostgreSQL sunucusuna geçiş yapılabilir.

En güvenli yöntemlerden biri önce kaynak veritabanının pg_dump ile yedeğini almak, ardından hedef sunucuya psql ile geri yüklemektir.

Senaryo: Azure PostgreSQL üzerinde çalışan üretim veritabanını Neon PostgreSQL'e taşıyoruz.

1. Azure PostgreSQL'den SQL yedeği alma

$env:PGPASSWORD='xxxxxşifre'

& "C:\Program Files\PostgreSQL\17\bin\pg_dump.exe" `
  -h consdb-prod.postgres.database.azure.com `
  -p 5432 `
  -U xxxxuser `
  -d AuthTokenProdDb `
  -f C:\backup\sample_db.sql

Bu komut Azure üzerindeki veritabanının tamamını sample_db.sql dosyasına aktarır.

2. SQL dosyasını hedef Cloud sunucusuna geri yükleme

$env:PGPASSWORD='xxxxşifre'

& "C:\Program Files\PostgreSQL\17\bin\psql.exe" `
  -h ep-yyyy-dawn-xxxxx-pooler.c-8.eu-central-1.aws.neon.tech `
  -p 5432 `
  -U xxxuser `
  -d AuthTokenProdDb `
  -f C:\backup\sample_db.sql

Bu işlem SQL dosyasını hedef PostgreSQL sunucusuna yükler. Aynı yöntem Neon, AWS RDS, Google Cloud SQL, DigitalOcean ve PostgreSQL destekleyen diğer tüm servislerde kullanılabilir.

Kurumsal Hayatta Kullanım Senaryoları

  • Azure PostgreSQL → AWS RDS taşıma
  • Azure PostgreSQL → Neon Database taşıma
  • Production → Test ortamı kopyalama
  • Production → Development ortamı oluşturma
  • Sunucu değiştirme (Migration)
  • Cloud sağlayıcısı değiştirme

İpucu: Büyük veritabanlarında (20 GB+) pg_dump -Fc ile Custom Backup (.backup) formatını kullanıp hedefte pg_restore ile geri yüklemek daha hızlı ve daha esnektir.