используя psql неверная команда П в то время как восстановление SQL
Я пытаюсь восстановить мой файл дампа, но это вызвало ошибку:
psql:psit.sql:27485: invalid command N
есть ли решение? Я искал, но не получил четкого ответа.
10 ответов:
Postgres использует "\N " в качестве символа замены нулевого значения. Но все команды psql начинаются с символа обратной косой черты"\". Таким образом, вы можете получить эти сообщения, когда, вероятно, оператор копирования не работает, но загрузка дампа продолжается. Это сообщение-только ложная тревога. Вы должны искать строки, прежде чем причина, почему оператор копирования не удается.
можно переключить psql в режим" stop on first error " и найти ошибку:
psql -v ON_ERROR_STOP=1
Я иду то же сообщение об ошибке при попытке восстановления из двоичного дампа. Я просто использовал
pg_restore
восстановить мой дамп и полностью избежать\N
ошибки, например,
pg_restore -c -F t -f your.backup.tar
объяснение переключатели:
-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
Я знаю, что это старый пост, но я наткнулся на другое решение : postgis не был установлен на моей новой версии, что вызвало у меня ту же ошибку на pg_dump
я столкнулся с этой ошибкой в прошлом, а также. Павел прав, это обычно признак того, что что-то в скрипте, созданном pg_restore, терпит неудачу. Из-за всех ошибок" /N " вы не видите реальной проблемы в самой верхней части вывода. Я предлагаю:
- вставка одной небольшой таблицы (например,
pg_restore --table=orders full_database.dump > orders.dump
)- если у вас нет маленького, то удалите кучу записей из сценария восстановления - я просто убедился ./ была последняя строка для загрузки (например, open
orders.dump
и удалить кучу записей)- смотреть стандартный выход, и как только вы найдете проблему, вы всегда можете упасть стол и перезагрузить
в моем случае у меня еще не было расширения" hstore", поэтому скрипт не работал на самом верху. Я установил hstore в целевой базе данных, и я вернулся в бизнес.
в моем недавнем опыте можно получить эту ошибку, когда реальная проблема не имеет ничего общего с escape-символами или новыми строками. В моем случае, я создал дамп базы данных с
pg_dump -a -t table_name > dump.sql
и пытался восстановить его в базу данных B с помощьюpsql < dump.sql
(после обновления соответствующих env vars, конечно)
То, что я наконец понял, было то, что свалка, хотя это былоdata-only
(the-a
опция, так что структура таблицы явно не является частью дампа), была специфичной для схемы. Это означало, что без ручного изменения дампа я не мог использовать дамп, созданный изschema1.table_name
заполнитьschema2.table_name
. Вручную изменить дамп было легко, схема указана в первых 15 строках или около того.
для меня, используя postgreSQL 10 на SUSE 12, я разрешил
invalid command \N
ошибка при увеличении дискового пространства. Нехватка места на диске была причиной ошибки для меня. Вы можете сказать, если вы находитесь вне дискового пространства, если вы посмотрите на файловую систему ваши данные собираются вdf -h
выход. Если файловая система / монтирование используется на 100%, после выполнения чего-то вродеpsql -f db.out postgres
(см. https://www.postgresql.org/docs/current/static/app-pg-dumpall.html) вероятно, вам нужно увеличить доступное дисковое пространство.
то же самое произошло со мной сегодня. Я обработал проблему путем сброса с помощью команды --inserts.
что я делаю:
1) с помощью pg_dump вставки:
pg_dump dbname --username=usernamehere --password --no-owner --no-privileges --data-only --inserts -t 'schema."Table"' > filename.sql
2) psql (восстановить сброшенный файл)
psql "dbname=dbnamehere options=--search_path=schemaname" --host hostnamehere --username=usernamehere -f filename.sql >& outputfile.txt
Примечание-1) Убедитесь, что добавление outputfile увеличит скорость импорта.
примечание-2) Не забудьте создать таблицу с точно таким же именем и столбцами перед импортом с psql.