Вариант через дамп и загрузку данных

Основной процесс

  1. Ставим новую версию (ставится в слот, так что будет одновременно 2 версии)
  2. Дампим старую базу
  3. Переключаемся на новую версию
  4. Проверяем, что переключились
  5. Стопаем старую версию
  6. Инитим новую версию
  7. Стартуем новую версию
  8. Восстанавливаем данные
  9. Правим ранлевел
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

Варианты за дампить старую базу

Дамп всех БД на сервере (кластере) в простой SQL:

pg_dumpall -f file.sql

Дамп конкретной базы (зажатый):

pg_dump -Fc -b -f file.backup db_name

Дамп конкретной таблицы (зажатый):

pg_dump -Fc -b -f file.backup -t table_name db_name

Дамп только информации о пользователях:

pg_dumpall -r -f file.sql

Дамп каждой базы в отдельный файл:

for db in $( psql -qAt -c 'select datname from pg_database where not datistemplate' ); do 
    pg_dump -Fc -b -f ${db}.backup ${db}; 
done

Получение схемы базы, либо конкретной таблицы:

pg_dump -s db_name
pg_dump -s -t table_name db_name

Варианты восстановления

Восстановление из SQL файла:

psql -f file.sql db_name

Восстановление из зажатого дампа базы:

pg_restore -d db_name -v file.backup

Восстановление таблицы из зажатого дампа:

pg_restore -d db_name -a -t table_name -v file.backup

Вариант через pg_upgrade

Ставим новую версию, смотрим, какие версии у нас есть:

emerge -avt postgresql-server
eselect postgresql list
 
old=10 # старая версия
new=11 # новая версия

Инитим новую базу:

mcedit /etc/conf.d/postgresql-${new} # PG_INITDB_OPTS="--locale=ru_RU.UTF-8"
emerge --config dev-db/postgresql:${new} # говорим yes и создаем файлы данных

Добавляем local all all trust в следующие 2 файла:

mcedit /etc/postgresql-${old}/pg_hba.conf
mcedit /etc/postgresql-${new}/pg_hba.conf

Копируем конфиг от старой версии. Кроме того, т.к. pg_upgrade не позволяет указывать где лежать конфиги постгреса, мы копируем их в директорию с дата-файлами:

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

Убеждаемся, что обе версии постгреса остановлены и пеключаемся на новую:

/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

Выплняем, собственно, апгрейд:

su - postgres
cd /var/lib/postgresql
 
old=10 # старая версия
new=11 # новая версия
pg_upgrade \
    -d /var/lib/postgresql/${old}/data/ \
    -b /usr/lib/postgresql-${old}/bin/ \
    -D /var/lib/postgresql/${new}/data/ \
    -B /usr/lib/postgresql-${new}/bin/

Удаляем local all all trust из конфига, а потом чистим мусор:

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

Тешим паранойю и стартуем новую версию:

chown postgres:postgres /etc/postgresql-${new}/*
chmod 600 /etc/postgresql-${new}/*
 
/etc/init.d/postgresql-${new} start

sys/апгрейд_postgresql_в_gentoo.txt · Последние изменения: 2019-05-31 22:48 — Andrew A. Sabitov