При обновлении с версии X.Y.Z на X.Y.Z+ всё предельно просто — portupgrade и никаких проблем.
При обновлении с X.Y.* на X.Y+.* всё чуть-чуть сложнее...
...итак, краткий план действий:
- обновляем PostgreSQL-клиент;
- используя новый клиент, создаём дамп данных из старой БД;
- останавливаем PostgreSQL-сервер;
- обновляем PostgreSQL-сервер;
- выполняем initdb для сервера;
- загружаем базу данных;
- выполняем vacuum analyse;
Обновление PostgreSQL-клиента
При обновлении минорной версии PostgreSQL необходимо сделать дамп БД и загрузить его новым PostgreSQL-клиентом. Почему? Потому что новый клиент знает формат нового сервера, старый может быть не в курсе нововведений.Обновляем порты — portsnap или csup:
portsnap fetch && portsnap updateили
csup ports-supfile && cd /usr/ports && make index
Обновляем при помощи portupgrade только клиента PostgreSQL:
portupgrade -fo databases/postgresql84-client postgresql-client
Ключик -f нужен... на всякий случай, мало ли что ;)
Производим новым клиентом дамп старых данных, pg_dumpall для сохранения всего, что есть в сервере:
pg_dumpall > dumpall.sql
Останавливаем сервер PostgreSQL:
/usr/local/etc/rc.d/postgresql stop
Обновляем сервер PostgreSQL:
portupgrade -fo databases/postgresql84-server postgresql-server
Возможно, понадобится ещё и это:
portupgrade postgresql-contrib
initdb — инициализируем БД
На всякий случай, перед тем как запускать initdb, лучше скопировать старый каталог с данными PostgreSQL в укромненькое местечко — мало ли, что может произойти, надо иметь пути кТак же, полезно сохранять конфигурационные файлы (postgresql.conf, pg_hba.conf, etc).
cd /usr/local/pgsql mv data data.8.3.9
Запускаем initdb:
/usr/local/etc/rc.d/postgresql initdb
(Возможно, надо подправить /usr/local/pgsql/data/postgresql.conf в случае наличия каких-либо особых настроек для предыдущей версии.)
Запуск сервера и загрузка дампа БД
Запускаем сервер PostgreSQL:/usr/local/etc/rc.d/postgresql start
Загружаем данные:
su pgsql psql template1 < dumpall.sql
vacuum analyse
Выполнение vacuum analyse заставляет PostgreSQL обновить внутреннюю статистику, используемую для планирования запросов, это необходимо всегда производить после загрузки дампа БД.$ psql regress psql (8.4.2) Type "help" for help. regress=# vacuum analyse;
0 коммент.:
Отправить комментарий