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

Cara melakukan upser dengan benar di postgres 9.5

ON CONFLICT konstruksi membutuhkan UNIQUE kendala untuk bekerja. Dari dokumentasi di INSERT .. ON CONFLICT klausa :

Sekarang, pertanyaannya tidak terlalu jelas tetapi Anda mungkin memerlukan UNIQUE batasan pada 2 kolom yang digabungkan:(category_id, gallery_id) .

ALTER TABLE category_gallery
    ADD CONSTRAINT category_gallery_uq
    UNIQUE (category_id, gallery_id) ;

Jika baris yang akan disisipkan cocok dengan keduanya nilai dengan baris yang sudah ada di tabel, lalu alih-alih INSERT , lakukan UPDATE :

INSERT INTO category_gallery (
  category_id, gallery_id, create_date, create_by_user_id
  ) VALUES ($1, $2, $3, $4)
  ON CONFLICT (category_id, gallery_id)
  DO UPDATE SET
    last_modified_date = EXCLUDED.create_date,
    last_modified_by_user_id = EXCLUDED.create_by_user_id ;

Anda dapat menggunakan salah satu kolom dari batasan UNIQUE:

  ON CONFLICT (category_id, gallery_id) 

atau nama kendala:

  ON CONFLICT ON CONSTRAINT category_gallery_uq  


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sumber Daya Pembelajaran &Pelatihan Teratas PostgreSQL

  2. Batasan nama kolom tabel Postgres?

  3. Gabungan dalam &Gabungan Luar; apakah urutan tabel dari yang penting?

  4. Menggunakan regex di WHERE di Postgres

  5. Menggunakan sumber JDBC Postgresql dengan Apache Spark di EMR