Создание и управление кластером postgresql
Распаковка архива и создание конфигурации
#Распаковка архива
tar xzf /home/student/postgresql-13.6.tar.gz
cd postgresql-13.7
#Создание конфигурации
./configure --enable-debug --prefix=/usr/local/bin/postgresql --with-pgport=9999
#Если требуется повторно выполнить конфигурацию, тогда нужно очистить результаты предыдущего запуска
make distclean
--enable-debug - включение отладочной информации
--prefix=/usr/local/bin/postgresql - каталог установки
Сборка и установка postgresql
cd postgresql-13.7/
make world
#Установка сервера
make install
#Для сборки расширений нужно повторить последние две команды, перейдя в подкаталог contrib
cd contrib
sudo make
sudo make install
#Посмотреть параметры с которыми был собран сервер
pg_config --configure
make — сборка только сервера
make world — сборка сервера, всех расширений и документации.
Создание кластера с помощью initdb
Кластер базы данных не может принадлежать суперпользователю
Переменная PGDATA указывает на каталог кластера, ее могут использовать утилиты, такие как initdb или pg_ctlcluster
В данном примере для создания кластера будет использоваться утилита initdb
Утилиты сервера установлены в подкаталоге bin, например: /usr/lib/postgresql/12/bin/
#Создать директорию кластера
mkdir -p /var/lib/postgresql/data
#Присвоить значение переменной PGDATA
export PGDATA=/var/lib/postgresql/data
#Добавить путь к исполняемым файлам в переменную PATH
export PATH=$PATH:/usr/local/bin/postgresql
#Инициализация кластера
initdb -U postgres -k -D /var/lib/postgresql/data
Если при инициализации не задать имя суперпользователя СУБД, тогда будет использоваться имя текущего пользователя $USER
-k включает подсчет контрольных суммы страниц
Если переменная PGDATA не установлена, то следует в ключе -D указать каталог для данных
Если по какой то причине не найдена команда initdb, тогда можно попробовать найти ее с помощью locate initdb
И указать полный путь к исполняемому файлу в команде инициализации кластера
Создание кластера с помощью pg_createcluster
В примере рассматривается создание кластера с помощью утилиты pg_createcluster
pg_createcluster - это обертка над утилитой initdb
Для удаления кластера может использоваться утилита pg_dropcluster
#Создание нового кластера postgresql 12
pg_createcluster 12 main -d /var/lib/postgresql/12
#Удаление кластера
#pg_dropcluster --stop 12 main
Управление кластером
Для управления сервером может использоваться утилита pg_ctl или загляни сюда
Утилита pg_ctlcluster - это обертка над утилитой pg_ctl
#Остановить сервер:
sudo pg_ctlcluster 13 main stop
#Запустить сервер:
sudo pg_ctlcluster 13 main start
#Перезапустить:
sudo pg_ctlcluster 13 main restart
#Получить текущий статус сервера:
sudo pg_ctlcluster 13 main status
#Перечитать файлы конфигурации:
sudo pg_ctlcluster 13 main reload
#Вывод логов в файл с помощью опции -l
pg_ctl restart -l /home/chich/test.log
#Запуск сервера с использование порта 5444
pg_ctl start -o "-p 5444"
#Задать режим остановки сервера
pg_ctl stop -m smart
Расчет контрольных сумм в кластере
Утилита pg_checksums пересчитывает контрольные суммы в кластере
Подробнее об утилите pg_checksums здесь.
Перед запуском pg_checksums сервер должен быть остановлен в штатном режиме. При проверке контрольных сумм она возвращает нулевой код состояния, если ошибок не найдено, либо ненулевой код, если обнаружится хотя бы одна ошибка.
#Остановить сервер
sudo -u postgres pg_ctlcluster 12 main stop
#Или так
sudo systemctl stop postgresql@12-main
#Проверить работу утилиты
$ sudo /usr/lib/postgresql/12/bin/pg_checksums --check -D /var/lib/postgresql/12/main/
pg_checksums: error: data checksums are not enabled in cluster
#Установить утилиту
sudo apt install postgresql-12-pg-checksums
#Включить утилиту
sudo /usr/lib/postgresql/12/bin/pg_checksums --enable -D /var/lib/postgresql/12/main/
Checksum operation completed
Files scanned: 4298
Blocks scanned: 734444
pg_checksums: syncing data directory
pg_checksums: updating control file
Checksums enabled in cluster
#Проверить контрольные суммы
sudo /usr/lib/postgresql/12/bin/pg_checksums --check -D /var/lib/postgresql/12/main/
Checksum operation completed
Files scanned: 4298
Blocks scanned: 734444
Bad checksums: 0
Data checksum version: 1
Ошибки контрольных сумм для конкретной базы данных будут видны в представлении pg_stat_database
Расчёт контрольных сумм может повлечь заметное снижение производительности. Когда контрольные суммы включены, они рассчитываются для всех объектов и во всех базах данных.
Запуск с помощью postgres
postgres > logfile 2>&1 &
Выключение сервера
Завершить работу сервера можно тремя способами, отправляя сигнал главному процессу
SIGTERM - умное выключение
SIGINT - быстрое выключение
SIGQUIT - немедленное выключение
Более подробно это описано в официальной документации
postmaster.opts
postmaster.opts - файл который содержит параметры, которые применяются при управлении кластером с помощью команд pg_ctl, pg_ctlcluster, если не указаны иные значения в -o
Источники
Связанные темы
Буферный кэш и журнал в Postgresql
Системный каталог в Postgresql
Табличные пространства в Postgresql
Определение данных в Postgresql
Основные команды psql и sql Postgresql
Агрегирование и группировка в Postgresql
Основные понятия реляционной модели
Системные каталоги в Postgresql
Этапы запроса и получения результата в postgresql