PostgreSQL Veritabanı Yedeği Nasıl Alınır? pg_dump ile Backup Alma

sadıkkayahan · 28 Eylül 2026 · 1 görüntülenme · 0 cevap

PostgreSQL veritabanının yedeğini almak için en yaygın yöntemlerden biri pg_dump aracını kullanmaktır. pg_dump, seçtiğiniz tek bir PostgreSQL veritabanının yapısını ve verilerini yedekleyebilir. Özellikle web sitesi veya production sunucusunda önemli değişiklikler yapmadan önce güncel veritabanı yedeği almak veri kaybına karşı önemli bir önlemdir.


Basit bir PostgreSQL yedeği şu şekilde alınabilir:

pg_dump -U kullanici_adi veritabani_adi > backup.sql

Ancak production ortamında yedek almadan önce veritabanı bilgilerini, PostgreSQL sürümünü ve yedeğin nereye kaydedileceğini kontrol etmek gerekir.

1. PostgreSQL bağlantısını kontrol edin

Öncelikle PostgreSQL araçlarının sistemde kullanılabilir olduğunu kontrol edebilirsiniz:

psql --version

ve:

pg_dump --version

Komutlar bulunamıyorsa PostgreSQL istemci araçlarının sistemde kurulu veya PATH içerisinde olup olmadığını kontrol edin.

2. SQL formatında PostgreSQL yedeği alma

Basit kullanım:

pg_dump -U postgres veritabani_adi > backup.sql

Burada:

- postgres kullanıcı adıdır.
- veritabani_adi yedeklenecek veritabanıdır.
- backup.sql oluşturulacak yedek dosyasıdır.

Gerekirse host belirtilebilir:

pg_dump -h localhost -U postgres veritabani_adi > backup.sql

Farklı port kullanılıyorsa:

pg_dump -h localhost -p 5432 -U postgres veritabani_adi > backup.sql

5432, PostgreSQL'in yaygın varsayılan portudur; kendi sisteminizde farklı olabilir.

3. Custom format ile yedek alma

PostgreSQL ayrıca custom formatta yedek oluşturmayı destekler.

Örneğin:

pg_dump -U postgres -Fc veritabani_adi -f backup.dump

Buradaki:

-Fc

custom format anlamına gelir.

Bu format özellikle pg_restore ile geri yükleme sırasında daha fazla esneklik sağlayabilir.

SQL dosyası ile custom dump dosyası aynı format değildir. Geri yükleme sırasında buna uygun araç kullanılmalıdır.

4. Sadece belirli bir veritabanını yedeklediğinizi unutmayın

pg_dump, belirttiğiniz tek bir veritabanını yedekler.

PostgreSQL sunucusundaki tüm veritabanlarını veya cluster genelindeki bazı global nesneleri yedeklemek farklı işlemler gerektirebilir.

Bu nedenle yedeğin kapsamını önceden belirleyin.

5. Yedeği tarihli dosya adıyla saklamak

Düzenli yedek alıyorsanız her seferinde aynı dosyanın üzerine yazmak yerine tarih içeren dosya isimleri kullanmak faydalıdır.

Örneğin Linux ortamında:

pg_dump -U postgres -Fc veritabani_adi -f backup-$(date +%Y-%m-%d).dump

Bu şekilde farklı tarihlerde alınan yedekleri ayırmak daha kolay olur.

Aynı gün içerisinde birden fazla yedek alıyorsanız dosya adına saat bilgisini de ekleyebilirsiniz.

6. Yedek dosyasının oluştuğunu kontrol edin

Komutun hata vermemesi tek başına yeterli bir doğrulama değildir.

Yedek sonrasında dosyanın gerçekten oluştuğunu kontrol edin.

Linux'ta örneğin:

ls -lh backup.dump

kullanılabilir.

Dosyanın beklenmedik şekilde 0 bayt olması veya çok küçük görünmesi bir problem olabileceğine işaret edebilir.

Ancak dosya boyutunun tek başına yedeğin sağlam olduğunu garanti etmediğini unutmayın.

7. Yedeğin gerçekten kullanılabilir olduğunu doğrulayın

Yedekleme sistemlerinde en önemli konulardan biri yalnızca backup oluşturmak değil, gerektiğinde geri yüklenebildiğini doğrulamaktır.

Custom formatta alınmış bir yedeğin içeriği örneğin:

pg_restore -l backup.dump

ile listelenebilir.

Daha güçlü doğrulama için mümkünse yedeği ayrı bir test veritabanına geri yükleyerek uygulamanın ihtiyaç duyduğu tabloların ve verilerin geldiğini kontrol edin.

8. Production veritabanında yedek alırken dikkat edilmesi gerekenler

Canlı sistemlerde yedekleme işlemi sunucunun kaynaklarını kullanır.

Büyük veritabanlarında:

- Disk alanı
- Disk I/O
- CPU
- Yedekleme süresi
- Ağ kullanımı

gibi faktörler dikkate alınmalıdır.

Özellikle disk alanı az olan VPS'lerde büyük bir dump dosyası oluşturmak sunucunun diskini doldurabilir.

Yedek almadan önce:

df -h

