পোস্টগ্রিএসকিউএল: স্কিমা ডিফার / প্যাচ সরঞ্জাম [বন্ধ]


14

নিম্নলিখিত সেটিংটি বিবেচনা করুন:

  • একটি প্রযোজনা ডিবি
  • একটি ডেভ ডিবি, যার উপর নতুন বৈশিষ্ট্য সক্ষম করতে স্কিমা পরিবর্তন করা হয়

যখন কোনও নতুন বৈশিষ্ট্যটির বিকাশ সম্পূর্ণ হয়ে যায়, pg_dump --schema-onlyউভয় ডিবিতে অভিন্ন না হওয়া পর্যন্ত আমাকে নিজেই প্রোড ডিবি স্কিমা আপডেট করতে হবে । এই প্রক্রিয়াটি ত্রুটিযুক্ত প্রবণ এবং ক্লান্তিকর।

সুতরাং, আমি একটি সরঞ্জাম খুঁজছি যা করতে পারে:

  • দুটি স্কিমার মধ্যে পার্থক্যের সংক্ষিপ্তসার (যেমন diff) দেখান। মনে রাখবেন যে আমি স্কিমার নিছক পাঠ্যগত পার্থক্য খুঁজছি না, তবে আরও একটি বিস্তৃত সরঞ্জাম যা "টেবিলটির Xএকটি নতুন কলাম রয়েছে " এর মতো সিদ্ধান্তগুলি আঁকতে পারে Y
  • এসকিউএল কোডটি স্বয়ংক্রিয়ভাবে জেনারেট করে যা একটি স্কিমাটিকে অন্যটিতে (যেমন patch) রূপান্তর করতে পারে

স্কাইমা ডিফ / প্যাচ সরঞ্জাম রয়েছে যা আমাকে প্রোড স্কিমাকে আরও উন্নত দেব স্কিমায় রূপান্তর করতে সহায়তা করতে পারে?


2
আলাদা করার পরিবর্তে আপনার নিজের স্থানান্তর স্ক্রিপ্টগুলি নিয়ন্ত্রিত উপায়ে পরিচালনা করা উচিত। কোনও ডিবিএমএস-এ অ্যাড-হক ডিডিএল পরিবর্তন করবেন না, সর্বদা পরিবর্তনটিকে স্ক্রিপ্টে রাখুন (যা একটি সংস্করণ নিয়ন্ত্রণ সিস্টেমে সঞ্চিত থাকে) এবং তারপরে স্ক্রিপ্টটি প্রয়োগ করুন। লিকুইবেস বা ফ্লাইওয়ের মতো সরঞ্জামগুলি দেখুন
13_14

1
@ a_horse_with_no_name ধন্যবাদ। এমনকি এই পদ্ধতির সাথে, একটি পৃথক / প্যাচ সরঞ্জাম আমার জীবনকে আরও সহজ করে তুলবে। বিটিডাব্লু, আমি গানটি গুনতে সাহায্য করতে পারি না।
আদম মতান

আপনি চেষ্টা করতে পারেন pg_comparator: pgfoundry.org/projects/pg-comparator (যদিও আমি এটি কখনও ব্যবহার করি নি)। লিকুইবেসের একটি বিল্ট-ইন ডিফারও রয়েছে এবং লিকুইবেস চেঞ্জসেট হিসাবে ফলাফলগুলি প্রকাশ করে যদি আমার ভুল না হয় তবে এটি আরও নিয়ন্ত্রিত স্কিমা পরিচালনার জন্য একটি ভাল সূচনা পয়েন্ট হতে পারে
a_horse_with_no_name

ধন্যবাদ। একটি উত্তর হিসাবে পোস্ট করতে যত্ন তাই আমি upvote করতে পারেন?
আদম মতান

উত্তর:


11

একটি পুরানো প্রশ্ন পুনরুত্থিত দুঃখিত

সম্প্রতি আমি জেটব্রেইনস দ্বারা 0xDBE ডেটাগ্রিপ ডেটাবেস পরিচালন সরঞ্জামটি ব্যবহার করছি।

এটি একাধিক ডাটাবেস ইঞ্জিনকে সমর্থন করে, দুর্দান্ত জেটব্রেন আইডিইতে, এবং একটি মূল বৈশিষ্ট্য যা আমি খুঁজে পেয়েছি তা হ'ল diff2 টি সারণী ( ডিইভি এবং পিআরডি) করার দক্ষতা ।

