web-dev-qa-db-fra.com

commande psql invalide\N pendant la restauration de SQL

J'essaie de restaurer mon fichier de vidage, mais cela a provoqué une erreur:

psql:psit.sql:27485: invalid command \N

Y a-t-il une solution? J'ai cherché, mais je n'ai pas eu de réponse claire.

100
Vivek Vikranth

Postgres utilise "\ N" comme symbole de substitution pour la valeur NULL. Mais toutes les commandes psql commencent par le symbole "\". Vous pouvez donc obtenir ces messages lorsque la commande copy probablement échoue, mais que le chargement de dump se poursuit. Ce message est seulement une fausse alarme. Vous devez rechercher dans une ligne auparavant la raison pour laquelle l'instruction COPY échoue.

Il est possible de passer de psql en mode "stop on first error" et de rechercher une erreur:

psql -v ON_ERROR_STOP=1
150
Pavel Stehule

Je vais le même message d'erreur lorsque vous essayez de restaurer à partir d'un cliché binaire. J'ai simplement utilisé pg_restore pour restaurer mon dump et éviter complètement les erreurs \N, par exemple.

pg_restore -c -F t -f your.backup.tar

Explication des commutateurs:

-f, --file=FILENAME output file name -F, --format=c|d|t backup file format (should be automatic) -c, --clean clean (drop) database objects before recreating

28
nottinhill

Je sais que c’est un vieux billet mais j’ai trouvé une autre solution: postgis n’était pas installé sur ma nouvelle version, ce qui me causait la même erreur sur pg_dump

6
So4ne

J'ai aussi rencontré cette erreur par le passé. Pavel est correct, c'est généralement le signe que quelque chose dans le script créé par pg_restore échoue. En raison de toutes les erreurs "/ N", vous ne voyez pas le vrai problème tout en haut de la sortie. Je suggère:

  1. insertion d'un seul petit tableau (par exemple, pg_restore --table=orders full_database.dump > orders.dump
  2. si vous n'en avez pas un petit, supprimez plusieurs enregistrements du script de restauration - je viens de m'assurer que ./ était la dernière ligne à être chargée (par exemple, ouvrez orders.dump et supprimez un ensemble d'enregistrements)
  3. regardez la sortie standard, et une fois que vous avez trouvé le problème, vous pouvez toujours supprimer la table et recharger

Dans mon cas, l'extension "hstore" n'était pas encore installée, le script échouait donc tout en haut. J'ai installé hstore sur la base de données de destination et j'étais de retour dans les affaires.

5
oraserrata

Vous pouvez générer votre vidage à l'aide d'instructions INSERTS, avec le paramètre --inserts.

3

Installez postgresql- (votre version) -postgis-scripts

3
Geets

La même chose m'est arrivée aujourd'hui. J'ai traité le problème en effectuant un dumping avec la commande --inserts. 

Ce que je fais c'est: 

1) pg_dump avec inserts:

pg_dump dbname --username=usernamehere --password --no-owner --no-privileges --data-only --inserts -t 'schema."Table"' > filename.sql

2) psql (restaurer votre fichier vidé)

psql "dbname=dbnamehere options=--search_path=schemaname" --Host hostnamehere --username=usernamehere -f filename.sql >& outputfile.txt

Note-1) Assurez-vous que l'ajout du fichier de sortie augmentera la vitesse d'importation.

Note-2) N'oubliez pas de créer une table avec exactement le même nom et les mêmes colonnes avant d'importer avec psql. 

3
Ekrem Gurdal

Dans mon expérience récente, il est possible d’obtenir cette erreur lorsque le vrai problème n’a rien à voir avec les caractères d’échappement ou les sauts de ligne. Dans mon cas, j’avais créé un dump à partir de la base de données A avec 
pg_dump -a -t table_name > dump.sql
et essayait de le restaurer à la base de données B avec
psql < dump.sql (après avoir mis à jour les envs vars appropriés, bien sûr)
Ce que j’ai finalement compris, c’est que le dump, bien qu’il s’agisse de data-only (l’option -a, afin que la structure de la table ne fasse pas explicitement partie du dump), était spécifique au schéma. Cela signifiait que sans modifier manuellement le cliché, je ne pouvais pas utiliser un cliché généré à partir de schema1.table_name pour peupler schema2.table_name. Modifier manuellement le vidage était facile, le schéma est spécifié dans les 15 premières lignes ou plus.

1
Tyrone Hinderson

Pour moi, en utilisant postgreSQL 10 sur SUSE 12, j’ai résolu l’erreur invalid command \N en augmentant l’espace disque. Le manque d'espace disque était à l'origine de l'erreur. Vous pouvez savoir si vous manquez d'espace disque si vous examinez le système de fichiers dans lequel vos données se trouvent dans la sortie df -h. Si le système de fichiers/montage est utilisé à 100%, après avoir fait quelque chose comme psql -f db.out postgres (voir https://www.postgresql.org/docs/current/static/app-pg-dumpall.html ), vous devrez probablement augmenter l'espace disque disponible.

0
mountainclimber

La plupart du temps, la solution consiste à installer le package postgres-contrib.

0
Farsheed