top of page

PostgreSQL’de pg_dump ile Tablo Bazlı Veri Senkronizasyonu (Backup & Restore Rehberi)

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\bin

Bu 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" --version

Eğ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 utf8

Bu 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 utf8

Bu 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

© 2020 by Serif Aydin

  • indir
  • YouTube
  • LinkedIn Sosyal Simge
bottom of page