নীচে কর্মে ভিন্নতার স্ক্রিনশট দেওয়া আছে (এই ক্ষেত্রে কেবলমাত্র একটি কলামের পার্থক্য রয়েছে)। স্ক্রিনশটটি শীর্ষে থাকা "ডান মার্জ করুন" বোতামের ফলাফল যা ডান টেবিলটি স্ক্র্যাচ পর্যন্ত আনতে প্রয়োজনীয় এসকিউএল তৈরি করে।

0xDBE এসকিউএল সারণি পার্থক্য

আশা করি এই নতুন সরঞ্জামটি সাহায্য করবে।


3
পুরানো প্রশ্নগুলি পুনরুত্থিত করতে কোনও সমস্যা নেই (এটি থেকে অর্জনের জন্য এমনকি ব্যাজগুলিও রয়েছে)। এবং একটি প্রশ্ন: পুরো ডেটাবেসগুলির সাথে তুলনা করা কি সম্ভব (কমপক্ষে, এর মধ্যে সমস্ত টেবিল)?
dezso

@ ডেজো - আশ্বাসের জন্য ধন্যবাদ হ্যাঁ আপনি একটি ডাটাবেস, স্কিমা এবং টেবিল স্তরে তুলনা করতে পারেন।
ইভান

1
@ বাসিলবার্ক - বাম হাতের Databaseমেনু থেকে, আপনি যে দুটি টেবিলের তুলনা করতে চান তা নির্বাচন করুন (এর সাথে cmd/ctrl + click), ডান ক্লিক করুন এবং নির্বাচন করুনCompare
ইওয়ান

3
আমি সম্প্রতি পাইগন , মাইগ্রায় লেখা একটি নতুন সরঞ্জাম পেয়েছি । এটি সারণী, দর্শন, ফাংশন, সূচি, সীমাবদ্ধতা, এনমস, সিকোয়েন্স এবং ইনস্টল করা এক্সটেনশনের পরিবর্তনের পরিবর্তনগুলি ট্র্যাক করতে পারে এবং একটি গ্রন্থাগার হিসাবেও ব্যবহার করা যেতে পারে
স্ক্রিপ্টগুলি

1
@ ইভান এছাড়াও, মাইগ্রা ট্রিগার এবং ফাংশন সহ উভয় ডাটাবেসে সমস্ত কিছু ট্র্যাক করে। কিন্তু ডেটাগ্রিপ তা করে না। এজন্য, আমি ডেটাগ্রিপকে একটি ডিফ সরঞ্জাম হিসাবে ব্যবহার থেকে নিরুৎসাহিত করি। ত্রুটিগুলিও উপস্থিত রয়েছে: 1) মাইগ্রা হ'ল একটি পোস্টগ্রিজ এসকিউএল সরঞ্জাম; 2) মাইগ্রা ট্র্যাক পরিবর্তন করে, তবে সর্বদা যথাযথ ডিডিএল অপারেটর উত্পাদন করে না, যেমন বদল টেবিল ... কলাম যুক্ত করুন, পরিবর্তনের টেবিলের পরিবর্তে কলাম ড্রপ করুন ... কলামটির নাম পরিবর্তন করুন ইত্যাদি এবং আমি এমন কোনও সরঞ্জাম পাই নি যা উত্পাদন করে সঠিক ডিডিএল কমান্ড। তাদের সবসময় মসৃণতা প্রয়োজন। এছাড়াও, লিকুইবেসের মতো কিছু স্থানান্তর সরঞ্জাম ছাড়াই যে কোনও ডাটাবেস পরিবর্তন খুব জটিল হবে।
Exterminator13

6

তরলব্যাস ব্যবহার করুন ।

এটি ডিফ সমর্থন করে , স্ক্র্যাচ থেকে একটি ডিবি উত্পন্ন করে, একটি ডিবি প্যাচ করে, একটি ডিবি পিছনে ঘূর্ণায়মান, এবং অন্যান্য স্টাফগুলির একটি গোছা।

আপনি এক্সএমএল-তে সব তরল পদার্থ দিয়ে লিখতে থাকতেন, তবে আর নয়। আপনি এর 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;

আপনার লিকুইজেজ চেঞ্জলগগুলি গিটে বা আপনার কাছে থাকা উচিত।


এটির সাথে একটি সমস্যা হ'ল এটি সীমাবদ্ধতা এবং প্রাথমিক কীগুলি সঠিকভাবে অর্ডার বা সরিয়ে দেয় না।
ভিক্ষু

2
ফ্লাইওয়ে লিকুইবেসের অনুরূপ আরেকটি পছন্দ।
তুলসী বাউরক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.