Объём базы данных постоянно увеличивается и со временем дисковое пространство заканчивается. Возникает вопрос, что делать? Путей решения несколько, например расширить текущий раздел или перенести базу на более емкий и быстрый диск. При планировании новой инсталляции PostgreSQL так же желательно размещать каталог данных кластера на отдельном томе для повышения производительности.
Исходные данные: ОС Ubuntu 18.04 с PostgreSQL 12
Задача: Перенести каталог данных кластера на новый диск.
Для начала проверим где сейчас находится каталог данных кластера:
su - postgres -c 'psql -c "SHOW data_directory;"'
Вывод:
data_directory ---------------------------- /var/lib/postgresql/12/main (1 row)
Это стандартный путь размещения каталога, в котором хранятся данные.
На сервер подключили новый дисковый массив и смонтировали его в /pgdata, именно туда нам и нужно перенести данные.
Для переноса останавливаем кластер:
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
Часть вывода:
2019-11-08 07:17:01.252 UTC [4684] LOG: starting PostgreSQL 12.0 (Ubuntu 12.0-2.pgdg18.04+1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 7.4.0-1ubuntu1~18.04.1) 7.4.0, 64-bit 2019-11-08 07:17:01.252 UTC [4684] LOG: listening on IPv4 address "0.0.0.0", port 5432 2019-11-08 07:17:01.253 UTC [4684] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432" 2019-11-08 07:17:01.306 UTC [4685] LOG: database system was shut down at 2019-11-08 07:10:11 UTC 2019-11-08 07:17:01.310 UTC [4684] LOG: database system is ready to accept connections
PostgreSQL успешно запустился и готов принимать соединения.
Проверим где сейчас находится каталог данных кластера:
su - postgres -c 'psql -c "SHOW data_directory;"'
Вывод:
data_directory ---------------------------- /pgdata/postgresql/12/main (1 row)
Отлично. Теперь можно запустить наше приложение работающее с PostgreSQL, проверить корректность его работы. После этого можно удалить старый каталог.
Удаляем старый каталог:
rm -rf /var/lib/postgresql/12/main.backup
На этом все, до скорых встреч. Если у Вас возникли вопросы или Вы хотите чтобы я помог Вам, то Вы всегда можете связаться со мной разными доступными способами.
Профессионально занимаюсь системным администрированием Linux -серверов и баз данных (MySQL, POstgreSQL) на протяжении последних 24 лет.
mv /var/lib/postgresql/12/main /var/lib/postgresql/12/main.backup
весело
Сделайте rm -rf /var/lib/postgresql/12/main без бэкапа. Будет еще веселей.