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