PostgreSQL में दो डेटाबेस के बीच डेटा की तुलना कैसे करें?


93

क्या समान संरचना वाले दो डेटाबेस की तुलना करना संभव है? मान लीजिए कि मेरे पास दो डेटाबेस DB1 और DB2 हैं और मैं जांचना चाहता हूं कि क्या उनके बीच डेटा में अंतर है।


यह भी देखें stackoverflow.com/q/2178907/453605
Marcello Nuccio

dbForge डेटा PostgreSQL के लिए ऐसे मुद्दों को हल करता है।
देवरट

postgrescompare.com/downloads अब डेटा की तुलना भी करता है
नील एंडरसन

जवाबों:


85

वहाँ कई उपकरण हैं:

(ध्यान दें कि इनमें से अधिकांश उपकरण केवल संरचना की तुलना कर सकते हैं, लेकिन डेटा की नहीं)

नि: शुल्क मधुमक्खियों:

व्यावसायिक:


17
केवल liquibase.org और एक्वा डेटा स्टूडियो डेटा की तुलना करने लगता है, अन्य सिर्फ स्कीमा की तुलना करते हैं।
अमीर अली अकबरी

@AmirAliAkbari लिक्विबेस सपोर्ट करता है स्कीमा
डिफरेंस

2
ऐसा लगता है कि apgdiffइनहेरिट टेबल का अच्छी तरह से समर्थन नहीं करता है, और जब मैं इसका उपयोग करने की कोशिश करता हूं तो अपवाद तुरंत फेंक देता है। WbSchemaDiffबहुत अच्छा काम करता है, आश्चर्य!
smartwjw

1
@AmirAliAkbari liquibase तालिकाओं के मौजूद होने और समान संरचना होने पर डेटा की तुलना नहीं करता है।
एडित्सू ने छोड़ दिया क्योंकि एसई ईवीआईएल

14
-1। ओपी डेटा (रिकॉर्ड्स / पंक्तियों) की तुलना करने के बारे में पूछ रहा था और आपने अधिकतर संरचना की तुलना करने वाले उपकरण सूचीबद्ध किए हैं , जिन्हें ओपी ने स्पष्ट रूप से कहा था कि वे लक्ष्य डेटाबेस के बीच समान थे, उनकी तुलना करने का कोई कारण नहीं है। कृपया स्पष्ट करें कि वास्तव में अनुरोधित कार्य कौन से लोग करते हैं।
सेलेडम 'व्हेयर मोनिका' नीड

39

pg_dumpदोनों डेटाबेस और फ़ाइलों को अलग करने पर प्रयोग करें।


23
सरल और प्रत्यक्ष के लिए +1। लेकिन क्या हम यह जानते हैं कि pg_dump समान डेटाबेस के डेटा को उसी क्रम में डंप करेगा यदि, कहते हैं, टेबल अलग-अलग ऑर्डर में बनाए गए थे? (मुझे उम्मीद है कि यह आदेश बाधा निर्भरता पर आधारित है, सृजन के समय के बारे में बिल्कुल भी ध्यान रखने की नहीं है, लेकिन आशा है कि यह बहुत अच्छा नहीं है।)
माइक शेरिल 'कैट रिकॉल'

10
आप का उपयोग कर सकते हैं -a -d और | क्रमबद्ध करें। लेकिन यह डेटा आयात करने योग्य नहीं हो सकता है, हालांकि यह बुनियादी जाँच के लिए ठीक होगा।
केम गुलर

यह परिणामों में उच्च होना चाहिए, ईमानदार होना चाहिए। किसी को दिन को बचाने के लिए एक अलग पर भरोसा नहीं करना चाहिए ताकि ये पूर्ण विकसित, भारी, जावा आधारित समाधान ओवरकिल की तरह लगें। हालाँकि, यह समझ में आता है कि आपके प्रवासन की जाँच करें और उसके pg_dumpलिए ठीक है। यदि आप महत्वपूर्ण अंतर देखते हैं, तो आप pg_dumpशायद उन चीजों की तुलना करने की कोशिश कर रहे हैं जो तुलना करने से परे हैं। कम से कम पीजी डीबीएस की तुलना करने के लिए।
सास

1
अफसोस की बात है कि यह केवल छोटे डेटाबेस पर काम करता है, क्योंकि मेरे पास कुछ बड़े डिप्स नहीं हैं। अन्यथा यह (अभी भी!) वास्तव में एकमात्र व्यावहारिक समाधान मुझे मिला। हालांकि मैं psql -c '\x' -c 'SELECT... ORDER BY...'इसके बजाय उपयोग कर रहा हूं pg_dump
नव

11

एक और मुफ्त ऐप (जो केवल संरचना की तुलना कर सकता है, लेकिन डेटा नहीं ):

DBeaver - आप एक दूसरे के साथ तुलना करने के लिए डेटाबेस, टेबल आदि का चयन कर सकते हैं


1
क्या आप बेहतर तरीके से बता सकते हैं कि DBeaver के साथ 2 डेटाबेस के डेटा की तुलना कैसे करें?
निकोला

1
जहाँ तक मुझे पता है कि DBeaver केवल मेटाडेटा तुलना की अनुमति देता है, डेटा तुलना नहीं।
निकोला

बहुत अच्छा उपकरण। यह सच है कि यह बहुत सहज नहीं है कि इसे पहले कैसे किया जाए। आपको पहले 2 या अधिक ऑब्जेक्ट का चयन करना होगा ताकि आप इस विकल्प को देख सकें।
इहेबीब

8

