เป็นไปได้หรือไม่ที่จะเปรียบเทียบฐานข้อมูลสองฐานข้อมูลที่มีโครงสร้างเหมือนกัน สมมติว่าฉันมีสองฐานข้อมูล DB1 และ DB2 และฉันต้องการตรวจสอบว่ามีความแตกต่างในข้อมูลหรือไม่
เป็นไปได้หรือไม่ที่จะเปรียบเทียบฐานข้อมูลสองฐานข้อมูลที่มีโครงสร้างเหมือนกัน สมมติว่าฉันมีสองฐานข้อมูล DB1 และ DB2 และฉันต้องการตรวจสอบว่ามีความแตกต่างในข้อมูลหรือไม่
คำตอบ:
(โปรดทราบว่าเครื่องมือเหล่านี้ส่วนใหญ่สามารถเปรียบเทียบโครงสร้างเท่านั้น แต่ไม่สามารถเปรียบเทียบข้อมูลได้)
คนฟรี:
เชิงพาณิชย์:
apgdiff
จะไม่รองรับการสืบทอดตารางได้ดีและข้อยกเว้นจะเกิดขึ้นทันทีเมื่อฉันพยายามใช้ WbSchemaDiff
ทำงานได้ดีมากเซอร์ไพรส์!
ลองใช้pg_dump
กับทั้งฐานข้อมูลและแยกไฟล์
pg_dump
เหมาะสมสำหรับสิ่งนั้น หากคุณเห็นความแตกต่างอย่างมีนัยสำคัญpg_dump
คุณอาจกำลังพยายามเปรียบเทียบสิ่งที่ไม่สามารถเทียบเคียงได้ อย่างน้อยสำหรับการเปรียบเทียบ PG dbs
psql -c '\x' -c 'SELECT... ORDER BY...'
แทนpg_dump
.
แอปฟรีอีกตัว (ที่สามารถเปรียบเทียบโครงสร้างเท่านั้น แต่ไม่สามารถเปรียบเทียบข้อมูลได้ ):
DBeaver - คุณสามารถเลือกฐานข้อมูลตารางและอื่น ๆ เพื่อเปรียบเทียบกันได้
ฉันได้ประเมินเครื่องมือมากมายและพบวิธีแก้ไขปัญหาต่อไปนี้:
การเปรียบเทียบสคีมา :
สิ่งที่น่าสนใจที่สุด ได้แก่ Liquibase, Persyas และ PgCodeKeeper:
( ปัญหา ) Liquebase แปลง:
SET DEFAULT nextval('myschema.name_id_seq'::regclass)
เป็น
BIGSERIAL
ดังนั้นจึงถูกปฏิเสธที่จะใช้
( ปัญหา ) Persyas ทำงานได้ดีจนกระทั่งฉันได้เพิ่มสคีมาเพิ่มเติมและเริ่มทิ้งสิ่งต่อไปนี้:
pyrseas_1 | TypeError: 'NoneType' object is not iterable
ดังนั้นฉันจึงพบว่าPgCodeKeeperทำงานได้อย่างสมบูรณ์และยังมีชีวิตอยู่ (คุณสามารถตรวจสอบรุ่นต่างๆได้) ฉันใช้คำสั่งต่อไปนี้:
./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
การเปรียบเทียบข้อมูล: ฉันได้ลองใช้ Liquebase แล้ว แต่ก็ไม่ได้ผลคุณสามารถดูขั้นตอนที่ฉันได้ลองในคำถามที่ยังไม่มีคำตอบของฉันเกี่ยวกับความแตกต่างของข้อมูลของสองฐานข้อมูลกับ Liquebase
ดังนั้นฉันได้พบโครงการอื่นSQL Workbench / J มันใช้งานได้ดีจริงๆและสร้างความแตกต่างใน sql ฉันใช้คำสั่งต่อไปนี้:
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 ;'"
เครื่องมือทั้งสองสนับสนุนการกรองวัตถุ มันสะดวกมาก
การโยกย้าย
และในที่สุดฉันก็ใช้ Liquebase สำหรับการย้ายข้อมูล / การติดตามเวอร์ชัน
ฉันกำลังทำงานกับเครื่องมือเปรียบเทียบที่ครอบคลุมสำหรับ Postgres จะใช้งานได้ฟรีในช่วงเบต้า
ในขั้นต้นนี่เป็นเพียงการเปรียบเทียบสคีมา (DDL) แต่เราอาจจะขยายไปยังข้อมูลด้วย ฉันเชื่อว่านี่เป็นเครื่องมือที่ร้านค้าจำนวนมากต้องการเพื่อที่จะย้ายจาก RDBMS ปัจจุบันโดยไม่ต้องเปลี่ยนสภาพแวดล้อมการพัฒนาการดำเนินงานและอื่น ๆ ด้วย
เครื่องมือที่ดีที่สุดที่ฉันเคยเห็น https://pythonhosted.org/Pyrseas/
รับดัมพ์จากฐานข้อมูล A dbtoyaml ...
สร้างการย้ายข้อมูลจาก A => B yamltodb ... [ไฟล์ที่สร้างในขั้นตอนที่ 1]
ฉันสร้างเครื่องมือเพื่อเปรียบเทียบฐานข้อมูล PostgreSQL แบบสด 2 ฐานข้อมูล (ไม่ใช่การถ่ายโอนข้อมูล) ข้อมูลตารางและลำดับ ช่วงแรก ๆ ที่ผ่านมา แต่ทำได้ในสิ่งที่อยากทำบางทีมันอาจช่วยคุณได้