В рамках изучения стала интересна структура PostgreSQL, в плане организации файлов и каталогов. Разбор буду проводить на сервере с Debian 9, и установленным PostgreSQL 9.6 от Postgres Professional на нем.
Обращаю внимание, что не являюсь специалистом в PostgreSQL и данный материал построен в ходе изучения данного вопроса по доступной литературе и развернутому ранее серверу PostgreSQL.
Вероятно в разных версиях PostgreSQL и ОС расположение файлов будет отличаться, потому буду разбирать имеющееся.
После установки обнаружил созданные каталоги:
/etc/postgresql/ — Каталог настроек;
/var/lib/postgresql/ — Каталог данных (PGDATA).
В каждом из этих каталогов есть каталог версии, а в нем каталог кластера main, например /etc/postgresql/9.6/main/.
/etc/postgresql/
Получим перечень файлов в каталоге /etc/postgresql/ моего кластера и разберем их
# ls -l -p /etc/postgresql/9.6/main/ | grep ^- -rw-r--r-- 1 postgres postgres 315 окт 20 00:06 environment -rw-r--r-- 1 postgres postgres 143 окт 20 00:06 pg_ctl.conf -rw-r----- 1 postgres postgres 4708 окт 20 00:09 pg_hba.conf -rw-r----- 1 postgres postgres 1636 окт 20 00:06 pg_ident.conf -rw-r--r-- 1 postgres postgres 22712 дек 5 23:56 postgresql.conf -rw-r--r-- 1 postgres postgres 317 окт 20 00:06 start.conf
environment — Файл с описанием синтаксиса postgresql.conf;
pg_ctl.conf — Файл параметров запуска, остановки и перезапуска кластера;
pg_hba.conf — Файл описывающий параметры аутентификации;
pg_ident.conf — Файл сопоставления имен прользователей, например для аутентификации по LDAP;
postgresql.conf — Основной конфигурационный файл;
start.conf — Файл варианта запуска сервера.
/var/lib/postgresql/
Получим перечень файлов в каталоге /var/lib/postgresql/ моего кластера и разберем их
# ls -l -p /var/lib/postgresql/9.6/main/ | grep ^- -rw------- 1 postgres postgres 4 окт 20 00:06 PG_VERSION -rw------- 1 postgres postgres 88 окт 20 00:06 postgresql.auto.conf -rw------- 1 postgres postgres 133 мар 13 22:07 postmaster.opts -rw------- 1 postgres postgres 92 мар 13 22:07 postmaster.pid
PG_VERSION — Содержит версию кластера;
postgresql.auto.conf — дополнение к файлу postgresql.conf, изменения вносятся командой ALTER SYSTEM, руками не трогаем;
postmaster.opts — содержит аргументы для запуска сервера;
postmaster.pid — наличие файла означает, что сервер запущен, содержит PID и параметры текущего процесса.
В этом каталоге есть не только файлы, но и вложенные каталоги. Построим дерево подчиненных каталогов:
# tree -d /var/lib/postgresql/ /var/lib/postgresql/ └── 9.6 └── main ├── base │ ├── 1 │ ├── 12406 │ ├── 12407 │ ├── 18229 │ ├── 20152 │ └── pgsql_tmp ├── global ├── pg_clog ├── pg_commit_ts ├── pg_dynshmem ├── pg_logical │ ├── mappings │ └── snapshots ├── pg_multixact │ ├── members │ └── offsets ├── pg_notify ├── pg_replslot ├── pg_serial ├── pg_snapshots ├── pg_stat ├── pg_stat_tmp ├── pg_subtrans ├── pg_tblspc │ └── 2677741 -> /mnt/POINT_01/pg_base ├── pg_twophase └── pg_xlog └── archive_status
Теперь разберем полученный перечень каталогов:
base — Содержит БД табличного пространства pg_default. Так же в нем распологается каталог pgsql_tmp, который содержит временные файлы для выполнения запросов;
global — Содержит общие таблицы кластера;
pg_clog — Содержит данные о состоянии транзакций;
pg_commit_ts — Содержит данные о времени фиксации транзакций;
pg_dynshmem — Каталог динамически разделяемой памяти (DYNAMIC SHARED MEMORY);
pg_logical — Каталог механизма репликации данных;
pg_multixact — Содержит данные о разделяемых блокировках строк (SHARED LOCK);
pg_notify — Каталог подсистемы NOTIFY, которая позволяет производить оповещение других БД и приложений о необходимых событиях;
pg_replslot — Содержит данные репликации;
pg_serial — Содержит данные о завершенных последовательных транзакциях (SERIALAZIBLE);
pg_snapshots — Содержит снапшоты;
pg_stat — Содержит данные статистики;
pg_stat_tmp — Содержит временные данные статистики;
pg_subtrans — Содержит данные о состоянии подтранзакций;
pg_tblspc — Содержит симлинки на созданные табличные пространства(TABLESPACE). Например у меня было создано табличное пространство на другом диске, виден симлинк и его адрес:
├── pg_tblspc │ └── 2677741 -> /mnt/POINT_01/pg_base
pg_twophase — Содержит данные о состоянии транзакций двухфазной фиксации (TWO-PHASE COMMIT);
pg_xlog — Содержит файлы упреждающей записи (WAL).
Структура PostgreSQL разобрана, можно двигаться дальше.
Литература: postgrespro.ru, pgcookbook.ru, linux.yaroslavl.ru