मैंने बहुत सारे उपकरणों का मूल्यांकन किया है और निम्नलिखित समाधान पाया है:

स्कीमा तुलना :

सबसे दिलचस्प लिक्विबेस, पर्सियस और PgCodeKeeper थे:

( समस्या ) लिकेबेस परिवर्तित करता है:

 SET DEFAULT nextval('myschema.name_id_seq'::regclass)

में

BIGSERIAL

इसलिए इसे उपयोग करने के लिए अस्वीकार कर दिया गया था

( समस्या ) पर्सियस ने ठीक काम किया जब तक मैंने कुछ अतिरिक्त स्कीमा नहीं जोड़ा और यह निम्नलिखित शुरू हो गया:

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

डेटा तुलना: मैंने लिकेबेस का उपयोग करने की कोशिश की है और यह सिर्फ आपके द्वारा अनुत्तरित प्रश्न के लिए दो डेटाबेस में डेटा अंतर के बारे में काम करने की कोशिश नहीं कर सकता है।

इसलिए मुझे एक और प्रोजेक्ट 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 ;'"

दोनों उपकरण वस्तुओं को छानने का समर्थन करते हैं। यह वास्तव में सुविधाजनक है।

माइग्रेशन

और अंत में मैं सिर्फ माइग्रेशन / संस्करण ट्रैकिंग के लिए लिकेबेस का उपयोग करता हूं।


6

मैं पोस्टग्रेज के लिए एक व्यापक तुलना उपकरण पर काम कर रहा हूं। यह बीटा में रहते हुए मुफ्त होगा।

PostgresCompare

प्रारंभ में यह सिर्फ स्कीमा (डीडीएल) तुलना है लेकिन हम शायद डेटा में भी विस्तार करेंगे। मेरा मानना ​​है कि यह एक ऐसा उपकरण है जिसमें बहुत सी दुकानों को अपने वर्तमान आरडीबीएमएस से स्थानांतरित करने की आवश्यकता होती है बिना यह भी बदले कि उनके विकास के वातावरण, संचालन आदि कैसे काम करते हैं।


1
डेटा भी बहुत महत्वपूर्ण है। अकेले स्कीमा पर्याप्त नहीं है।
होउमैन

1
हाय @ हउमैन। देर से उत्तर के लिए क्षमा करें। आप सही हैं, डेटा अगला चरण होगा। स्कीमा तुलना उपकरण बनाने के बारे में सबसे बड़ी बात यह है कि टेबल आदि की खोज के लिए सभी कोड उनके बीच साझा किए जा सकते हैं।
नील एंडरसन

मैं स्वयं एक सरल स्कीमा तुलना उपकरण का निर्माण करते समय इस उत्तर पर आया था। मैं आपकी वेबसाइट के माध्यम से चला गया और उपकरण बहुत आशाजनक लग रहा है। बीटा संस्करण को आज़माने की प्रतीक्षा नहीं कर सकते
अवंतिका सैनी

अल्फ़ाज़ अभी उपलब्ध है @AvantikaSaini और यदि आप इसे आज़माते हैं तो कृपया मुझे बताएं कि यह कैसे जाता है इसलिए मैं इसे सभी के लिए सुधार सकता हूं।
नील एंडरसन

आपको लाइसेंस का शैक्षिक संस्करण बनाना चाहिए। शैक्षिक उद्देश्यों के लिए कीमत बहुत अधिक है।
रीनाल्डोलुकमैन

2

सबसे अच्छा उपकरण जो मैंने कभी देखा https://pythonhosted.org/Pyrseas/

  1. डेटाबेस से डंप करें एक dbtoyaml ...

  2. A => B yamltodb से माइग्रेशन जनरेट करें ... [चरण 1 में उत्पन्न फ़ाइल]


यह एक डेटाबेस और एक डंप फ़ाइल की तुलना करने वाली अलग-अलग स्क्रिप्ट बनाने वाला एकमात्र उपकरण प्रतीत होता है। आमतौर पर अन्य उपकरण दो डेटाबेस की तुलना करते हैं। इस सुविधा के लिए धन्यवाद, डेवलपर्स एक स्थानीय देव डेटाबेस का काम कर सकते हैं, फिर माइग्रेशन स्क्रिप्ट्स बनाए बिना vcs द्वारा अपने संशोधनों को वितरित और वितरित कर सकते हैं, बस dbtoyaml को निष्पादित कर सकते हैं। Oher टीम डेवलपर्स अपने स्थानीय डेटाबेस को एक कमांड (yamltodb) के साथ अपडेट कर सकते हैं। यह वर्कफ़्लो दृश्य स्टूडियो डेटाबेस प्रोजेक्ट की तरह थोड़ा सा काम करता है।
andreav

0

मैं डेटाबेस में डेटा की तुलना करने के लिए एक टूल भी ढूंढ रहा हूं (विशेष रूप से मैं Redshift DB की तुलना करने में रुचि रखता था)। अब तक मैंने जो सबसे अच्छा पाया वह है https://www.dbbest.com/products/database-compare-suite/#close । दुर्भाग्य से नि: शुल्क परीक्षण एक दिन के बाद समाप्त हो रहा है।


0

मैंने 2 लाइव PostgreSQL डेटाबेस (डंप नहीं), टेबल डेटा और सीक्वेंस की तुलना करने के लिए एक टूल बनाया। बहुत शुरुआती दिन थे लेकिन मैंने जो करना चाहा उसे हासिल किया, शायद यह आपकी भी मदद कर सके।

https://github.com/dmarkey/pgdatadiff


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.