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

कैसे एक अद्वितीय बाधा का उल्लंघन करने पर Postgres में मूल पंक्ति वापस करने के लिए?

यह वास्तव में एक ही प्रश्न में करना संभव नहीं है, आपको मूल पंक्ति की जांच करने के लिए एक फ़ंक्शन का उपयोग करने की आवश्यकता होगी, कि यह वही है जो आप पाइथन में कर रहे हैं। आप postgresql दस्तावेज़ में अधिक जानकारी देख सकते हैं

यदि आप पाइथन के बजाय पोस्टग्रेस्क्ल में इच्छा व्यवहार करना चाहते हैं, तो आप एक pgplsql फ़ंक्शन कर सकते हैं, अपवाद पकड़ सकते हैं और SELECT कर सकते हैं कथन (इस समाधान से संबंधित कुछ प्रश्न:यह और यह )

संपादित करें यह वैकल्पिक pgplsql समाधान हो सकता है:

CREATE OR REPLACE FUNCTION udf_insert_row(
    param_email varchar)
  RETURNS integer AS
$BODY$

DECLARE
    result integer;

BEGIN
  /*
  -- To Test:
    SELECT udf_insert_row('[email protected]'); will return 1
    SELECT udf_insert_row('[email protected]'); will return 2
    SELECT udf_insert_row('[email protected]'); will return 1
  */

  BEGIN
      INSERT INTO your_table(
        email
        ) 
      VALUES (
        param_email
      ) RETURNING id INTO result;
  EXCEPTION WHEN unique_violation THEN
      SELECT 
        id INTO STRICT result
      FROM 
        your_table 
      WHERE 
        email = param_email;
  END;  

    RETURN result;

END;

$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION udf_insert_row(varchar)
  OWNER TO postgres;

फिर पायथन में, आप फ़ंक्शन को इस तरह कॉल कर सकते हैं:

pgcur.execute("BEGIN")
args = ["[email protected]"]
pgcur.callproc("udf_insert_row",args)
result = pgcur.fetchone()
pgcur.execute("COMMIT")

यदि यह उपयोगी है तो आप इसे एक मान्य उत्तर के रूप में स्वीकार कर सकते हैं




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Django में सबक्वायरी का उपयोग कैसे करें?

  2. पीडीओ के साथ कनेक्ट टाइमआउट सेट करना

  3. PostgreSQL वापसी परिणाम JSON सरणी के रूप में सेट?

  4. Postgresql में डुप्लिकेट रिकॉर्ड

  5. एकल SQL कथन का उपयोग करके एकाधिक अधिकतम () मानों का चयन करना