PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment ignorer les erreurs avec la méta-commande psql \copy

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 de COPY TO , mais la table cible aura déjà reçu les lignes précédentes dans un COPY 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 invoquer VACUUM 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