PostgreSQL: ভিউ থেকে কলাম ড্রপ করুন


10

আমার এমন একটি জায়গা রয়েছে VIEWযেখানে আমি একটি বিবর্তন স্ক্রিপ্ট তৈরি করার চেষ্টা করছি, তাই আমি এটিতে একটি কলাম যুক্ত করতে পারি। এই অংশটি কাজ করে; কলামটি কেবল সূক্ষ্মভাবে যুক্ত হয়েছে। তবে বিপরীত কাজ করে না; সর্বশেষ যুক্ত কলামটি মুছে ফেলুন কোনও ERROR: cannot drop columns from viewবার্তা দিয়ে ব্যর্থ হয় । সমস্যাটি হ'ল এই নির্দিষ্ট দৃষ্টিভঙ্গির অনেকগুলি উল্লেখ রয়েছে, উভয় থেকেই এবং তাই, আমি কেবল DROP CASCADEঘৃণ্য জিনিসটিই পারি না !

আমি কোনও প্রদত্ত থেকে নতুন সংযুক্ত কলামটি অপসারণ করতে না পারার কারণ রয়েছে VIEW? তাহলে, আমি এই কাজটি সম্পাদন করতে কী করতে পারি?

(দ্রষ্টব্য: পরিস্থিতি, এখানে, সেগুলি কী, তবে আমি খুব ভালভাবেই দেখতে পাচ্ছি, অন্য অনেক ক্ষেত্রে, একটি দৃষ্টিভঙ্গি থেকে একটি কলাম বাদ দিচ্ছে) aka


আপনি প্রথম স্থানে কলামটি কীভাবে যুক্ত করলেন? আপনি পারবেন না ALTER VIEW ... ADD COLUMN। আপনি ব্যবহার করছেন CREATE OR REPLACE VIEW? দেখান আপনার কোড দয়া করে।
ক্রেগ রিঞ্জার

@ ক্রেইগ্রিঞ্জার, হ্যাঁ, CREATE OR REPLACE VIEWঅতিরিক্ত কলাম ব্যতীত একই ডিএফ দিয়ে (কারণ একটি রেফড টেবিলে একটি নতুন কলাম যুক্ত হয়েছে, সুতরাং ভিউটিতে এটি অন্তর্ভুক্ত করতে হবে)। "হস্তান্তর", ref'ed টেবিল থেকে কলাম সরিয়ে ফেলা হবে, যাতে VIEWএছাড়াও রয়েছে না আর এটা ফিরে।
ইয়ানিক রোচন

উত্তর:


13

পোস্টগ্র্যাস এসকিউএল (কমপক্ষে 9.4 অবধি সত্য) বর্তমানে কলামটি মুছে ফেলার পক্ষে সমর্থন করে না CREATE OR REPLACE VIEW

নতুন ক্যোয়ারিতে বিদ্যমান ভিউ ক্যোয়ারি দ্বারা উত্পাদিত একই কলামগুলি তৈরি করতে হবে (এটি একই ক্রমের একই নাম এবং একই ডেটা ধরণের সহ) তবে এটি তালিকার শেষে অতিরিক্ত কলাম যুক্ত করতে পারে।

কলামগুলি বাদ দেওয়ার জন্য সমর্থন যুক্ত করা যায়নি তার কোনও মৌলিক কারণ নেই, তবে এটি বাস্তবায়নের জন্য প্রয়োজনীয় কাজ এখনও কেউ করেনি।

CREATE OR REPLACE VIEWসমস্ত নির্ভরতা পুনরাবৃত্তভাবে স্ক্যান করতে হবে এবং নিশ্চিত করা উচিত যে এগুলির কোনওটিই কলামটি বাদ দেওয়া যায়নি। যদি তারা SELECT *এটি ব্যবহার করে *তবে নির্ভরতা বৃদ্ধির থেকে কলামটি সরিয়ে ফেলতে হবে তবে তার নির্ভরতাগুলিও স্ক্যান করুন । এটি করার সাথে জড়িত কাজের একটি বিট কাজ রয়েছে এবং এমন কিছু ক্ষেত্র রয়েছে যেখানে কলামটি হ্রাস করা ঠিক কীভাবে আচরণ করা উচিত তা বিশেষভাবে যখন ডাম্প এবং পুনরায় লোডের সাথে মিথস্ক্রিয়া আসে তখন এটি স্পষ্ট নয়। সুতরাং কেউ এখনও বৈশিষ্ট্যটি এটি প্রয়োগ করার জন্য যথেষ্ট চায় নি। প্যাচগুলি এবং / বা উন্নয়নের স্পনসরশিপ স্বাগত।

আপনাকে ভিউ এবং তার উপর নির্ভর করে এমন সমস্ত কিছু ফেলে দিতে হবে, তারপরে এটি এবং এর নির্ভরতাগুলি আবার তৈরি করুন। ( একটি দৃশ্যে কলাম যুক্ত করার ক্ষেত্রে একই ব্যবহার করা হয়েছিল; 8.4 এ কলাম যুক্ত করার জন্য সমর্থন চালু হয়েছিল)।

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


2
সুতরাং, আপনি যা বলছেন তা হল, যখনই জটিল সম্পর্কের সাথে একটি বড় অ্যাপ্লিকেশনটির একটি কলাম পরিবর্তন করা দরকার, তখন এটি সম্পূর্ণ (বা কমপক্ষে বেশিরভাগ অংশ) ডিডিএলটি পুনরায় তৈরি করা দরকার? পোস্টগ্রির সাথে আমার খুব বেশি অভিজ্ঞতা নেই, তবে মাইএসকিউএল থেকে এসে আমার কখনই এর মতো সমস্যা হয়নি (ওরাকল, এসকিউএল সার্ভার বা মাইএসকিউএল এর সাথে), এবং এটি আমার কাছে বিস্ময়কর বলে মনে হয় যে পরিবর্তনটি কেবল করা যায় না এবং ত্রুটিগুলি (যদি যেকোন) পরিবর্তে মৃত্যুদন্ড কার্যকর করা সময় নিক্ষেপ করা হবে। এই সীমাবদ্ধতা বেশ সীমাবদ্ধ।
ইয়ানিক রোচন

@ ইয়ানিকরোচন ইয়েপ, এটি একটি ব্যথা এবং আমি এটির উন্নতি দেখতে চাই। যদি আপনি এটি করতে সহায়তা করতে চান তবে এতে অর্থের কাজ বিবেচনা করুন; দেখতে postgresql.org/support/professional_support
ক্রেগ রিঞ্জার

আমরা এই জাতীয় উদ্যোগকে তহবিল দিতে খুব ছোট। তবে এটি নির্ধারিত বিষয় নয় তা দেখে আনন্দিত।
ইয়ানিক রোচন

1
@ ইয়ানিকরোচন ফেয়ার যথেষ্ট। এটি TODO- এ রয়েছে - "অন্তর্নিহিত টেবিলটি পরিবর্তিত হলে পুনরায় দেখার / নিয়ম পুনর্নির্মাণের অনুমতি দিন ", উইকি.পোস্টগ্রেসক্ল.আর
ক্রেগ রিঞ্জার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.