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.
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
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
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
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:
pg_restore
--table=orders full_database.dump > orders.dump
) orders.dump
et supprimez un ensemble d'enregistrements)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.
Vous pouvez générer votre vidage à l'aide d'instructions INSERTS, avec le paramètre --inserts.
Installez postgresql- (votre version) -postgis-scripts
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.
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 avecpsql < 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.
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.
La plupart du temps, la solution consiste à installer le package postgres-contrib
.