Psql invalid command\N при восстановлении sql

Я пытаюсь восстановить файл дампа, но это вызвало ошибку:

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

Есть ли решение? Я искал, но я не получил четкого ответа.

Ответ 1

Postgres использует "\n" в качестве символа замены для значения NULL. Но все команды psql начинаются с символа "\" с обратной косой чертой. Таким образом, вы можете получить это сообщение, если, вероятно, копия не выполняется, но загрузка дампа продолжается. Это сообщение является только ложным сигналом. Вы должны искать строки перед тем, почему причина утверждения COPY не работает.

Можно переключить psql на режим "stop on first error" и найти ошибку:

psql -v ON_ERROR_STOP=1

Ответ 2

При попытке восстановления из двоичного дампа появляется одно и то же сообщение об ошибке. Я просто использовал 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

Ответ 3

В прошлом я столкнулся с этой ошибкой. Павел прав, обычно это знак того, что что-то в script, созданное pg_restore, терпит неудачу. Из-за всех ошибок "/N" вы не видите реальной проблемы на самой вершине вывода. Я предлагаю:

  • вставка одной маленькой таблицы (например, pg_restore --table=orders full_database.dump > orders.dump)
  • если у вас нет небольшой, а затем удалите кучу записей из восстановления script - я просто убедился, что./была последней загружаемой строкой (например, откройте orders.dump и удалите куча записей).
  • Посмотрите стандартный вывод, и как только вы найдете проблему, вы всегда можете отказаться таблица и перезагрузка

В моем случае у меня не было установленного расширения "hstore", поэтому script терпел неудачу на самом верху. Я установил hstore в базу данных назначения, и я вернулся в бизнес.

Ответ 4

Вы можете создать свой дамп, используя инструкции INSERTS, с параметром --inserts.

Ответ 5

Я знаю, что это старый пост, но я столкнулся с другим решением: postgis не был установлен в моей новой версии, что вызвало у меня такую ​​же ошибку на pg_dump

Ответ 6

В моем недавнем опыте можно получить эту ошибку, когда реальная проблема не имеет ничего общего с escape-символами или символами новой строки. В моем случае я создал дамп из базы данных A с
pg_dump -a -t table_name > dump.sql
и пытался восстановить его в базу данных B с помощью
psql < dump.sql (после обновления правильных env vars, конечно)
Я наконец понял, что дамп, хотя это был data-only (параметр -a, так что структура таблицы не является явно частью дампа), была специфичной для схемы. Это означало, что без ручной модификации дампа я не мог использовать дамп, сгенерированный из schema1.table_name, для заполнения schema2.table_name. Ручная модификация дампа была простой, схема указана в первых 15 строках или около того.

Ответ 7

Установите postgresql- (ваша версия) -postgis-scripts

Ответ 8

В большинстве случаев решение заключается в установке пакета postgres-contrib.