Anda tidak dapat melewati kesalahan tanpa melewatkan seluruh perintah hingga dan termasuk Postgres 14. Saat ini tidak ada penanganan kesalahan yang lebih canggih.
\copy
hanyalah pembungkus SQL COPY
yang menyalurkan hasil melalui psql. Manual untuk COPY
:
COPY
menghentikan operasi pada kesalahan pertama. Ini seharusnya tidak menyebabkan masalah jika terjadiCOPY TO
, tetapi tabel target akan sudah menerima baris sebelumnya dalamCOPY FROM
. Baris ini tidak akan terlihat atau dapat diakses, tetapi masih menempati ruang disk. Ini mungkin merupakan jumlah yang cukup besar dari ruang disk yang terbuang jika kegagalan terjadi dengan baik pada operasi penyalinan yang besar. Anda mungkin ingin mengaktifkanVACUUM
untuk memulihkan ruang yang terbuang.
Penekanan saya yang berani. Dan:
COPY FROM
akan memunculkan kesalahan jika ada baris file input yang berisi kolom lebih banyak atau lebih sedikit dari yang diharapkan.
COPY
adalah cara yang sangat cepat untuk mengimpor / mengekspor data. Pemeriksaan yang canggih dan penanganan kesalahan akan memperlambatnya.
Ada upaya untuk menambahkan logging kesalahan ke COPY
di Postgres 9.0 tetapi tidak pernah dilakukan.
Solusi
Perbaiki file masukan Anda.
Jika Anda memiliki satu atau lebih kolom tambahan di file masukan dan file sebaliknya konsisten , Anda dapat menambahkan kolom dummy ke tabel Anda isa
dan jatuhkan itu setelahnya. Atau (pembersih dengan tabel produksi) impor ke tabel staging sementara dan INSERT
kolom (atau ekspresi) yang dipilih ke tabel target Anda isa
dari sana.
Jawaban terkait dengan petunjuk terperinci:
- Bagaimana cara memperbarui baris yang dipilih dengan nilai dari file CSV di Postgres?
- Perintah SALIN:salin hanya kolom tertentu dari csv