Aynı yapıya sahip iki veritabanını karşılaştırmak mümkün müdür? Diyelim ki DB1 ve DB2 iki veritabanım var ve aralarında veri farkı olup olmadığını kontrol etmek istiyorum.
Aynı yapıya sahip iki veritabanını karşılaştırmak mümkün müdür? Diyelim ki DB1 ve DB2 iki veritabanım var ve aralarında veri farkı olup olmadığını kontrol etmek istiyorum.
Yanıtlar:
(bu araçların çoğunun yalnızca yapıyı karşılaştırabileceğini, verileri karşılaştıramayacağını unutmayın)
Ücretsiz Olanlar:
Ticari:
apgdiff
tabloları iyi desteklemiyor ve kullanmaya çalıştığımda istisna hemen atılıyor. WbSchemaDiff
çok iyi çalışıyor, sürpriz!
pg_dump
Her iki veritabanında kullanmayı ve dosyaları farklılaştırmayı deneyin .
pg_dump
bunun için sorun değil. Arada önemli farklar pg_dump
görüyorsanız, muhtemelen karşılaştırılamayacak şeyleri karşılaştırmaya çalışıyorsunuzdur. En azından PG dbs'yi karşılaştırmak için.
psql -c '\x' -c 'SELECT... ORDER BY...'
yerine kullanmama rağmen pg_dump
.
Başka bir ücretsiz uygulama ( yalnızca yapıyı karşılaştırabilen ancak verileri karşılaştırmayan ):
DBeaver - birbirleriyle karşılaştırmak için veritabanları, tablolar vb. Seçebilirsiniz
Birçok aracı değerlendirdim ve aşağıdaki çözümü buldum:
Şema karşılaştırması :
En ilginç olanlar Liquibase, Persyas ve PgCodeKeeper idi:
( sorun ) Liquebase şunları dönüştürür:
SET DEFAULT nextval('myschema.name_id_seq'::regclass)
içine
BIGSERIAL
Bu yüzden kullanımı reddedildi
( sorun ) Persyas, ek şema ekleyene kadar iyi çalıştı ve aşağıdakileri atmaya başladı:
pyrseas_1 | TypeError: 'NoneType' object is not iterable
Böylece PgCodeKeeper'ın mükemmel çalıştığını ve canlı olduğunu buldum (sürümleri kontrol edebilirsiniz). Aşağıdaki komutu kullanıyorum:
./pgcodekeeper-cli.sh -E -I ./ignore.txt \
-s "jdbc:postgresql://localhost/postgres?user=postgres&password=123" \
-t "jdbc:postgresql://localhost/postgres?user=postgres&password=123" \
-o /result/schema-diff-$(date +'%m%d%y_%H%M%S').sql
Veri karşılaştırması: Liquebase'i kullanmayı denedim ve işe yaramıyor Liquebase ile iki veritabanının veri farkı hakkındaki cevapsız sorumda denediğim adımları görebilirsiniz.
Bu yüzden başka bir proje buldum SQL Workbench / J Gerçekten güzel çalışıyor ve sql'de gerçek fark oluşturuyor. Aşağıdaki komutu kullanıyorum:
java -jar /sqlworkbench.jar -command="'WbDataDiff -excludeTables=$EXCLUDE_TABLES \
-referenceConnection=$REFERENCE_CONNECTION \
-targetConnection=$TARGET_CONNECTION -referenceSchema=$1 \
-targetSchema=$1 -file=$DIFF_RESULT_FILE -singleFile=true \
-includeDelete=true -ignoreMissingTarget=true ;'"
Her iki araç da nesne filtrelemesini destekler. Gerçekten uygun.
Göçler
Ve son olarak Liquebase'i yalnızca geçiş / sürüm takibi için kullanıyorum.
Postgres için kapsamlı bir karşılaştırma aracı üzerinde çalışıyorum. Beta sürümündeyken ücretsiz olacak.
Başlangıçta bu sadece şema (DDL) karşılaştırmasıdır, ancak muhtemelen verilere de genişleyeceğiz. Bunun, birçok mağazanın, geliştirme ortamlarının, işlemlerinin vb.
Şimdiye kadar gördüğüm en iyi araç https://pythonhosted.org/Pyrseas/
A dbtoyaml veritabanından dökümü alın ...
A => B yamltodb ... [1. adımda oluşturulan dosya] 'dan taşıma oluşturun
Ayrıca veritabanlarındaki verileri karşılaştırmak için bir araç arıyorum (özellikle Redshift DB'yi karşılaştırmakla ilgileniyordum). Şimdiye kadar bulduğum en iyi şey https://www.dbbest.com/products/database-compare-suite/#close . Maalesef ücretsiz deneme bir gün sonra sona eriyor.
2 canlı PostgreSQL veritabanını (dökümleri değil), tablo verilerini ve dizileri karşılaştırmak için bir araç yarattım. Oldukça erken günler ama yapmasını istediğim şeyi başardım, belki size de yardımcı olabilir.
Bence Dbforge postgresql'de verileri karşılaştırmak için en güçlü araçtır. Devart firmasının bir ürünüdür. Buradan indirebilirsiniz .