PostgreSQL के साथ इसे केवल संस्करण 9.0 का उपयोग करके "अच्छे" तरीके से हल किया जा सकता है क्योंकि आप अद्वितीय बाधाओं को वहां स्थगित करने के लिए परिभाषित कर सकते हैं।
PostgreSQL 9.0 के साथ आप बस इतना ही करेंगे:
create table label (
id_label serial not null,
rank integer not null,
title text not null,
constraint pri primary key (id_label)
);
alter table label add constraint unique_rank unique (rank)
deferrable initially immediate;
फिर अपडेट इतना आसान है:
begin;
set constraints unique_rank DEFERRED;
update rank
set rank = case when rank = 20 then 10 else 20 end
where id_label in (1,2);
commit;
संपादित करें:
यदि आप अपने लेन-देन के अंदर आस्थगित करने के लिए बाधा सेट करने से परेशान नहीं होना चाहते हैं, तो आप बस बाधा को initially deferred
के रूप में परिभाषित कर सकते हैं ।