পোস্টগ্রিসকিউএল কি নন-ডিফল্টগুলির সাথে কলামগুলি যুক্ত করতে অনুকূলিত করে?


10

NOT NULLকোনও DEFAULTমান সহ কলামগুলি যুক্ত করার সময় - পোস্টগ্রিসএসকিউএল কি এই ক্রিয়াকলাপটি অনুকূলিত করে?

যদি সারণীতে এন সারি থাকে তবে একটি অপ্টিমাইটিজড অল্টার-টেবিল-অ্যাড-কলামটি ডিফল্ট মানটি লিখতে পারে - যা খুব বেদনাদায়ক হতে পারে, স্পষ্টতই। অপ্টিমাইজেশনের মাধ্যমে ডিবি তাত্ক্ষণিকভাবে নতুন কলাম তৈরি করবে, ডিফল্ট মানটির কেবল একটি অনুলিপি সংরক্ষণ করবে যা যখন কোনও উপযুক্ত-সূচক ডেটা কাঠামোয় column কলামের জন্য কোনও ডিফল্ট মান না পাওয়া যায় তখন ফিরে আসবে।

উদাহরণস্বরূপ ওরাকল 11 জি এর যেমন একটি অপ্টিমাইজেশন রয়েছে

উত্তর:


16

PostgreSQL এ তেমন কোনও ব্যবস্থা নেই।

তবে, আপনি এখনও এই জাতীয় টেবিল পরিবর্তনের অত্যধিক প্রভাব এড়াতে পারেন।

নীচের বিবৃতিটি বিবৃতি / লেনদেনের সময়কালের জন্য টেবিলে একটি অ্যাক্সেস এক্সক্লুসিভ লক অর্জন করে:

ALTER TABLE your_table
    ADD COLUMN new_column integer NOT NULL DEFAULT 0;

এই বিবৃতিটি ক্যাটালগ পরিবর্তন করে, তারপরে পুরো টেবিলটি পুনরায় লিখবে যাতে নতুন কলামে সমস্ত সারিতে ডিফল্ট মান থাকে। যদি টেবিলটিতে অনেকগুলি সারি থাকে এবং প্রায়শই অ্যাক্সেস করা হয় তবে এটি কিছু অস্থায়ী সমস্যার কারণ হতে পারে।

এড়াতে, যত তাড়াতাড়ি সংক্ষিপ্ততার জন্য একচেটিয়া লক ধরে রাখার চেষ্টা করুন:

ALTER TABLE your_table
    ADD COLUMN new_column integer;
ALTER TABLE your_table
    ALTER COLUMN new_column SET DEFAULT 0;

যেহেতু এটি মূলত ক্যাটালগটিতে কেবলমাত্র একটি (আসলে দুটি) পরিবর্তন (কোনও ডেটা পরিবর্তন ঘটে না), এটি খুব দ্রুত সম্পন্ন হবে। তারপরে আপনার প্রয়োজনীয়তা এবং টেবিল ব্যবহারের উপর নির্ভর করে আপনি এক কদমে বা ব্যাচগুলিতে ডিফল্টরূপে নতুন কলামটি আপডেট করতে পারবেন এবং শেষ হয়ে গেলে, কলামটি এতে সেট করুন NOT NULL

কোনও ইচ্ছা বাস্তবায়িত হওয়ার বিষয়ে আপডেট: পোস্টগ্র্যাস এসকিউএল 11 এর এই বৈশিষ্ট্যটি থাকবে। আরও জানতে https://www.depesz.com/2018/04/04/waiting-for-postgresql-11- ব্রেকফাস্ট- alter- table- add- column- with- a-non- null- default/ দেখুন।


4

হ্যাঁ, পোস্টগ্রিসকিউএল 11 সহ

এই বৈশিষ্ট্যটি নতুন এবং সংস্করণ 11-এ অবতরণ করেছে।

ALTER TABLE your_table
    ADD COLUMN new_column integer NOT NULL DEFAULT 0;

উপরেরটি এমন একটি কমান্ড যা এই অপ্টিমাইজেশান দ্বারা প্রভাবিত হবে; কিন্তু, এটা বলা যেতে উচিত NOT NULLহয় না প্রয়োজন। নন-নাল ডিফল্ট সহ যে কোনও নতুন কলাম যুক্ত করা এখন অনুকূলিত। আপনি এই প্রতিশ্রুতিবদ্ধ এন্ট্রিটি খুঁজে পেতে পারেন আপনার এটি সম্পর্কে এই দুর্দান্ত রচনাটিও পরীক্ষা করা উচিত , "পোস্টগ্রিস 11 এ একটি মিসিং লিঙ্ক: ডিফল্টর সাথে দ্রুত কলাম সৃষ্টি"

প্রাক-পোস্টগ্রিএসকিউএল 11 ওয়ার্কআরাউন্ড

যদি আপনি টেবিলের একচেটিয়া টেবিল-লকটি এড়াতে চাইছেন তবে ক্রেগ রিঞ্জারের পরামর্শ অনুসরণ করুন,

  • এ ছাড়া একটি কলাম যুক্ত করুন DEFAULT
  • ALTERএটি DEFAULTপরে যুক্ত করার জন্য এটি সদ্য সন্নিবেশ করা সারিগুলিতে প্রযোজ্য
  • তারপরে প্রগতিশীল ব্যাচের UPDATEগুলি দ্বারা বিদ্যমান সারিগুলিতে নতুন কলামটি স্থাপন করুন
  • যখন সমস্ত সারিটির মান থাকে আপনি NOT NULLসীমাবদ্ধতা যুক্ত করেন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.