top of page

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

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

2 Yorum


dự đoán xsmb mình thấy trên mấy nhóm hay nhắc nên bữa nay rảnh bấm vào coi thử cho biết. Mình không phải dân soi cầu gì đâu, chủ yếu xem họ trình bày có dễ theo dõi không. Vào cái là thấy bài “Soi cầu MB ngày 16 8 2026” nằm ngay phần đầu nên khỏi phải mò, nhìn phát biết hôm nay họ đang nói ngày nào. Kéo xuống chút thì nội dung chia theo từng khối, tiêu đề rõ ràng nên đọc lướt cũng hiểu đại khái họ thống kê kết quả quay trước rồi lọc ra cặp số gợi ý. Mình thích mấy đoạn nhận định được tách riêng, không dính thành một cục chữ dài.…

Beğen

Mình coi xổ số kiểu cho đỡ chán thôi, chủ yếu giải trí nên không kỳ vọng nhiều chuyện trúng hay không. Trước đây nghe bạn bè hay nói về mấy “cầu” nọ kia, mình cũng tò mò thử tìm hiểu nhưng lúc đầu mù mờ lắm. Theo dõi một thời gian thì thấy đôi khi có vài dạng số lặp lại khiến mình chú ý hơn, nhưng vẫn giữ thái độ thử cho biết. https://soicauxsmb.io/soi-cau-xsmb-168.html Mỗi lần đọc nhận định, mình hay ghi lại vài ý ngắn rồi đợi kết quả để so xem có phải mình tự tưởng tượng quá không. Có hôm trúng chút thì vui, có hôm lệch xa nên mình tự nhắc đừng tin tuyệt…

Beğen

© 2020 by Serif Aydin

  • indir
  • YouTube
  • LinkedIn Sosyal Simge
bottom of page