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

MySQL SET डेटा प्रकार को Postgres में बदलें

आप कॉलम के लिए एक सरणी का उपयोग कर सकते हैं और CHECK बाधा के लिए "द्वारा निहित है" ऑपरेटर:

create table pancakes (
    color varchar(10)[] not null,
    check (color <@ ARRAY['red', 'green', 'blue']::varchar[])
);

और फिर ऐसी चीजें होती हैं:

=> insert into pancakes values (ARRAY['red']);
INSERT 0 1
=> insert into pancakes values (ARRAY['red','green','blue']);
INSERT 0 1
=> insert into pancakes values (ARRAY['red','green','blue','black']);
ERROR:  new row for relation "pancakes" violates check constraint "pancakes_color_check"
=> select * from pancakes;
      color       
------------------
 {red}
 {red,green,blue}
(2 rows)

यह {red,red} . की अनुमति देगा हालांकि कॉलम में; अगर {red,red} . को अस्वीकार कर रहे हैं महत्वपूर्ण है, तो आप सरणी में अद्वितीय रंग मानों की जांच के लिए एक फ़ंक्शन जोड़ सकते हैं और CHECK बाधा को समायोजित कर सकते हैं:

create function has_unique_colors(varchar[]) returns boolean as $$
    select (select count(distinct c) from unnest($1) as dt(c)) = array_length($1, 1);
$$ language sql;

create table pancakes (
    color varchar(10)[] not null,
    check (color <@ ARRAY['red', 'green', 'blue']::varchar[] and has_unique_colors(color))
);

एक अन्य विकल्प कॉलम में साधारण स्केलर मानों के साथ एसोसिएशन टेबल का ढेर होगा। हालाँकि, यदि आपके पास इनमें से छह कॉलम हैं तो यह बोझिल हो सकता है। यदि आपको "सेट" में NULLs के बारे में चिंता करने की आवश्यकता है, तो आप फ़ंक्शन के इरविन के संस्करण का भी उपयोग कर सकते हैं:

create function has_unique_colors(varchar[]) returns boolean as $$
    select not exists(select c from unnest($1) dt(c) group by 1 having count(*) > 1);
$$ language sql;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. क्लस्टरकंट्रोल का उपयोग करके एक डॉकटर कंटेनर में पोस्टग्रेएसक्यूएल को कैसे तैनात करें

  2. plpgsql के साथ फ़ंक्शन के अंदर वर्तमान फ़ंक्शन का नाम प्राप्त करना

  3. पोस्टग्रेस्क्ल परिणाम को बैश वैरिएबल में स्टोर करें

  4. रेल:पीजी ::अपरिभाषित तालिका:त्रुटि:संबंध ... मौजूद नहीं है

  5. पोस्टग्रेज में सीरियल बढ़ाया जा रहा है, भले ही मैंने संघर्ष पर जोड़ा कुछ भी न करें