#88. Как обновить postgresql

Да, здесь надо прямо-таки обновлять. Нельзя просто взять и сказать update — тебя не поймут. У postgres’а целое приложение консольное есть, чтобы правильно обновиться.

Итак:

  1. Стопорим postgres. У всех по-разному, например service postgres stop;
  2. Выполняем команду:
    
initdb /usr/local/var/postgres_version -E utf8
    postgres_version меняем на что-то более вменяемое, типа postgres9.6.1. C параметром -E всё понятно – кодировка темплейта (кто знает, что такое темплейт, – добро пожаловать в комментарии). Все базы будут иметь эту кодировку по умолчанию при создании;
  3. Дальше запускаем следующую красоту:
    pg_upgrade -v \
         -d /usr/local/var/postgres \
         -D /usr/local/var/postgres_version \
         -b /usr/local/Cellar/postgresql/9.5.4/bin/ \
         -B /usr/local/Cellar/postgresql/9.6.1/bin/
    Здесь -d — старая директория данных, -D – новая директория, которую мы указали в шаге 2, -b — старая директория, где стоит postgres, -B — директория новой версии postgres;
  4. Меняем местами старую и новую базы:
    cd /usr/local/var
    mv postgres postgres9.5.4
    mv postgres9.6.1 postgres
    Если при установке вы решили блеснуть мастерством и поменяли пути, то тут надо подставлять ваши директории;
  5. Рестартуем postgres и получаем удовольствие. Но если не повезло, то идём читать логи, stackoverflow и хабр.

Немного линков: initdb, pg_upgrade.

Share
Send
1 comment
Корейша Виктор 2016

А есть смысл сохранять старую базу в итоге? Есть мнение, что postgres не используют на маленьких базах, значит при каждом обновлении у нас появится большая ненужная папка postgres9.5.4, которой все равно не получится воспользоваться, т.к. бинарники уже новые, а обратную совместимость никто не обещал.

Еще очень интересно, в каких проектах вам приходится использовать postgres? Много про нее читал и слышал. И давно хочу попробовать, но не могу сам себе объяснить зачем. В моих проектах нет эпически огромных данных или какой-то очень сложной структуры БД, где действительно бы пригодились возможности postgres. Хотелось бы послушать чужой опыт.

Андрей 2016

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

Конкретно сейчас принципиальной нужды нет ни в одном проекте, но приятные дополнения, такие как типы cidr и inet, доставляют наслаждение при работе не в ущерб качеству (например, в гео-сервисе).

Popular