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 CONFLICTdapat 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