Обновление PostgreSQL с 9.6 до 10.0 на Ubuntu 16.10

Моя база данных составляет более 600 ГБ, и мой текущий том составляет всего 1 ТБ, поэтому, вероятно, ограничивает мои параметры.

Мои конфигурационные файлы:

/etc/postgresql/9.6/main

Моя база данных находится здесь:

/mnt/1TB/postgresql/9.6/main

Изменить - Это руководство работало для меня. Единственное дополнение, которое мне нужно было сделать, это загрузить libicu55 вручную и установить его, и я должен был предоставить разрешение postgres 1777 для моей/tmp/папки. Я также сохранил папку данных на другом диске, поэтому мне пришлось использовать команду:

pg_upgradecluster -m upgrade 10 main /mnt/1TB/postgresql/10

https://gist.github.com/delameko/bd3aa2a54a15c50c723f0eef8f583a44

Ответ 1

Пошаговое руководство

  1. Сделайте резервную копию. Убедитесь, что ваша база данных не обновляется.

    pg_dumpall > outputfile
    
  2. Установите Postgres 10. Следуйте инструкциям на этой странице: https://www.postgresql.org/download/linux/ubuntu/

    Затем запустите sudo apt-get install postgresql-10. Более новая версия будет установлена параллельно с более ранней версией.

  3. Запустите pg_lsclusters:

    Ver Cluster Port Status Owner    Data directory               Log file
    9.6 main    5432 online postgres /var/lib/postgresql/9.6/main /var/log/postgresql/postgresql-9.6-main.log
    10  main    5433 online postgres /var/lib/postgresql/10/main  /var/log/postgresql/postgresql-10-main.log
    

    Уже есть main кластер на 10 (поскольку он создается по умолчанию при установке пакета). Это сделано для того, чтобы новая установка работала из коробки без необходимости сначала создавать кластер, но, конечно, она конфликтует, когда вы пытаетесь обновить 9.6/main когда также существует 10/main. Рекомендуемая процедура - удалить кластер 10 с помощью pg_dropcluster а затем pg_upgradecluster обновление с помощью pg_upgradecluster.

  4. Остановите кластер 10 и отбросьте его:

    sudo pg_dropcluster 10 main --stop
    
  5. Остановите все процессы и сервисы записи в базу данных. Остановить базу данных:

    sudo systemctl stop postgresql 
    
  6. Обновите кластер 9.6:

    sudo pg_upgradecluster -m upgrade 9.6 main
    
  7. Запустите PostgreSQL снова

    sudo systemctl start postgresql
    
  8. Запустите pg_lsclusters. Теперь ваш кластер 9.6 должен быть "выключен", а кластер 10 должен быть подключен к 5432:

    Ver Cluster Port Status Owner    Data directory               Log file
    9.6 main    5433 down   postgres /var/lib/postgresql/9.6/main /var/log/postgresql/postgresql-9.6-main.log
    10  main    5432 online postgres /var/lib/postgresql/10/main  /var/log/postgresql/postgresql-10-main.log
    
  9. Сначала убедитесь, что все работает нормально. После этого удалите кластер 9.6:

     sudo pg_dropcluster 9.6 main --stop
    

Некоторые заметки о pg_upgradecluster

Это руководство прекрасно работает для обновления с 9,5 до 10,1. При обновлении со старой версии рассмотрите возможность пропустить -m upgrade на шаге № 6:

sudo pg_upgradecluster 9.6 main

Если у вас действительно большой кластер, вы можете использовать pg_upgradecluster с pg_upgradecluster --link, чтобы обновление было на месте. Однако это опасно - вы можете потерять кластер в случае сбоя. Только не используйте эту опцию, если в этом нет необходимости, поскольку -m upgrade уже достаточно быстрое.

На основании:

Обновить

Это руководство отлично подходит для обновления с 9.6 до 11 и с 10 до 11.

Ответ 2

Почти вышло из коробки. Я на 17.10 хитрый. Хотя вы можете поместить это в файл .deb, это не сработает - Postgres обновляет только выпуски LTS, если они нарушают выпуск LTS. Поэтому поставьте Zesty в этот деб, и вы хорошо пойдете.