PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Cách trả lại hàng ban đầu trong Postgres khi vi phạm một ràng buộc duy nhất

Điều này thực sự không thể thực hiện trong một truy vấn duy nhất, bạn sẽ cần sử dụng một hàm để kiểm tra hàng ban đầu, rằng đó chính xác là những gì bạn đang làm sau đó trong Python. Bạn có thể xem thêm thông tin trong tài liệu postgresql

Nếu bạn muốn thực hiện hành vi mong muốn trong postgresql thay vì Python, bạn có thể thực hiện một hàm pgplsql, bắt ngoại lệ và thực hiện SELECT tuyên bố (một số câu hỏi liên quan đến giải pháp này: this cái này )

Chỉnh sửa Đây có thể là giải pháp pgplsql thay thế:

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;

Sau đó, trong python, bạn có thể gọi hàm như sau:

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

Bạn có thể chấp nhận đây là một câu trả lời hợp lệ nếu nó hữu ích




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL tạo một cột mới với các giá trị được điều chỉnh trên các cột khác

  2. Cách tạo các câu lệnh chuẩn bị cho postgres động trong PHP

  3. Cách Cosh () hoạt động trong PostgreSQL

  4. Thay thế các ký tự bằng chuỗi nhiều ký tự

  5. Tìm kiếm chuỗi con trong PostgreSQL