Показать страницуСсылки сюдаODT преобразованиеPDFэкспорт ODT=>PDFНаверх Эта страница только для чтения. Вы можете посмотреть её исходный текст, но не можете его изменить. Сообщите администратору, если считаете, что это неправильно. ===== Вариант через дамп и загрузку данных ===== ==== Основной процесс ==== - Ставим новую версию (ставится в слот, так что будет одновременно 2 версии) - Дампим старую базу - Переключаемся на новую версию - Проверяем, что переключились - Стопаем старую версию - Инитим новую версию - Стартуем новую версию - Восстанавливаем данные - Правим ранлевел <code bash> emerge -avt postgresql-server pg_dumpall -f file.sql eselect postgresql list ; eselect postgresql set new_version pg_dumpall --version # должно показать новую версию /etc/init.d/postgresql-old_version stop emerge postgresql-server --config -a /etc/init.d/postgresql-new_version start psql -f backup.sql postgres rc-update del postgresql-old_version default rc-update add postgresql-new_version default </code> ==== Варианты задампить старую базу ==== Дамп всех БД на сервере (кластере) в простой SQL: <code bash> pg_dumpall -f file.sql </code> Дамп конкретной базы (зажатый): <code bash> pg_dump -Fc -b -f file.backup db_name </code> Дамп конкретной таблицы (зажатый): <code bash> pg_dump -Fc -b -f file.backup -t table_name db_name </code> Дамп только информации о пользователях: <code bash> pg_dumpall -r -f file.sql </code> Дамп каждой базы в отдельный файл: <code bash> for db in $( psql -qAt -c 'select datname from pg_database where not datistemplate' ); do pg_dump -Fc -b -f ${db}.backup ${db}; done </code> Получение схемы базы, либо конкретной таблицы: <code bash> pg_dump -s db_name pg_dump -s -t table_name db_name </code> ==== Варианты восстановления ==== Восстановление из SQL файла: <code bash> psql -f file.sql db_name </code> Восстановление из зажатого дампа базы: <code bash> pg_restore -d db_name -v file.backup </code> Восстановление таблицы из зажатого дампа: <code bash> pg_restore -d db_name -a -t table_name -v file.backup </code> ===== Вариант через pg_upgrade ===== Ставим новую версию, смотрим, какие версии у нас есть: <code bash> emerge -avt postgresql-server eselect postgresql list old=10 # старая версия new=11 # новая версия </code> Инитим новую базу: <code bash> mcedit /etc/conf.d/postgresql-${new} # PG_INITDB_OPTS="--locale=ru_RU.UTF-8" emerge --config dev-db/postgresql:${new} # говорим yes и создаем файлы данных </code> Добавляем **''local all all trust''** в следующие 2 файла: <code bash> mcedit /etc/postgresql-${old}/pg_hba.conf mcedit /etc/postgresql-${new}/pg_hba.conf </code> Копируем конфиг от старой версии. Кроме того, т.к. **''pg_upgrade''** не позволяет указывать где лежать конфиги постгреса, мы копируем их в директорию с дата-файлами: <code bash> cp /etc/postgresql-${old}/postgresql.conf /etc/postgresql-${new}/ cp /etc/postgresql-${old}/*.conf /var/lib/postgresql/${old}/data/ cp /etc/postgresql-${new}/*.conf /var/lib/postgresql/${new}/data/ chown postgres:postgres /var/lib/postgresql/${old}/data/*.conf /var/lib/postgresql/${new}/data/*.conf </code> Убеждаемся, что обе версии постгреса остановлены и пеключаемся на новую: <code bash> /etc/init.d/postgresql-${old} stop /etc/init.d/postgresql-${new} stop eselect postgresql set ${new} rc-update del postgresql-${old} default rc-update add postgresql-${new} default </code> Выплняем, собственно, апгрейд: <code bash> su - postgres cd /var/lib/postgresql old=10 # старая версия new=11 # новая версия pg_upgrade \ -d /var/lib/postgresql/${old}/data/ \ -b /usr/lib64/postgresql-${old}/bin/ \ -D /var/lib/postgresql/${new}/data/ \ -B /usr/lib64/postgresql-${new}/bin/ </code> Удаляем **''local all all trust''** из конфига, а потом чистим мусор: <code bash> mcedit /etc/postgresql-${new}/pg_hba.conf emerge --depclean =dev-db/postgresql-server-${old} rm -rfv /etc/conf.d/postgresql-${old} /var/lib/postgresql/${old} /etc/postgresql-${old} rm /var/lib/postgresql/${new}/data/*.conf </code> Тешим паранойю и стартуем новую версию: <code bash> chown postgres:postgres /etc/postgresql-${new}/* chmod 600 /etc/postgresql-${new}/* /etc/init.d/postgresql-${new} start </code> sys/апгрейд_postgresql_в_gentoo.txt Последнее изменение: 2022-08-16 23:42 — 127.0.0.1