2017-02-05 6 views
0

Я обновляю Postgres с древних 7.4 до 9.4.1 и вижу некоторые ошибки.Обновление с Postgres 7.4 до 9.4.1

На старой машине, я сделал:

pg_dumpall | gzip > db_pg_bu.gz 

На новой машине я сделал:

gunzip -c db_pg_bu.gz | psql 

При восстановлении я получил целый ряд ошибок, которые я не понимаю, и не знаю важность. Я не администратор базы данных, просто скромный разработчик, поэтому, если кто-то может помочь мне понять, что мне нужно сделать, чтобы выполнить эту миграцию, я был бы признателен.

Вот ошибки:

ERROR: cannot delete from view "pg_shadow" 
DETAIL: Views that do not select from a single table or view are not automatically updatable. 
HINT: To enable deleting from the view, provide an INSTEAD OF DELETE trigger or an unconditional ON DELETE DO INSTEAD rule. 

Я также получил около 15 из них:

NOTICE: SYSID can no longer be specified 

И это, хотя это выглядит безвредны, так как я видел plpgsql по умолчанию устанавливается с указанием в версии 9.2 :

ERROR: could not access file "/usr/lib/postgresql/lib/plpgsql.so": No such file or directory 
SET 
NOTICE: using pg_pltemplate information instead of CREATE LANGUAGE parameters 
ERROR: language "plpgsql" already exists 

Большая проблема заключается в том, что, поскольку он восстанавливает базы данных, для каждого ne я вижу нечто hing вот так:

COMMENT 
You are now connected to database "landrush" as user "postgres". 
SET 
ERROR: could not access file "/usr/lib/postgresql/lib/plpgsql.so": No such file or directory 
+0

Я уверен, что большинство из них могут быть исправлены с помощью Google. [проблема plpgsql] (http://stackoverflow.com/questions/8680870/notice-using-pg-pltemplate-information-instead-of-create-language-parameters), [WITH SYSID] (https: //www.postgresql .org/message-id/016201c60649 $ c6254b70 $ 0264a8c0 @ demolish1) удален и может потребовать изменения кода для его запуска и запуска. В зависимости от вашего опыта работы с PostgreSQL, возможно, стоит связаться с вашим местным администратором баз данных или задать отдельные и как можно более конкретные вопросы (например, предоставление MVCE и т. Д.). – tambre

+0

@tambre мой код не использует SYSID. Это сообщение об ошибке возникает до того, как psql подключается к любой базе данных. Так кажется, что какая-то системная вещь. –

ответ

1

Существует в основном два пути. Оба трудны для неопытных. (и, возможно, даже для опытных)

  • выполнить ступенчатую миграцию, используя несколько промежуточных версий (которые, вероятно, придется скомпилировать из источника). Между версиями вам нужно будет сделать pg_dump -> pg_restore (или просто psql < dumpfile, как в вопросе). Возможный путь первого прыжка может быть 7.4 -> 8.3, но, возможно, потребуется дополнительный прыжок.
  • Редактировать (несжатый) dumpfile: удалить (или закомментировать) все, что не понравится новой версии. Это будет итеративный процесс, и он предполагает, что ваш дамп вписывается в ваш редактор. (и что вы знаете, что делаете). Вам может понадобиться redump, отделяя схемы и данных (параметры --schema только и --data только, я даже не знаю, если бы они были доступны в PG-7.4)

BTW: рекомендуется использовать pg_dump из более новой версии (той, которую вы будете импортировать). Вам нужно указать хост-источник с помощью флага -h. Новая (целевая) версия знает о том, что нужно новой версии, и попытается адаптироваться (до определенного момента вам все равно нужно использовать более одного шага). Я также откажусь работать, если он не сможет создать полезную дамп. (В этом случае вы должны будете сделать меньшие шаги ...)

Extra:

  • если результат вашей не удалось преобразования достаточно полно, и если вы заинтересованы только в основной данных, вы могли бы просто остановиться здесь и, возможно, немного польский.
  • NOTICE: using pg_pltemplate information instead of CREATE LANGUAGE parameters Я не знаю, что это. Возможно, что дополнительные ядра, такие как plpgsql, были добавлены в базовые dbms.
  • ERROR: language "plpgsql" already exists: Возможно, вы проигнорируете эту ошибку. - >> прокомментируйте оскорбительные строки.
  • DETAIL: Views that do not select from a single table or view are not automatically updatable. Это означает, что система перезаписи RUL Postgres используется в старой БД. Это потребует серьезной работы, чтобы заставить ее работать снова.
+1

Возможно, стоит добавить к этому подсказку страницу руководства pg_dump, чтобы использовать инструмент pg_dump, соответствующий целевой/новой версии, для создания резервной копии. – IMSoP

+0

Да, я объявлю это. Благодаря! – wildplasser

+0

@wildplasser спасибо большое! Хорошо, что все уверены, что это большая боль. Я сделал новый pg_dumpall с чистым вариантом (еще не пробовал делать это с новым pg_dumpall), и когда я его накормил в psql, он работал. Копируются данные и строят индексы. Я могу сделать это снова, просто создавая пользователей и т. Д., А затем отдельный дамп для данных. Это может облегчить редактирование файла. Есть ли способ узнать, хорошо ли то, что я импортировал в новую версию? Данные, кажется, там ... –