PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Cara mengembalikan baris asli di Postgres setelah melanggar batasan unik

Ini sebenarnya tidak mungkin dilakukan dalam satu kueri, Anda harus menggunakan fungsi untuk memeriksa baris asli, bahwa itulah yang Anda lakukan saat itu dengan Python. Anda dapat melihat informasi lebih lanjut di dokumentasi postgresql

Jika Anda ingin melakukan perilaku keinginan di postgresql alih-alih Python, Anda dapat melakukan fungsi pgplsql, menangkap pengecualian dan melakukan SELECT pernyataan (beberapa pertanyaan terkait dengan solusi ini:ini dan ini )

Sunting Ini bisa menjadi solusi pgplsql alternatif:

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;

Kemudian di python, Anda dapat memanggil fungsi seperti ini:

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

Anda dapat menerima ini sebagai jawaban yang valid jika bermanfaat




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. kueri rekursif postgres pada tabel yang sama

  2. Bagaimana Cara Membuat Objek Dalam Tampilan Django?

  3. PHP Terhubung ke PostgreSQL menggunakan ssh2_tunnel

  4. Cerminkan tabel tertentu di postgreSQL

  5. postgres menghasilkan array menggunakan jendela slide