#88. Как обновить postgresql
Да, здесь надо прямо-таки обновлять. Нельзя просто взять и сказать update — тебя не поймут. У postgres’а целое приложение консольное есть, чтобы правильно обновиться.
Итак:
- Стопорим postgres. У всех по-разному, например service postgres stop;
- Выполняем команду:
postgres_version меняем на что-то более вменяемое, типа postgres9.6.1. C параметром -E всё понятно – кодировка темплейта (кто знает, что такое темплейт, – добро пожаловать в комментарии). Все базы будут иметь эту кодировку по умолчанию при создании;initdb /usr/local/var/postgres_version -E utf8
- Дальше запускаем следующую красоту:
Здесь -d — старая директория данных, -D – новая директория, которую мы указали в шаге 2, -b — старая директория, где стоит postgres, -B — директория новой версии postgres;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/
- Меняем местами старую и новую базы:
Если при установке вы решили блеснуть мастерством и поменяли пути, то тут надо подставлять ваши директории;cd /usr/local/var mv postgres postgres9.5.4 mv postgres9.6.1 postgres
- Рестартуем postgres и получаем удовольствие. Но если не повезло, то идём читать логи, stackoverflow и хабр.
Немного линков: initdb, pg_upgrade.
А есть смысл сохранять старую базу в итоге? Есть мнение, что postgres не используют на маленьких базах, значит при каждом обновлении у нас появится большая ненужная папка postgres9.5.4, которой все равно не получится воспользоваться, т.к. бинарники уже новые, а обратную совместимость никто не обещал.
Еще очень интересно, в каких проектах вам приходится использовать postgres? Много про нее читал и слышал. И давно хочу попробовать, но не могу сам себе объяснить зачем. В моих проектах нет эпически огромных данных или какой-то очень сложной структуры БД, где действительно бы пригодились возможности postgres. Хотелось бы послушать чужой опыт.
Смысл не в хранении базы, а в безопасной миграции. Если вдруг что-то пойдёт не так, то можно будет откатиться на старую версию и сразу же подрубить данные. Если же всё прошло хорошо, то можно смело дропать эту папку.
Конкретно сейчас принципиальной нужды нет ни в одном проекте, но приятные дополнения, такие как типы cidr и inet, доставляют наслаждение при работе не в ущерб качеству (например, в гео-сервисе).