Có thể so sánh hai cơ sở dữ liệu có cấu trúc giống hệt nhau không? Giả sử tôi có hai cơ sở dữ liệu DB1 và DB2 và tôi muốn kiểm tra xem có sự khác biệt về dữ liệu giữa chúng hay không.
Có thể so sánh hai cơ sở dữ liệu có cấu trúc giống hệt nhau không? Giả sử tôi có hai cơ sở dữ liệu DB1 và DB2 và tôi muốn kiểm tra xem có sự khác biệt về dữ liệu giữa chúng hay không.
Câu trả lời:
(lưu ý rằng hầu hết các công cụ này chỉ có thể so sánh cấu trúc chứ không thể so sánh dữ liệu)
Những người miễn phí:
Thương mại:
apgdiff
nó không hỗ trợ tốt các bảng kế thừa và ngoại lệ ném ngay lập tức khi tôi cố gắng sử dụng nó. WbSchemaDiff
hoạt động rất tốt, bất ngờ!
Hãy thử sử dụng pg_dump
trên cả hai cơ sở dữ liệu và khác biệt các tệp.
pg_dump
tốt cho điều đó. Nếu bạn thấy có sự khác biệt đáng kể, có thể pg_dump
bạn đang cố gắng so sánh những thứ không thể so sánh được. Ít nhất là để so sánh PG dbs.
psql -c '\x' -c 'SELECT... ORDER BY...'
thay vì pg_dump
.
Một ứng dụng miễn phí khác ( chỉ có thể so sánh cấu trúc chứ không thể so sánh dữ liệu ):
DBeaver - bạn có thể chọn cơ sở dữ liệu, bảng, v.v. để so sánh với nhau
Tôi đã đánh giá rất nhiều công cụ và tìm thấy giải pháp sau:
So sánh giản đồ :
Thú vị nhất là Liquibase, Persyas và PgCodeKeeper:
( Vấn đề ) Liquebase cải:
SET DEFAULT nextval('myschema.name_id_seq'::regclass)
thành
BIGSERIAL
Vì vậy, nó đã bị từ chối sử dụng
( Vấn đề ) Persyas làm việc tốt cho đến khi tôi đã thêm một số đồ bổ sung và nó bắt đầu ném sau:
pyrseas_1 | TypeError: 'NoneType' object is not iterable
Vì vậy, tôi đã tìm thấy PgCodeKeeper nó hoạt động hoàn hảo và nó còn sống (bạn có thể kiểm tra các bản phát hành). Tôi sử dụng lệnh sau:
./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
So sánh dữ liệu: Tôi đã thử sử dụng Liquebase và nó không hoạt động, bạn có thể xem các bước tôi đã thử trong câu hỏi chưa được trả lời của tôi về sự khác biệt dữ liệu của hai cơ sở dữ liệu với Liquebase
Vì vậy, tôi đã tìm thấy một dự án khác SQL Workbench / J Nó hoạt động rất tốt và tạo ra sự khác biệt lớn trong sql. Tôi sử dụng lệnh sau:
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 ;'"
Cả hai công cụ đều hỗ trợ lọc đối tượng. Nó thực sự là tiện lợi.
Di cư
Và cuối cùng tôi sử dụng Liquebase chỉ để theo dõi di chuyển / phiên bản.
Tôi đang làm việc trên một công cụ so sánh toàn diện cho Postgres. Nó sẽ miễn phí trong khi ở phiên bản beta.
Ban đầu đây chỉ là so sánh lược đồ (DDL) nhưng chúng tôi có thể sẽ mở rộng sang dữ liệu. Tôi tin rằng đây là một công cụ mà rất nhiều cửa hàng yêu cầu để chuyển từ RDBMS hiện tại của họ mà không cần phải thay đổi cách hoạt động của môi trường phát triển, hoạt động, v.v. của họ.
Công cụ tốt nhất mà tôi từng thấy https://pythonhosted.org/Pyrseas/
Nhận kết xuất từ cơ sở dữ liệu A dbtoyaml ...
Tạo di chuyển từ A => B yamltodb ... [tệp được tạo ở bước 1]
Tôi cũng đang tìm kiếm một công cụ để so sánh dữ liệu trong cơ sở dữ liệu (đặc biệt là tôi quan tâm đến việc so sánh Redshift DB). Cho đến nay, tốt nhất mà tôi tìm thấy là https://www.dbbest.com/products/database-compare-suite/#close . Thật không may, bản dùng thử miễn phí sẽ hết hạn sau một ngày.
Tôi đã tạo một công cụ để so sánh 2 cơ sở dữ liệu PostgreSQL trực tiếp (không phải kết xuất), dữ liệu bảng và chuỗi. Những ngày đầu nhưng đã đạt được những gì mình muốn, có lẽ nó cũng có thể giúp ích cho bạn.
Theo ý kiến của tôi, Dbforge là công cụ mạnh nhất để kết hợp dữ liệu trong postgresql. Đây là sản phẩm của Devart company. Bạn có thể tải xuống tại đây .