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

Mengapa aturan ini tidak mencegah pelanggaran kunci duplikat?

Aturan secara default tambahkan hal-hal ke tindakan saat ini :

Tetapi aturan BUKAN memungkinkan Anda untuk mengganti tindakan:

Jadi, saya rasa Anda ingin menentukan BUKAN :

CREATE OR REPLACE RULE ignore_duplicate_inserts AS
   ON INSERT TO mytable
   WHERE (EXISTS ( SELECT mytable.id
           FROM mytable
          WHERE mytable.id = new.id)) DO INSTEAD NOTHING;

Tanpa BUKAN, aturan Anda pada dasarnya mengatakan "lakukan INSERT dan kemudian lakukan apa-apa" ketika Anda ingin mengatakan "alih-alih INSERT, jangan lakukan apa-apa" dan, AFAIK, DO INSTEAD NOTHING akan melakukannya.

Saya bukan ahli dalam aturan PostgreSQL, tetapi saya pikir menambahkan "BUKAN" akan berhasil.

PERBARUI :Terima kasih kepada araqnid kami tahu itu :

Jadi aturan tidak akan bekerja dalam situasi ini. Namun, pemicu dipicu selama SALIN DARI sehingga Anda dapat menulis SEBELUM MASUKKAN pemicu yang akan mengembalikan NULL ketika mendeteksi baris duplikat:

Yang mengatakan, saya pikir Anda akan lebih baik dengan araqnid "muat semuanya ke dalam tabel sementara, bersihkan, dan salin ke tujuan akhir" akan menjadi solusi yang lebih masuk akal untuk operasi pemuatan massal seperti yang Anda miliki.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sistem Login/Otorisasi Sederhana menggunakan Dancer dan Postgres

  2. Webinar:Fitur Baru di Postgres 12 [Tindak lanjut]

  3. Cara mengurutkan hasil dari string_agg()

  4. postgresql:jalankan perintah SQL menggunakan psql di commandline

  5. Bagaimana cara menonaktifkan sementara pemicu di PostgreSQL?