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

तीन आईडी का सामना करने वाले सभी अद्वितीय संयोजनों को लगातार सम्मिलित करें

जैसा कि @a_horse_with_no_name पहले ही कहा जा चुका है:unnest() फ़ंक्शन न केवल पहले आयाम बल्कि सभी नेस्टेड तत्वों को समतल करता है। तो यह प्रति पूर्णांक एक पंक्ति बनाता है। वह, निश्चित रूप से एक कॉलम में (आपके मामले में) छह मानों के साथ परिणाम देता है। अपवाद संदेश का यही अर्थ है:आप एक कॉलम जेनरेट करते हैं लेकिन तीन अपेक्षित थे।

तो, आपको केवल पहले आयाम को खोलने के लिए एक समाधान की आवश्यकता है। मैं प्रस्तुत समाधानों का उपयोग कर रहा हूँ यहां :

demo:db<>fiddle

लुकास फ़ंक्शन बनाना:

CREATE OR REPLACE FUNCTION unnest_2d_1d(anyarray)
  RETURNS SETOF anyarray AS
$func$
SELECT array_agg($1[d1][d2])
FROM   generate_subscripts($1,1) d1
    ,  generate_subscripts($1,2) d2
GROUP  BY d1
ORDER  BY d1
$func$  LANGUAGE sql IMMUTABLE;

यह केवल पहला आयाम खोल रहा है। तो आप इसे अपने unnest() के बजाय अपने फ़ंक्शन के भीतर उपयोग कर सकते हैं:

CREATE OR REPLACE function create_combinations_if_needed(p_combinations integer[][]) RETURNS boolean
LANGUAGE sql AS
$$
   INSERT INTO combinations (some_id1, some_id2, some_id3)
   SELECT unnest[1], unnest[2], unnest[3]
   FROM unnest_2d_1d(p_combinations) as unnest
   ON CONFLICT (some_id1, some_id2, some_id3)
   DO NOTHING
   RETURNING TRUE;
$$;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle से PostgreSQL:इसके साथ प्रारंभ/कनेक्ट करें

  2. Ansible PostgreSQL को प्यार करता है

  3. PostgreSQL में पाठ संपीड़न

  4. PGError:निष्क्रिय होने के बाद सर्वर से कोई कनेक्शन नहीं

  5. PostgreSQL में दो प्रकार की तालिका बनाएं