@ ক্রেইগ যা সরবরাহ করেছিল (এবং এর কিছু সংশোধন করে) তা ছাড়াও :
কার্যকরী Postgres 9.4 , UNIQUE
, PRIMARY KEY
এবং EXCLUDE
সীমাবদ্ধতার অবিলম্বে চেক করা হয় প্রতিটি সারির পর যখন সংজ্ঞায়িত NOT DEFERRABLE
। এটি অন্যান্য ধরণের NOT DEFERRABLE
বাধা (বর্তমানে কেবলমাত্র REFERENCES
(বিদেশী কী)) থেকে পৃথক যা প্রতিটি বিবৃতি পরে পরীক্ষা করা হয় । এসও সম্পর্কিত এই প্রশ্নের অধীনে আমরা এই সমস্ত কাজ করেছি:
এটা না যথেষ্ট একটি জন্য UNIQUE
(অথবা PRIMARY KEY
বা EXCLUDE
) বাধ্যতা হতে DEFERRABLE
সঙ্গে আপনার উপস্থাপন কোড করতে একাধিক বিবৃতি হবে।
এবং আপনি এই উদ্দেশ্যে ব্যবহার করতে পারবেন নাALTER TABLE ... ALTER CONSTRAINT
। প্রতি ডকুমেন্টেশন:
ALTER CONSTRAINT
এই ফর্মটি পূর্বে তৈরি হওয়া সীমাবদ্ধতার বৈশিষ্ট্যগুলিকে পরিবর্তন করে। বর্তমানে কেবল বৈদেশিক কী বাধা পরিবর্তন করা যেতে পারে ।
বোল্ড জোর আমার। পরিবর্তে ব্যবহার করুন:
ALTER TABLE t
DROP CONSTRAINT category_name_key
, ADD CONSTRAINT category_name_key UNIQUE(name) DEFERRABLE;
ড্রপ এবং একটি একক বিবৃতিতে ফিরে প্রতিবন্ধকতা যুক্ত করুন যাতে আপত্তিজনক সারিগুলিতে কারও জন্য ছিঁড়ে যাওয়ার কোনও সময় উইন্ডো নেই। বড় টেবিলগুলির জন্য এটি কোনওভাবে অন্তর্নিহিত অনন্য সূচি সংরক্ষণ করার জন্য লোভনীয় হবে, কারণ এটি মুছে ফেলা এবং পুনরায় তৈরি করা ব্যয়বহুল। হায়রে, এটি স্ট্যান্ডার্ড সরঞ্জামগুলির মাধ্যমে সম্ভব বলে মনে হচ্ছে না (যদি এর জন্য আপনার কাছে কোনও সমাধান থাকে, তবে দয়া করে আমাদের জানান!):
একটি জন্য একক বিবৃতি বাধ্যতা deferrable উপার্জন যথেষ্ট:
UPDATE category c
SET name = c_old.name
FROM category c_old
WHERE c.id IN (1,2)
AND c_old.id IN (1,2)
AND c.id <> c_old.id;
সিটিই সহ একটি প্রশ্নও একক বিবৃতি:
WITH x AS (
UPDATE category SET name = 'phones' WHERE id = 1
)
UPDATE category SET name = 'tablets' WHERE id = 2;
তবে একাধিক বিবৃতি সহ আপনার কোডের জন্য আপনাকে (অতিরিক্তভাবে) সীমাবদ্ধতাটি স্থগিত করতে হবে - বা এটিকে হিসাবে সংজ্ঞায়িত করা উচিত INITIALLY DEFERRED
সাধারণত উপরের চেয়ে ব্যয়বহুল। তবে একটি বিবৃতিতে সমস্ত কিছু প্যাক করা সহজেই সম্ভব হবে না।
BEGIN;
SET CONSTRAINTS category_name_key DEFERRED;
UPDATE category SET name = 'phones' WHERE id = 1;
UPDATE category SET name = 'tablets' WHERE id = 2;
COMMIT;
যদিও সীমাবদ্ধতার সাথে সীমাবদ্ধতার বিষয়ে সচেতন হন FOREIGN KEY
। প্রতি ডকুমেন্টেশন:
রেফারেন্সযুক্ত কলামগুলি অবশ্যই রেফারেন্স সারণীতে একটি অ-স্থলযোগ্য অনন্য বা প্রাথমিক কী বাধাটির কলাম হতে হবে ।
সুতরাং আপনি একই সাথে উভয় থাকতে পারে।