PostgreSQL’de pg_dump ile Tablo Bazlı Veri Senkronizasyonu (Backup & Restore Rehberi)
- Şerif Aydın
- 2 saat önce
- 2 dakikada okunur
PostgreSQL projelerinde en sık karşılaşılan ihtiyaçlardan biri, farklı ortamlardaki (örneğin test ve prod) veritabanları arasında belirli tabloların veri senkronizasyonudur. Bu yazıda, pg_dump ve psql kullanarak iki farklı veritabanı arasında tablo bazlı veri taşıma ve eşleştirme sürecini adım adım ele alacağız.
Amacımız; aynı şemaya sahip tabloların verilerini güvenli bir şekilde dışa aktarmak (backup) ve başka bir veritabanına hatasız şekilde geri yüklemek (restore) olacaktır.
1. PostgreSQL pg_dump Kurulumu
İlk adım olarak PostgreSQL araçlarının sistemimize kurulması gerekiyor.
Aşağıdaki link üzerinden PostgreSQL kurulum paketini indiriyoruz:
Kurulum sırasında:
Windows x86-64 versiyonu seçilir veya hangi platform ise.
Kurulum tamamlandıktan sonra şu dizinde araçların oluştuğunu doğrularız:
C:\Program Files\PostgreSQL\16\binBu dizin içerisinde:
pg_dump.exe
psql.exe
gibi gerekli araçlar yer almalıdır.
2. pg_dump Çalıştığını Doğrulama
PowerShell açarak aşağıdaki komutu çalıştırıyoruz:
& "C:\Program Files\PostgreSQL\16\bin\pg_dump.exe" --versionEğer doğru kurulum yapıldıysa, pg_dump versiyonu ekrana basılır. Bu adım ile kurulumun başarılı olduğunu doğrulamış oluruz.
3. Export (Backup) Script Hazırlığı
PostgreSQL’de özellikle schema isimlerinde case-sensitive (büyük/küçük harf duyarlılığı) olduğu için, PowerShell üzerinden güvenli bir export dosyası oluşturuyoruz.
Öncelikle masaüstüne bir dump.sql dosyası oluşturuyoruz:
@"\COPY "schema"."table" TO 'C:\Users\Public\loc_1.csv' CSV HEADER;\COPY "schema"."table" TO 'C:\Users\Public\loc_2.csv' CSV HEADER;\COPY "schema"."table" TO 'C:\Users\Public\loc_3.csv' CSV HEADER;"@ | Out-File -FilePath "$env:USERPROFILE\Desktop\dump.sql" -Encoding utf8Bu script, belirtilen tabloların verilerini CSV formatında dışarı aktarır.
4. Backup İşleminin Çalıştırılması
Şimdi oluşturduğumuz dump.sql dosyasını çalıştırarak verileri dışarı alıyoruz:
$env:PGPASSWORD="YOUR_PASSWORD"; & "C:\Program Files\PostgreSQL\16\bin\psql.exe" ` -h test-db` -U postgres ` -d dbName` -f "$env:USERPROFILE\Desktop\dump.sql"Bu işlem sonucunda:
Tablolardaki veriler CSV dosyalarına aktarılır
Backup süreci tamamlanmış olur
5. Restore Script Hazırlığı
Restore işlemi sırasında en kritik konu duplicate data (tekrar eden veri) problemidir.
Bunu önlemek için staging (geçici) tablolar kullanıyoruz.
@"
-- Staging tablolar
CREATE TABLE IF NOT EXISTS "SampleSchema"."tmp_table1" (LIKE "SampleSchema"."Table1" INCLUDING ALL);
CREATE TABLE IF NOT EXISTS "SampleSchema"."tmp_table2" (LIKE "SampleSchema"."Table2" INCLUDING ALL);
CREATE TABLE IF NOT EXISTS "SampleSchema"."tmp_table3" (LIKE "SampleSchema"."Table3" INCLUDING ALL);
-- CSV yükle
\COPY "SampleSchema"."tmp_table1" FROM 'C:\Users\Public\table1.csv' CSV HEADER;
\COPY "SampleSchema"."tmp_table2" FROM 'C:\Users\Public\table2.csv' CSV HEADER;
\COPY "SampleSchema"."tmp_table3" FROM 'C:\Users\Public\table3.csv' CSV HEADER;
-- Insert işlemleri (duplicate önleme)
INSERT INTO "SampleSchema"."Table1"
SELECT * FROM "SampleSchema"."tmp_table1"
ON CONFLICT DO NOTHING;
INSERT INTO "SampleSchema"."Table2"
SELECT * FROM "SampleSchema"."tmp_table2"
ON CONFLICT DO NOTHING;
INSERT INTO "SampleSchema"."Table3"
SELECT * FROM "SampleSchema"."tmp_table3"
ON CONFLICT DO NOTHING;
-- Temizlik
DROP TABLE "SampleSchema"."tmp_table1";
DROP TABLE "SampleSchema"."tmp_table2";
DROP TABLE "SampleSchema"."tmp_table3";
"@ | Out-File -FilePath "$env:USERPROFILE\Desktop\restore.sql" -Encoding utf8Bu yapı sayesinde:
Aynı kayıtlar tekrar eklenmez
Sadece farklı/veri eksik olan kayıtlar insert edilir
FK bağımlılıkları güvenli şekilde korunur.
6. Restore İşleminin Çalıştırılması
Son adım olarak restore scriptini çalıştırıyoruz:
$env:PGPASSWORD="YOUR_PASSWORD"; & "C:\Program Files\PostgreSQL\16\bin\psql.exe" ` -h host ` -U postgres ` -p port ` -d dbName` -f "$env:USERPROFILE\Desktop\restore.sql"Bu işlem sonrası:
CSV dosyalarındaki veriler staging tablolara yüklenir
Daha sonra ana tablolara kontrollü şekilde aktarılır
Veri senkronizasyonu tamamlanır
Sonuç
Bu yöntem ile PostgreSQL üzerinden, aşağıdaki yapıları başarıyla gerçekleştirilmiş olursunuz.
Tablo bazlı veri export/import
Cross-database senkronizasyon
Duplicate veri kontrolü
PowerShell tabanlı otomasyon
Mikro servis migration süreçleri
Lokalizasyon / master data senkronizasyonu