2017-03-22 2 views
1

Je copie un lot de fichiers CSV sur une table, chacun étant> 8M lignes, ~ 900MB. Les premiers fichiers twelves copient très bien mais le suivant me donne cette erreur.État Postgres SQL: 54000 lors de la copie de données dans la table

Le seul résultat pertinent de Google est une ligne plutôt inutile de la documentation officielle:

54000 program_limit_exceeded 

Quelle est cette « limite de programme » et comment puis-je changer?

+1

avez-vous vérifié les journaux de postgres pour quelque chose de plus utile? C'est vrai, il n'y a pas beaucoup de documentation sur cette erreur .. –

+2

êtes-vous capable de charger le fichier problématique tout seul, sans charger les autres en premier? –

+0

Ah, pour une raison quelconque, pgAdmin ne me donnait pas le texte d'erreur complet. Il semble que ce soit un problème avec le fichier, apparemment une double citation manquante quelque part transforme la moitié des données en une seule valeur. Merci. – zipzapboing

Répondre

0

J'ai reçu cette erreur à cause d'un autre gros fichier avec une citation manquante. Publier ma solution ici au cas où cela aiderait n'importe qui, bien que je suppose qu'il y a des situations plus générales qui peuvent mener à cette erreur.

En R:

library(data.table) 
library(stringi) 

df<-fread("datafile.csv", sep = "@") 
names(df) <- "col1" 

df[,count:=stri_count(col1, fixed = '"')] 
which(df$count%%2!=0) 

L'idée est de trouver un symbole qui ne se produit jamais dans votre fichier (@ dans ce cas) et l'utiliser comme séparateur de sorte que chaque ligne est lue comme une seule colonne. Ensuite, comptez le nombre de citations par ligne et imprimez tous les numéros de lignes qui ont un nombre impair de citations. Vous pouvez ensuite appliquer le correctif nécessaire.