PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

PostgreSQL आंशिक अद्वितीय अनुक्रमणिका और अपरर्ट

मुझे नहीं लगता कि एक संघर्ष लक्ष्य के रूप में एकाधिक आंशिक अनुक्रमणिका का उपयोग करना संभव है। आपको एकल अनुक्रमणिका का उपयोग करके वांछित व्यवहार प्राप्त करने का प्रयास करना चाहिए। केवल एक ही तरीका है कि मैं भावों पर एक अद्वितीय अनुक्रमणिका का उपयोग कर सकता हूं:

drop table if exists test;
create table test (
    p text not null,
    q text,
    r text,
    txt text
);

create unique index test_unique_idx on test (p, coalesce(q, ''), coalesce(r, ''));

अब सभी तीन परीक्षण (दो बार निष्पादित) एक ही सूचकांक का उल्लंघन करते हैं:

insert into test(p,q,r,txt) values ('p',null,null,'a'); -- violates test_unique_idx
insert into test(p,q,r,txt) values ('p','q',null,'b');  -- violates test_unique_idx
insert into test(p,q,r,txt) values ('p',null, 'r','c'); -- violates test_unique_idx

इन्सर्ट कमांड में आपको इंडेक्स डेफिनिशन में इस्तेमाल किए गए एक्सप्रेशन को पास करना चाहिए:

insert into test as u (p,q,r,txt) 
values ('p',null,'r','d') 
on conflict (p, coalesce(q, ''), coalesce(r, '')) do update 
set txt = excluded.txt;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. नोड-पोस्टग्रेज $1 IS NULL त्रुटि

  2. रूबी सीक्वल मणि - pg_array एक्सटेंशन के साथ सरणियों को कैसे क्वेरी करें

  3. पोस्टग्रेस्क्ल टेबल के लिए बल्क सी # डेटाटेबल

  4. \d jdbc प्रोग्राम में विफल रहा

  5. उबंटू पर पोस्टग्रेस्क्ल को पूरी तरह से शुद्ध और पुनर्स्थापित कैसे करें?