PostgreSQL: स्कीमा भिन्न / पैच उपकरण [बंद]


14

निम्नलिखित सेटिंग पर विचार करें:

  • एक उत्पादन डी.बी.
  • एक देव डीबी, जिस पर नई सुविधाओं को सक्षम करने के लिए स्कीमा परिवर्तन किए जाते हैं

जब एक नई सुविधा का विकास पूरा हो जाता है, तो मुझे डीबी स्कीमा को मैन्युअल रूप से अपडेट करना होगा जब तक pg_dump --schema-onlyकि दोनों डीबी एक समान न हों। यह प्रक्रिया त्रुटि प्रवण और थकाऊ है।

इसलिए, मैं एक ऐसे टूल की तलाश कर रहा हूं, जो:

  • दो स्कीमा (जैसे diff) के बीच के अंतरों का सारांश दिखाएं । ध्यान दें कि मैं स्कीमा के मात्र पाठ की तलाश नहीं कर रहा हूं, लेकिन एक अधिक विस्तृत उपकरण जो "तालिका Xमें एक नया स्तंभ है Y" जैसे निष्कर्ष निकाल सकता है ।
  • SQL कोड को स्वतः उत्पन्न करें जो एक स्कीमा को दूसरे में परिवर्तित करेगा (जैसे patch)

क्या कोई स्कीमा भिन्न / पैच उपकरण है जो मुझे ठेस स्कीमा को अधिक उन्नत देव स्कीमा में बदलने में मदद कर सकता है?


2
एक अंतर करने के बजाय, आपको अपनी माइग्रेशन स्क्रिप्ट को नियंत्रित तरीके से प्रबंधित करना चाहिए। डीडीएल में एड-हॉक डीडीएल परिवर्तन कभी न करें, हमेशा बदलाव को एक स्क्रिप्ट में रखें (जो एक संस्करण नियंत्रण प्रणाली में संग्रहीत है) और फिर स्क्रिप्ट को लागू करें। Liquibase या
Flyway

1
@a_horse_with_no_name धन्यवाद। इस दृष्टिकोण के साथ भी, एक अलग / पैच उपकरण मेरे जीवन को आसान बना देगा। Btw, मैं गीत गुनगुना मदद नहीं कर सकता।
एडम मटन

आप pg_comparator आज़मा सकते हैं: pgfoundry.org/projects/pg-comparator (हालांकि मैंने इसका इस्तेमाल कभी नहीं किया है)। लिक्विबेस के पास बिल्ट-इन अंतर है और यदि मैं गलत नहीं हूँ तो एक लिलीबेस चेंज के रूप में परिणाम का उत्सर्जन करता है ताकि अधिक नियंत्रित स्कीमा प्रबंधन के लिए एक अच्छा शुरुआती बिंदु हो सकता है
a_horse_with_no_name

धन्यवाद। एक उत्तर के रूप में इसे पोस्ट करने की देखभाल ताकि मैं उत्थान कर सकूं?
एडम मतान

जवाबों:


11

एक पुराने प्रश्न को पुनर्जीवित करने के लिए क्षमा करें

हाल ही में मैं JetBrains द्वारा 0xDBE DataGrip डेटाबेस मैनेजमेंट टूल का उपयोग कर रहा हूं ।

यह उत्कृष्ट Jetbrains IDE में कई डेटाबेस इंजनों का समर्थन करता है, और एक महत्वपूर्ण विशेषता जो मुझे उपयोगी लगी है वह है diff2 टेबल (DEV और PROD) की क्षमता ।

नीचे कार्रवाई में अंतर का एक स्क्रीनशॉट है (इस मामले में केवल एक स्तंभ अंतर है)। स्क्रीनशॉट शीर्ष पर "मर्ज राइट" बटन का परिणाम है, जिससे सही तालिका को खरोंच तक लाने के लिए आवश्यक SQL उत्पन्न होता है।

0xDBE SQL टेबल डिफ

आशा है कि यह नया उपकरण मदद करता है।


3
पुराने प्रश्नों को पुनर्जीवित करने में कोई समस्या नहीं है (इससे प्राप्त करने के लिए भी बैज हैं)। और एक प्रश्न: क्या पूरे डेटाबेस की तुलना करना संभव है (मेरा मतलब है, कम से कम, उनमें सभी टेबल)?
dezso

@ डेज़ो - आश्वासन के लिए धन्यवाद। हाँ, आप एक डेटाबेस, स्कीमा और टेबल स्तर पर तुलना कर सकते हैं।
इवान

1
@ बासिलबोर्के - बाएं हाथ के Databaseमेनू से, उन 2 तालिकाओं का चयन करें जिनकी आप तुलना करना चाहते हैं (साथ cmd/ctrl + click), दायाँ क्लिक करें और चयन करेंCompare
इवान

3
मैं हाल ही में एक नया उपकरण लेकर आया हूं, जिसे अजगर में लिखा गया है, मिग्रा । यह परिवर्तन से लेकर टेबल, व्यू, फ़ंक्शंस, इंडेक्स, अड़चन, एनम, सीक्वेंस, और इंस्टॉल किए गए एक्सटेंशन तक को ट्रैक कर सकता है और इसे लाइब्रेरी के रूप में भी इस्तेमाल किया जा सकता है
स्क्रिप्ट्स

1
@ ईवन भी, दोनों डेटाबेस और ट्रिगर सहित फंक्शंस में सब कुछ ट्रैक करता है। लेकिन DataGrip नहीं करता है। इसीलिए, मैं DataGrip को एक अलग उपकरण के रूप में उपयोग करने से हतोत्साहित करता हूँ। कमियां भी मौजूद हैं: 1) माइग्रेशन केवल एक PostgreSQL उपकरण है; 2) माइग्रेशन परिवर्तनों को ट्रैक करता है, लेकिन हमेशा परिवर्तन तालिका की तरह उपयुक्त DDL ऑपरेटरों का उत्पादन नहीं करता है ... तालिका में बदलाव के बजाय कॉलम, ड्रॉप कॉलम जोड़ें ... कॉलम का नाम बदलें आदि। और मुझे कोई टूल नहीं मिला है, जो उत्पादन करता है सही DDL कमांड। उन्हें हमेशा पॉलिशिंग की जरूरत होती है। इसके अलावा, कुछ माइग्रेशन टूल के बिना, लिक्विबेस की तरह, कोई भी डेटाबेस संशोधन बहुत जटिल होगा।
निर्गमन 13

6

शराबी का प्रयोग करें ।

यह अंतर का समर्थन करता है , खरोंच से एक डीबी उत्पन्न करना, एक डीबी को पैच करना, एक डीबी को वापस रोल करना, और अन्य सामान का एक गुच्छा।

आपको XML में सब कुछ liquibase के साथ लिखना पड़ता था, लेकिन अब नहीं। आप अपनी पसंद की SQL बोली में इसे 99% लिख सकते हैं। उदाहरण:

--liquibase formatted sql

--changeset neil:1 

create table contacts(
  contact_id serial primary key,
  name text not null unique
);

--changeset neil:2
alter table contacts add column phone_num text;

आपको अपने लिबास चेंजलॉग्स को git या व्हाट-है-यू में रखना चाहिए।


इस के साथ एक मुद्दा यह है कि यह आदेशों और प्राथमिक कुंजियों को सही करने या हटाने का आदेश नहीं देता है।
भिक्षु

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