จะเปรียบเทียบข้อมูลระหว่างสองฐานข้อมูลใน PostgreSQL ได้อย่างไร?


93

เป็นไปได้หรือไม่ที่จะเปรียบเทียบฐานข้อมูลสองฐานข้อมูลที่มีโครงสร้างเหมือนกัน สมมติว่าฉันมีสองฐานข้อมูล DB1 และ DB2 และฉันต้องการตรวจสอบว่ามีความแตกต่างในข้อมูลหรือไม่



dbForge Data Compare สำหรับ PostgreSQLช่วยแก้ปัญหาดังกล่าว
Devart

postgrescompare.com/downloadsเปรียบเทียบข้อมูลด้วยเช่นกัน
Neil Anderson

คำตอบ:


85

มีเครื่องมือมากมายอยู่ที่นั่น:

(โปรดทราบว่าเครื่องมือเหล่านี้ส่วนใหญ่สามารถเปรียบเทียบโครงสร้างเท่านั้น แต่ไม่สามารถเปรียบเทียบข้อมูลได้)

คนฟรี:

เชิงพาณิชย์:


17
มีเพียง libibase.org และ Aqua Data Studio เท่านั้นที่เปรียบเทียบข้อมูลและอื่น ๆ ก็เปรียบเทียบสคีมา
Amir Ali Akbari

@AmirAliAkbari Liquibase ไม่สนับสนุน diffs สคี
a_horse_with_no_name

2
ดูเหมือนว่าapgdiffจะไม่รองรับการสืบทอดตารางได้ดีและข้อยกเว้นจะเกิดขึ้นทันทีเมื่อฉันพยายามใช้ WbSchemaDiffทำงานได้ดีมากเซอร์ไพรส์!
smartwjw

1
@AmirAliAkbari libase ดูเหมือนจะไม่เปรียบเทียบข้อมูลเมื่อตารางมีอยู่และมีโครงสร้างเหมือนกัน
aditsu เลิกเพราะ SE คือ EVIL

14
-1. OP กำลังถามเกี่ยวกับการเปรียบเทียบข้อมูล (ระเบียน / แถว) และคุณได้แสดงรายการเครื่องมือที่เปรียบเทียบโครงสร้างเป็นส่วนใหญ่ซึ่ง OP ระบุไว้อย่างชัดเจนว่าเหมือนกันระหว่างฐานข้อมูลเป้าหมายจึงไม่มีเหตุผลที่จะเปรียบเทียบ โปรดชี้แจงว่าคนใดทำสิ่งที่ร้องขอจริง
ไม่ค่อย 'Where's Monica' Needy

39

ลองใช้pg_dumpกับทั้งฐานข้อมูลและแยกไฟล์


23
+1 เพื่อความง่ายและตรงประเด็น แต่เรารู้หรือไม่ว่า pg_dump จะถ่ายโอนข้อมูลจากฐานข้อมูลที่เหมือนกันในลำดับเดียวกันหากกล่าวว่าตารางถูกสร้างขึ้นในลำดับที่ต่างกัน (ฉันหวังว่าคำสั่งซื้อจะขึ้นอยู่กับการพึ่งพาข้อ จำกัด ไม่สนใจเวลาสร้าง แต่ความหวังก็ไม่ได้ปรับขนาดได้ดี)
Mike Sherrill 'Cat Recall'

10
คุณสามารถใช้ -a -d และ | เรียงลำดับ แต่ข้อมูลนี้อาจไม่สามารถนำเข้าได้อย่างไรก็ตามมันก็โอเคสำหรับการตรวจสอบขั้นพื้นฐาน
Cem Güler

สิ่งนี้ควรจะสูงขึ้นในผลลัพธ์พูดตามตรง เราไม่ควรพึ่งพาความแตกต่างในการบันทึกวันดังนั้นโซลูชันที่ใช้จาวาที่เต็มไปด้วยหนักและหนักหน่วงเหล่านี้จึงดูเหมือนเกินความจำเป็น อย่างไรก็ตามควรตรวจสอบการย้ายถิ่นของคุณอย่างมีสติและpg_dumpเหมาะสมสำหรับสิ่งนั้น หากคุณเห็นความแตกต่างอย่างมีนัยสำคัญpg_dumpคุณอาจกำลังพยายามเปรียบเทียบสิ่งที่ไม่สามารถเทียบเคียงได้ อย่างน้อยสำหรับการเปรียบเทียบ PG dbs
SAS

1
น่าเสียดายที่สิ่งนี้ใช้ได้กับฐานข้อมูลขนาดเล็กเท่านั้นเนื่องจาก diff ไม่สามารถจัดการกับขยะขนาดใหญ่ที่ฉันมีได้ มิฉะนั้นจะเป็นวิธีแก้ปัญหาเดียวที่ใช้งานได้จริง ๆ ที่ฉันพบ แม้ว่าฉันจะใช้psql -c '\x' -c 'SELECT... ORDER BY...'แทนpg_dump.
nyov

11

แอปฟรีอีกตัว (ที่สามารถเปรียบเทียบโครงสร้างเท่านั้น แต่ไม่สามารถเปรียบเทียบข้อมูลได้ ):

DBeaver - คุณสามารถเลือกฐานข้อมูลตารางและอื่น ๆ เพื่อเปรียบเทียบกันได้


1
คุณช่วยอธิบายวิธีเปรียบเทียบข้อมูลจาก 2 ฐานข้อมูลกับ DBeaver ให้ดีขึ้นได้ไหม
nicola

