Перемещение каталога данных PostgreSQL 12

Объём базы данных постоянно увеличивается и со временем дисковое пространство заканчивается. Возникает вопрос, что делать? Путей решения несколько, например расширить текущий раздел или перенести базу на более емкий и быстрый диск. При планировании новой инсталляции PostgreSQL так же желательно размещать каталог данных кластера на отдельном томе для повышения производительности.

Исходные данные: ОС Ubuntu 18.04 с PostgreSQL 12
Задача: Перенести каталог данных кластера на новый диск.

Для начала проверим где сейчас находится каталог данных кластера:

su - postgres -c 'psql -c "SHOW data_directory;"'

Для переноса останавливаем кластер:

pg_ctlcluster 12 main stop

Переносим данные с помощью rsync и устанавливаем владельца:

Важное примечание: Убедитесь, что в названии каталога нет конечного слеша (система может добавить его, если вы используете автодополнение). Если такой слеш есть, то уберите его.

rsync -av /var/lib/postgresql /pgdata
chown -R postgres:postgres /pgdata

Переименовываем текущий каталог данных

mv /var/lib/postgresql/12/main /var/lib/postgresql/12/main.backup

Отредактируем файл конфигурации кластера /etc/postgresql/12/main/postgresql.conf
В нем нам нужно заменить настройку

data_directory = '/var/lib/postgresql/12/main'

на

data_directory = '/pgdata/postgresql/12/main'

Теперь можно запустить кластер:

pg_ctlcluster 12 main start

Проверим лог-файл:

tail -f /var/log/postgresql/postgresql-12-main.log

Отлично. Теперь можно запустить наше приложение работающее с PostgreSQL, проверить корректность его работы. После этого можно удалить старый каталог.

Удаляем старый каталог:

rm -rf /var/lib/postgresql/12/main.backup