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

PostgreSQL - Kembalikan konten baris saat UPDATE gagal

Salah satu opsi untuk tetap menggunakan pembaruan dan masih mengembalikan baris yang berkonflik adalah membuat fungsi yang melakukan pemeriksaan ini sebelum Anda melakukan pembaruan. Jika kunci utama sudah ada, ia mengembalikan baris yang bertentangan, dan Jika tidak, baris akan diperbarui. Contoh dari fungsi tersebut dapat berupa:

CREATE OR REPLACE FUNCTION my_func(cont TEXT, lang INT, idp TEXT) 
RETURNS SETOF sentence AS $$
DECLARE j RECORD;
BEGIN
  SELECT * FROM sentence WHERE content = cont AND 
                               language_id = lang INTO j;
  IF j IS NOT NULL THEN 
    RETURN NEXT j;
  ELSE
    RETURN QUERY UPDATE sentence SET content = cont, language_id= lang 
                 WHERE id = idp RETURNING *;
  END IF;
  EXCEPTION WHEN SQLSTATE '23505' THEN 
  RETURN QUERY SELECT * FROM sentence WHERE content = cont AND
                                            language_id= lang;
END$$ LANGUAGE plpgsql;

SELECT my_func('This is a sentence',834,'0538f24a-2046-4da6-933d-409aa7b7c597');

EDIT :Jika tidak ada konflik dan Anda masih menginginkan RETURNING * , cukup tambahkan RETURN QUERY ke UPDATE pernyataan:

...    
RETURN QUERY 
UPDATE sentence SET content = cont, language_id= lang WHERE id = idp 
RETURNING *;
...



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tambahkan Hari ke Tanggal di PostgreSQL

  2. Pesan string varchar sebagai numerik

  3. daftar tipe Postgres ENUM

  4. menggunakan logika kondisional :periksa apakah ada catatan; jika ya, perbarui, jika tidak, buatlah

  5. Bagaimana cara mengembalikan dataframe.to_sql dengan python di SQLAlchemy?