अद्वितीय बाधा के लिए शर्त जोड़ना
वर्तमान में मेरे पास एक मेज पर निम्नलिखित बाधाएं हैं:
ALTER TABLE myTable
ADD CONSTRAINT unique_row UNIQUE (content_id, brand_id, language_id);
मैं बाधा के लिए एक शर्त जोड़ना चाहता हूं: मैं चाहता हूं कि बाधा उसी तरह काम करे, लेकिन केवल एक पंक्ति जहां is_archived है FALSE:
ALTER TABLE myTable
ADD CONSTRAINT unique_row UNIQUE (content_id, brand_id, language_id, !is_archived);
हालाँकि, जब मैं ऐसा करता हूं तो मुझे एक सिंटैक्स त्रुटि मिलती है।
यदि is_archived = true
एक ही संयोजन के साथ कई पंक्तियाँ content_id
और brand_id
अनुमति है। मूल रूप से कई पंक्तियाँ जो समान हैं, उन्हें संग्रहीत किया जा सकता है, लेकिन केवल एक को ही अनारक्षित किया जा सकता है।
जवाब
जबकि Postgres आंशिक रूप से अद्वितीय बाधा की अनुमति नहीं देता है, यह एक आंशिक अद्वितीय सूचकांक का समर्थन करता है:
create unique index unique_row on myTable(content_id, brand_id) where not is_archived;
Postgres प्रलेखन में आंशिक सूचकांक देखें ।
यह प्रभावी रूप से एक अद्वितीय बाधा के रूप में बहुत अधिक है, क्योंकि इस तरह की बाधाओं को वैसे भी अद्वितीय अनुक्रमित के साथ लागू किया जाता है।