1
เท่าที่ฉันรู้ DBeaver อนุญาตเฉพาะการเปรียบเทียบข้อมูลเมตาเท่านั้นไม่ใช่การเปรียบเทียบข้อมูล
nicola

เครื่องมือที่ดีมาก จริงอยู่ที่วิธีการทำในตอนแรกไม่ง่ายนัก ก่อนอื่นคุณต้องเลือกวัตถุ 2 ชิ้นขึ้นไปจึงจะเห็นตัวเลือกนี้
ihebiheb

8

ฉันได้ประเมินเครื่องมือมากมายและพบวิธีแก้ไขปัญหาต่อไปนี้:

การเปรียบเทียบสคีมา :

สิ่งที่น่าสนใจที่สุด ได้แก่ 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 สำหรับการย้ายข้อมูล / การติดตามเวอร์ชัน


6

ฉันกำลังทำงานกับเครื่องมือเปรียบเทียบที่ครอบคลุมสำหรับ Postgres จะใช้งานได้ฟรีในช่วงเบต้า

Postgres เปรียบเทียบ

ในขั้นต้นนี่เป็นเพียงการเปรียบเทียบสคีมา (DDL) แต่เราอาจจะขยายไปยังข้อมูลด้วย ฉันเชื่อว่านี่เป็นเครื่องมือที่ร้านค้าจำนวนมากต้องการเพื่อที่จะย้ายจาก RDBMS ปัจจุบันโดยไม่ต้องเปลี่ยนสภาพแวดล้อมการพัฒนาการดำเนินงานและอื่น ๆ ด้วย


1
ข้อมูลยังมีความสำคัญมาก สคีมาอย่างเดียวไม่เพียงพอ
Houman

1
สวัสดี @Houman ขออภัยสำหรับการตอบกลับปลาย. คุณพูดถูกข้อมูลจะเป็นขั้นตอนต่อไป สิ่งที่ยอดเยี่ยมในการสร้างเครื่องมือเปรียบเทียบสคีมาอันดับแรกคือโค้ดทั้งหมดสำหรับการค้นหาตาราง ฯลฯ สามารถใช้ร่วมกันได้
Neil Anderson

ฉันเจอคำตอบนี้ในขณะที่สร้างเครื่องมือเปรียบเทียบสคีมาอย่างง่ายด้วยตัวเอง ฉันอ่านเว็บไซต์ของคุณและเครื่องมือดูมีแนวโน้มดีมาก แทบรอไม่ไหวที่จะทดลองใช้เวอร์ชันเบต้า
Avantika Saini

อัลฟ่ามีวางจำหน่ายแล้วในขณะนี้ @AvantikaSaini และหากคุณลองใช้โปรดแจ้งให้เราทราบว่าจะเป็นอย่างไรเพื่อที่ฉันจะได้ปรับปรุงให้ดีขึ้นสำหรับทุกคน
Neil Anderson

คุณควรทำใบอนุญาตรุ่นเพื่อการศึกษา ราคาสูงเกินไปสำหรับวัตถุประสงค์ทางการศึกษา
reinaldoluckman

2

เครื่องมือที่ดีที่สุดที่ฉันเคยเห็น https://pythonhosted.org/Pyrseas/

  1. รับดัมพ์จากฐานข้อมูล A dbtoyaml ...

  2. สร้างการย้ายข้อมูลจาก A => B yamltodb ... [ไฟล์ที่สร้างในขั้นตอนที่ 1]


ดูเหมือนว่าจะเป็นเครื่องมือเดียวที่สร้างสคริปต์ต่างโดยเปรียบเทียบฐานข้อมูลเดียวกับไฟล์ดัมพ์หนึ่งไฟล์ โดยปกติเครื่องมืออื่น ๆ จะเปรียบเทียบฐานข้อมูลสองฐานข้อมูล ด้วยคุณสมบัตินี้นักพัฒนาสามารถทำงานกับฐานข้อมูล dev ในเครื่องจากนั้นยอมรับและแจกจ่ายการแก้ไขโดย vcs โดยไม่ต้องสร้างสคริปต์การย้ายข้อมูลเพียงเรียกใช้ dbtoyaml นักพัฒนาทีม Oher สามารถอัปเดตฐานข้อมูลในเครื่องได้ด้วยคำสั่งเดียว (yamltodb) เวิร์กโฟลว์นี้ทำงานคล้ายกับโครงการฐานข้อมูล Visual Studio
andreav

0

ฉันกำลังมองหาเครื่องมือเพื่อเปรียบเทียบข้อมูลในฐานข้อมูล (โดยเฉพาะฉันสนใจที่จะเปรียบเทียบ Redshift DB) เพื่อให้ห่างไกลที่ผมพบที่ดีที่สุดคือhttps://www.dbbest.com/products/database-compare-suite/#close น่าเสียดายที่การทดลองใช้ฟรีจะหมดอายุภายในหนึ่งวัน


0

ฉันสร้างเครื่องมือเพื่อเปรียบเทียบฐานข้อมูล PostgreSQL แบบสด 2 ฐานข้อมูล (ไม่ใช่การถ่ายโอนข้อมูล) ข้อมูลตารางและลำดับ ช่วงแรก ๆ ที่ผ่านมา แต่ทำได้ในสิ่งที่อยากทำบางทีมันอาจช่วยคุณได้

https://github.com/dmarkey/pgdatadiff


0

ในความคิดของ dbForge เป็นเครื่องมือที่มีประสิทธิภาพที่สุดสำหรับ comapring ข้อมูล PostgreSQL มันของผลิตภัณฑ์ของ Devart company.you สามารถดาวน์โหลดได้ที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.