Apakah mungkin untuk membandingkan dua database dengan struktur yang identik? Katakanlah saya memiliki dua database DB1 dan DB2 dan saya ingin memeriksa apakah ada perbedaan data di antara keduanya.
Apakah mungkin untuk membandingkan dua database dengan struktur yang identik? Katakanlah saya memiliki dua database DB1 dan DB2 dan saya ingin memeriksa apakah ada perbedaan data di antara keduanya.
Jawaban:
(perhatikan bahwa sebagian besar alat ini hanya dapat membandingkan struktur, tetapi tidak datanya)
Yang Gratis:
Komersial:
apgdiff
tidak mendukung tabel warisan dengan baik, dan pengecualian segera muncul ketika saya mencoba menggunakannya. WbSchemaDiff
bekerja dengan sangat baik, kejutan!
Coba gunakan pg_dump
pada kedua database dan lakukan diff file.
pg_dump
tidak masalah untuk itu. Jika Anda melihat perbedaan yang signifikan dengan pg_dump
Anda mungkin mencoba membandingkan hal-hal yang tidak dapat dibandingkan. Setidaknya untuk membandingkan PG dbs.
psql -c '\x' -c 'SELECT... ORDER BY...'
bukan pg_dump
.
Aplikasi gratis lainnya (yang hanya dapat membandingkan struktur, tetapi tidak datanya ):
DBeaver - Anda dapat memilih database, tabel, dll untuk dibandingkan satu sama lain
Saya telah mengevaluasi banyak alat dan menemukan solusi berikut:
Perbandingan skema :
Yang paling menarik adalah Liquibase, Persyas dan PgCodeKeeper:
( masalah ) Liquebase mengonversi:
SET DEFAULT nextval('myschema.name_id_seq'::regclass)
ke
BIGSERIAL
Jadi ditolak untuk digunakan
( Masalah ) Persya berfungsi dengan baik sampai saya menambahkan beberapa skema tambahan dan itu mulai melempar:
pyrseas_1 | TypeError: 'NoneType' object is not iterable
Jadi saya telah menemukan PgCodeKeeper berfungsi dengan sempurna dan aktif (Anda dapat memeriksa rilis). Saya menggunakan perintah berikut:
./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
Perbandingan data: Saya telah mencoba menggunakan Liquebase dan tidak berhasil, Anda dapat melihat langkah-langkah yang saya coba dalam pertanyaan saya yang belum terjawab tentang perbedaan data dari dua database dengan Liquebase
Jadi saya telah menemukan proyek lain SQL Workbench / J. Ini bekerja sangat bagus dan menghasilkan perbedaan nyata di sql. Saya menggunakan perintah berikut:
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 ;'"
Kedua alat mendukung filtrasi objek. Ini sangat nyaman.
Migrasi
Dan akhirnya saya menggunakan Liquebase hanya untuk migrasi / pelacakan versi.
Saya sedang mengerjakan alat perbandingan komprehensif untuk Postgres. Ini akan gratis saat dalam versi beta.
Awalnya ini hanya perbandingan skema (DDL) tetapi kami mungkin akan memperluas ke data juga. Saya percaya ini adalah alat yang dibutuhkan banyak toko untuk berpindah dari RDBMS mereka saat ini tanpa harus juga mengubah cara kerja lingkungan pengembangan, operasi, dll.
Alat terbaik yang pernah saya lihat https://pythonhosted.org/Pyrseas/
Dapatkan dump dari database A dbtoyaml ...
Hasilkan migrasi dari A => B yamltodb ... [file dibuat pada langkah 1]
Saya juga mencari alat untuk membandingkan data dalam database (khususnya saya tertarik untuk membandingkan Redshift DB). Sejauh ini yang terbaik yang saya temukan adalah https://www.dbbest.com/products/database-compare-suite/#close . Sayangnya uji coba gratis berakhir setelah satu hari.
Saya membuat alat untuk membandingkan 2 database PostgreSQL langsung (bukan dump), data tabel, dan urutan. Hari-hari yang cukup awal tetapi mencapai apa yang saya inginkan, mungkin itu dapat membantu Anda juga.
Menurut pendapat saya Dbforge adalah alat yang paling kuat untuk membandingkan data di postgresql. Ini adalah produk dari perusahaan Devart. Anda dapat mengunduh di sini .