Установка PostgreSQL#

Для установки Postgres имеется два варианта:

  • установка из исходных кодов;

  • установка из пакетов

Установка из исходных кодов выполняется чаще всего профессиональными разработчиками, в частности, разработчиками Postgres. Является достаточно трудоемким процессом, подразумевающим полное понимание происходящих процессов, особенностей операционной системы, тонкостей устанавливаемого программного обеспечения.

Администраторы в своей работе редко используют подобную практику, а пользуются уже готовыми решениями, которые предоставляются в виде готовых установочных пакетов, которые скачиваются из репозиториев. Этот вариант является предпочтительным, поскольку он собран из тех же исходных кодов с учетом операционной системы.

  1. Обновить список репозиториев

$ sudo apt-get update
  1. Установить программное обеспечение:

$ sudo apt-get install postgresql16-server
$ sudo apt-get install postgresql16-contrib

Создание кластера#

Прежде чем осуществлять работу с базами данных, необходимо проинициализировать область хранения баз данных на диске. Данное называется хранилище кластером баз данных.

Кластер (от англ. cluster — скопление, кисть, рой) — объединение нескольких однородных элементов, которое может рассматриваться как самостоятельная единица, обладающая определёнными свойствами.

Кластер в компьютерных сетях — это группа компьютеров, серверов или процессоров, объединённых высокоскоростными каналами связи и представляющих с точки зрения пользователя единый аппаратный ресурс.

Кластер баз данных PostgreSQL представляет собой набор баз, управляемых одним экземпляром работающего сервера.

asda

При инициализации в каждом кластере создаются две базы: template1 и template0.

С точки зрения файловой системы кластер баз данных представляет собой один каталог (каталог данных или область данных), в котором будут храниться все данные.

Владелец кластера может определить переменную окружения PGDATA, указывающую на каталог кластера. Эту переменную используют некоторые утилиты сервера, когда им нужно узнать расположение кластера. К таким утилитам относится initdb, а также основная утилита управления сервером pg_ctl.

Какого-либо стандартного пути не существует, но часто данные размещаются в /usr/local/pgsql/data или в /var/lib/pgsql/data.

Для создания кластера предназначена утилита initdb. В процессе работы она создает конфигурационные файлы, необходимые для работы Postgres. Имеет множество ключей, например -k - ключ для включения подсчета контрольных сумм. Данная проверка выполняется при обращении к любой странице данных в кластере и позволяет оперативно обнаружить повреждения в данных.

В целях безопасности каталог, в котором инициализируется кластер, не может принадлежать суперпользователю ОС (root).

Владельцем кластера обычно является пользователь postgres.

Обычно, для создания кластера используется следующая последвательность команд:

mkdir /home/user/pgsql16/data
export PGDATA=/home/user/pgsql16/data
initdb -U postgres -k -D /home/user/pgsql16/data

Создание каталога для кластера, создание системной переменной PGDATA и запуск утилиты initdb от имени пользователя postgres (-U postgres).

В ALT LINUX процесс инициализации кластера автоматизирован скриптом /etc/init.d/postgresq:

/etc/init.d/postgresql initdb

Среди команд данного скрипта присутствуют:

PGDATA = /var/lib/pgsql/data
...
asda

Подробнее: https://postgrespro.ru/docs/postgresql/16/app-initdb

Расположение файлов в базовом каталоге#

Файлы

Описание

PG_VERSION

Файл, содержащий номер основной версии PostgreSQL

pg_hba.conf

Файл, управляющий аутентификацией клиента

pg_ident.conf

Файл, управляющий сопоставлением имен пользователей PostgreSQL.

postgresql.conf

Файл, используемый для установки параметров конфигурации.

postgresql.auto.conf

Файл, используемый для хранения параметров конфигурации, которые устанавливаются при помощи ALTER SYSTEM

postmaster.opts

Файл, содержащий параметры командной строки, с которыми сервер был запущен в последний раз

Расположение подкаталогов в базовом каталоге#

Подкаталоги

Описание

base/

Подкаталог, содержащий подкаталоги для каждой базы данных

global/

Подкаталог, содержащий общие таблицы кластера, такие как pg_database

pg_commit_ts/

Подкаталог, содержащий данные о времени фиксации транзакций

pg_xact

Подкаталог, содержащий данные о состоянии транзакции.

pg_dynshmem/

Подкаталог, содержащий файлы, используемые подсистемой динамически разделяемой памяти

pg_logical/

Подкаталог, содержащий данные о состоянии для логического декодирования

pg_multixact/

Подкаталог, содержащий данные о состоянии мультитранзакций (используемые для разделяемой блокировки строк)

pg_notify/

Подкаталог, содержащий данные состояния прослушивания и уведомлений (LISTEN/NOTIFY)

pg_repslot/

Подкаталог, содержащий данные слота репликации

pg_serial/

Подкаталог, содержащий информацию о выполненных сериализуемых транзакциях.

pg_snapshots/

Подкаталог, содержащий экспортированные снимки (snapshots)

pg_stat/

Подкаталог, содержащий постоянные файлы для подсистемы статистики.

pg_stat_tmp/

Подкаталог, содержащий временные файлы для подсистемы статистики

pg_subtrans/

Подкаталог, содержащий данные о состоянии подтранзакций

pg_tblspc/

Подкаталог, содержащий символические ссылки на табличные пространства

pg_twophase/

Подкаталог, содержащий файлы состояний для подготовленных транзакций

pg_wal/

Подкаталог, содержащий файлы WAL (журнал предзаписи)

Управление сервером#

К основным операциям управления сервером относятся:

  • запуск и останов сервера;

  • получение текущего статуса сервера;

  • обновление конфигурации и некоторые другие.

Для выполнения этих действий предназначена утилита pg_ctl, идущая в составе PostgreSQL.

pg_ctl должна выполняться от имени владельца кластера баз данных (postgres).

Запуск сервера#

sudo -u postgres pg_ctl -D /var/lib/pgsql/data start

-D - ключ указания каталога кластера

asda

Для проверки работоспособности сервера можно воспользоваться терминальным клиентом для работы с PostgreSQL psql.

Подробнее: https://postgrespro.ru/docs/postgresql/16/app-psql

Подключение к кластеру:#

psql -U postgres

-U - ключ указания имени пользователя

asda

Ввести запрос:

SELECT now();

символ “;” - обязательно.

asda

Для выхода из psql исползуется сочетание клавиш CTRL+D

Останов сервера#

sudo -u postgres pg_ctl -D /var/lib/pgsql/data stop

Перезапуск сервера#

sudo -u postgres pg_ctl -D /var/lib/pgsql/data restart

Перечитать файлы конфигурации#

sudo -u postgres pg_ctl -D /var/lib/pgsql/data reload
asda

В данном выводе можно видеть PID процесса сервера

Проверка журнала сообщений#

Файл журнала имеет значение по умолчанию postgresql-%Y-%m-%d_%H%M%S.log. Значение трактуется как строка формата в функции strftime, поэтому в ней можно использовать спецификаторы % для включения в имена файлов информации о дате и времени. Максимальное время жизни отдельного журнального файла по умолчанию — 24 часа.

sudo ls -al /var/lib/pgsql/data/log
asda

Проверить последний файл журнала:

sudo tail -10 /var/lib/pgsql/data/log/
asda

Подробнее https://postgrespro.ru/docs/postgresql/16/runtime-config-logging

Самостоятельно:

  1. Расчет контрольных сумм

  2. Смена формата log-файла и перечитать конфигурацию.