gibi araçlarla boş disk alanını kontrol etmek faydalı olabilir.

9. Yedek dosyasını aynı sunucuda bırakmak yeterli mi?

Tek kopyayı veritabanıyla aynı VPS üzerinde tutmak gerçek bir felaket senaryosuna karşı yeterli olmayabilir.

Sunucunun diski bozulursa, VPS silinirse veya ciddi bir güvenlik problemi yaşanırsa hem veritabanı hem de yedek aynı anda kaybedilebilir.

Önemli projelerde yedeğin ek bir kopyasını farklı ve güvenli bir konumda saklamak daha iyi bir yaklaşımdır.

10. Yedek dosyaları hassas bilgi içerebilir

PostgreSQL dump dosyası kullanıcı bilgileri, e-posta adresleri, uygulama verileri veya başka hassas kayıtlar içerebilir.

Bu nedenle yedek dosyalarını:

- Herkese açık web klasörlerinde
- Public GitHub repository'lerinde
- Yetkisiz kullanıcıların erişebildiği dizinlerde

saklamayın.

Yedeklerin erişim izinlerini ve saklandığı ortamın güvenliğini kontrol edin.

11. Parolayı komuta açık şekilde yazmak güvenli olmayabilir

Otomatik yedekleme oluştururken veritabanı parolasını doğrudan komut satırına veya herkesin okuyabildiği script dosyasına yazmak güvenlik riski oluşturabilir.

PostgreSQL'in desteklediği uygun kimlik doğrulama ve parola yönetimi yöntemlerini kullanın.

Özellikle production sunucularında script dosyalarının izinlerini kontrol edin.

12. Docker içerisindeki PostgreSQL nasıl yedeklenir?

PostgreSQL Docker container içerisinde çalışıyorsa pg_dump işleminin nerede çalıştırılacağı ve veritabanına nasıl bağlanılacağı kullanılan Docker yapılandırmasına bağlıdır.

Önemli nokta, dump dosyasının oluşturulduğu konumu bilmek ve yedeğin container silindiğinde kaybolmayacağı bir yerde tutulmasını sağlamaktır.

Container içerisinde oluşturulan ve dışarı aktarılmayan bir yedeğe güvenmek doğru değildir.

13. Prisma kullanıyorsanız veritabanı yedeğinin yerini tutmaz

Prisma schema veya migration dosyalarının Git repository'sinde bulunması veritabanındaki gerçek kayıtların yedeği olduğu anlamına gelmez.

Migration dosyaları veritabanı yapısını yeniden oluşturmanıza yardımcı olabilir ancak kullanıcılar, konular, mesajlar veya diğer gerçek veriler için ayrıca PostgreSQL yedeği gerekir.

Bu nedenle önemli migration veya schema değişikliklerinden önce veritabanı dump'ı almak iyi bir uygulamadır.

14. Otomatik PostgreSQL yedekleme

Production projelerinde manuel yedek almak yerine belirli aralıklarla otomatik yedekleme yapılabilir.

Ancak otomatik sistem kurulurken yalnızca pg_dump çalıştırmak yeterli değildir.

Şunlar da planlanmalıdır:

- Yedekleme sıklığı
- Yedek saklama süresi
- Eski yedeklerin temizlenmesi
- Disk kapasitesi
- Başarısız yedeklerin tespit edilmesi
- Yedeklerin farklı konuma aktarılması
- Geri yükleme testleri

Kontrolsüz otomatik yedekleme zamanla diskin tamamen dolmasına neden olabilir.

15. SQL mi custom format mı kullanılmalı?

İki formatın da kullanım alanı vardır.

SQL format:

pg_dump -U postgres veritabani_adi > backup.sql

İnsan tarafından okunabilir SQL komutları içeren bir çıktı sağlar ve genellikle psql ile geri yüklenir.

Custom format:

pg_dump -U postgres -Fc veritabani_adi -f backup.dump

pg_restore ile kullanılmak üzere tasarlanmıştır ve geri yükleme işlemlerinde daha fazla seçenek sunar.

İhtiyacınıza göre uygun formatı seçebilirsiniz.

Hızlı yedekleme kontrol listesi

Önemli bir PostgreSQL veritabanını yedeklerken:

1. Doğru veritabanını seçtiğinizden emin olun.
2. pg_dump sürümünü kontrol edin.
3. Sunucuda yeterli disk alanı bulunduğunu doğrulayın.
4. Yedeği uygun formatta oluşturun.
5. Dosyanın gerçekten oluştuğunu kontrol edin.
6. Yedeğin okunabildiğini ve mümkünse geri yüklenebildiğini test edin.
7. Ek bir kopyayı farklı güvenli bir konumda saklayın.
8. Eski yedekler için saklama ve temizleme politikası oluşturun.

Özetle PostgreSQL veritabanı yedeği almak için pg_dump, en temel ve kullanışlı araçlardan biridir. Ancak gerçek bir yedekleme stratejisinde yalnızca .sql veya .dump dosyasının oluşması yeterli değildir; yedek dosyasının güvenli şekilde saklanması ve gerektiğinde başarıyla geri yüklenebildiğinin doğrulanması da gerekir.