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

एकाधिक स्तंभों के लिए चयन और सम्मिलित करें के बीच दौड़ की स्थिति

काम में रिंच है <स्ट्राइक>SELECT f_insert_tag(tag_p_id, _tag) के बजाय

SELECT * FROM f_insert_tag(tag_p_id, _tag)

पोस्टग्रेज 9.4 के लिए

CREATE FUNCTION f_insert_tag(_tag_id int, _tag text, OUT _tag_id_ int, OUT _tag_ text) 
AS
$func$
 BEGIN
   INSERT INTO t(tag_id, tag)
   VALUES (_tag_id, _tag)
   RETURNING t.tag_id, t.tag
   INTO  _tag_id_, _tag_;

   EXCEPTION WHEN UNIQUE_VIOLATION THEN
      -- catch exception, return NULL
 END
$func$  LANGUAGE plpgsql;


CREATE FUNCTION f_tag_id(_tag_id int, _tag text, OUT _tag_id_ int, OUT _tag_ text) AS
$func$
BEGIN
LOOP
   SELECT t.tag_id, t.tag
   FROM   t
   WHERE  t.tag = _tag

   UNION ALL
   SELECT *                                              -- !!!
   FROM   f_insert_tag(_tag_id, _tag)
   LIMIT  1

   INTO _tag_id_, _tag_;

   EXIT WHEN _tag_id_ IS NOT NULL;  -- else keep looping
END LOOP;
END
$func$ LANGUAGE plpgsql;

db<>fiddle यहां

पोस्टग्रेज 9.5 या बाद के संस्करण के लिए:

CREATE FUNCTION f_tag_id(_tag_id int, _tag text, OUT _tag_id_ int, OUT _tag_ text) AS
$func$
BEGIN
LOOP
   SELECT t.tag_id, t.tag
   FROM   t
   WHERE  t.tag = _tag
   INTO   _tag_id_, _tag_;

   EXIT WHEN FOUND;

   INSERT INTO t (tag_id, tag)
   VALUES (_tag_id, _tag)
   ON     CONFLICT (tag) DO NOTHING
   RETURNING t.tag_id, t.tag
   INTO   _tag_id_, _tag_;

   EXIT WHEN FOUND;
END LOOP;
END
$func$  LANGUAGE plpgsql;

db<>fiddle यहां

मूल बातें यहां:




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. रेल 4.2.0 में सरल पूर्णांक असाइनमेंट के लिए रेंज एरर जिसे सत्यापन द्वारा पकड़ा जाना चाहिए

  2. समय क्षेत्र के बिना स्ट्रिंग को टाइमस्टैम्प में कैसे बदलें

  3. नेस्टेड वस्तु पर jsonb क्वेरी पोस्टग्रेज करता है

  4. Django मेकमाइग्रेशन ऐप में कोई बदलाव नहीं पाया गया

  5. एक रिकॉर्ड क्लोन करें, फिर आगे के संचालन के लिए इसकी ऑटो इंक्रीमेंट आईडी का उपयोग करें