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

Dapatkah INSERT [...] ON CONFLICT digunakan untuk pelanggaran kunci asing?

Ya, gabungkan baris input Anda ke tabel yang direferensikan, sehingga menghapus baris tanpa kecocokan pada kolom FK:

INSERT INTO entries(entry_id, referenced_id, name)
SELECT val.entry_id, val.referenced_id, val.name
FROM  (
  VALUES (1, 2, 'references two')
         -- more?
  ) val (entry_id, referenced_id, name)
JOIN   referenced USING (referenced_id)  -- drop rows without matching FK
ON     CONFLICT (entry_id) DO NOTHING;   -- drop rows with duplicate id

UPSERT itu sendiri (INSERT ... ON CONFLICT DO NOTHING ) hanya bereaksi terhadap pelanggaran unik. Panduan:

ON CONFLICT dapat digunakan untuk menentukan tindakan alternatif untuk meningkatkan kendala unik atau kesalahan pelanggaran batasan pengecualian. (Lihat Klausul TENTANG KONFLIK di bawah.)

Sejak VALUES ekspresi sekarang tidak dilampirkan ke INSERT secara langsung, tipe kolom tidak diturunkan dari tabel target. Anda mungkin perlu melempar masukan nilai secara eksplisit saat beroperasi dengan tipe non-dasar. Lihat:

  • Mentransmisikan jenis NULL saat memperbarui beberapa baris



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara menggabungkan kolom dalam SELECT Postgres?

  2. Menyebarkan Django + Python 3 + PostgreSQL ke AWS Elastic Beanstalk

  3. Menggunakan Kursor untuk paging di PostgreSQL

  4. Gabungkan kueri dengan hanya kolom yang memiliki semua nilai dalam klausa `dalam`

  5. psql:FATAL:Otentikasi identitas gagal untuk postgres pengguna