Vous ne pouvez pas ignorer les erreurs sans ignorer toute la commande jusqu'à et y compris Postgres 14. Il n'existe actuellement aucune gestion des erreurs plus sophistiquée.
\copy
est juste un wrapper autour de SQL COPY
qui canalise les résultats via psql. Le manuel pour COPY
:
COPY
arrête l'opération à la première erreur. Cela ne devrait pas poser de problèmes en cas deCOPY TO
, mais la table cible aura déjà reçu les lignes précédentes dans unCOPY FROM
. Ces lignes ne seront ni visibles ni accessibles, mais elles occupent toujours de l'espace disque. Cela peut équivaloir à une quantité considérable d'espace disque gaspillé si l'échec s'est produit bien après une opération de copie importante. Vous voudrez peut-être invoquerVACUUM
pour récupérer l'espace perdu.
Bold emphase mienne. Et :
COPY FROM
déclenchera une erreur si une ligne du fichier d'entrée contient plus ou moins de colonnes que prévu.
COPY
est un moyen extrêmement rapide d'importer/exporter des données. Des contrôles sophistiqués et une gestion des erreurs le ralentiraient.
Il y a eu une tentative d'ajout de la journalisation des erreurs à COPY
dans Postgres 9.0 mais il n'a jamais été commité.
Solution
Corrigez plutôt votre fichier d'entrée.
Si vous avez une ou plusieurs colonnes supplémentaires dans votre fichier d'entrée et que le fichier est par ailleurs cohérent , vous pouvez ajouter des colonnes factices à votre table isa
et déposez-les ensuite. Ou (plus propre avec les tables de production) importez dans une table intermédiaire temporaire et INSERT
colonnes sélectionnées (ou expressions) à votre table cible isa
à partir de là.
Réponses associées avec des instructions détaillées :
- Comment mettre à jour les lignes sélectionnées avec les valeurs d'un fichier CSV dans Postgres ?
- Commande COPY :copier uniquement des colonnes spécifiques à partir de csv