Estoy tratando de restaurar mi archivo de volcado, pero causó un error:
psql:psit.sql:27485: invalid command \N
¿Hay alguna solución? Busqué, pero no obtuve una respuesta clara.
Estoy tratando de restaurar mi archivo de volcado, pero causó un error:
psql:psit.sql:27485: invalid command \N
¿Hay alguna solución? Busqué, pero no obtuve una respuesta clara.
Respuestas:
Postgres usa "\ N" como símbolo sustituto del valor NULL. Pero todos los comandos psql comienzan con el símbolo de barra invertida "\". Por lo tanto, puede recibir estos mensajes, cuando probablemente la instrucción copy falla, pero continúa la carga del volcado. Este mensaje es solo falsa alarma. Debe buscar una línea antes por la razón por la cual falla la declaración COPY.
Es posible cambiar psql al modo "detener en el primer error" y encontrar el error:
psql -v ON_ERROR_STOP=1
create table...
falla en el inicio, pero la carga continúa.
(pg_restore ... | psql ...) 2>&1 | less
Voy al mismo mensaje de error cuando intento restaurar desde un volcado binario. Simplemente solía pg_restore
restaurar mi volcado y evitar completamente los \N
errores, p. Ej.
pg_restore -c -F t -f your.backup.tar
Explicación de los interruptores:
-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
También me he encontrado con este error en el pasado. Pavel es correcto, generalmente es una señal de que algo en el script creado por pg_restore está fallando. Debido a todos los errores "/ N", no está viendo el problema real en la parte superior de la salida. Yo sugiero:
pg_restore
--table=orders full_database.dump > orders.dump
)orders.dump
y eliminar un montón de registros)En mi caso, todavía no tenía instalada la extensión "hstore", por lo que el script fallaba en la parte superior. Instalé hstore en la base de datos de destino y volví a trabajar.
Puede generar su volcado utilizando sentencias INSERTS, con el parámetro --inserts.
Hoy me pasó lo mismo. Manejé el problema volcando con el comando --inserts.
Lo que hago es:
1) pg_dump con insertos:
pg_dump dbname --username=usernamehere --password --no-owner --no-privileges --data-only --inserts -t 'schema."Table"' > filename.sql
2) psql (restaure su archivo volcado)
psql "dbname=dbnamehere options=--search_path=schemaname" --host hostnamehere --username=usernamehere -f filename.sql >& outputfile.txt
Nota-1) Asegúrese de que agregar el archivo de salida aumentará la velocidad de importación.
Nota-2) No olvide crear una tabla con exactamente el mismo nombre y columnas antes de importar con psql.
En mi experiencia reciente, es posible obtener este error cuando el problema real no tiene nada que ver con caracteres de escape o líneas nuevas. En mi caso, había creado un volcado de la base de datos A con
pg_dump -a -t table_name > dump.sql
e intentaba restaurarlo a la base de datos B con
psql < dump.sql
(después de actualizar los entornos adecuados, por supuesto)
Lo que finalmente descubrí fue que el volcado, aunque era data-only
(la -a
opción , para que la estructura de la tabla no sea parte explícita del volcado), era específica del esquema. Eso significaba que sin modificar manualmente el volcado, no podría usar un volcado generado schema1.table_name
para rellenar schema2.table_name
. Modificar manualmente el volcado fue fácil, el esquema se especifica en las primeras 15 líneas más o menos.
Para mí, usando postgreSQL 10 en SUSE 12, resolví el invalid command \N
error aumentando el espacio en disco. La falta de espacio en disco me estaba causando el error. Puede ver si no tiene espacio en el disco si observa el sistema de archivos al que irán sus datos en la df -h
salida. Si el sistema de archivos / montaje se usa al 100%, después de hacer algo como psql -f db.out postgres
(ver https://www.postgresql.org/docs/current/static/app-pg-dumpall.html ) probablemente necesite aumentar el espacio disponible en el disco .
Tuve el mismo problema, creé una nueva base de datos y invalid command \N
comencé a restaurar con psql. Lo resolví estableciendo el mismo espacio de tabla con la base de datos anterior.
Por ejemplo, la copia de seguridad de la base de datos anterior tenía un espacio de tabla "pg_default", definí el mismo espacio de tabla para la nueva base de datos, ¡y el error anterior desapareció!
Seguí todos estos ejemplos y todos fallaron con el error del que estamos hablando:
Copie una tabla de una base de datos a otra en Postgres
Lo que funcionó fue la sintaxis con -C , mira aquí:
pg_dump -C -t tableName "postgres://$User:$Password@$Host:$Port/$DBName" | psql "postgres://$User:$Password@$Host:$Port/$DBName"
Además, si hay diferentes esquemas entre los dos, creo que es necesario alterar el esquema de un dB para que coincida con los otros para que funcionen las copias de la tabla, por ejemplo:
DROP SCHEMA public;
ALTER SCHEMA originalDBSchema RENAME TO public;