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
।
एक इच्छा के सच होने के बारे में अपडेट: PostgreSQL 11 में यह सुविधा होगी। अधिक के लिए https://www.depesz.com/2018/04/04/waiting-for-postgresql-11-fast-alter-table-add-column-with-a-non-null-default/ देखें ।