PostgreSQL. Структура файлов и каталогов

В рамках изучения стала интересна структура 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.rupgcookbook.rulinux.yaroslavl.ru

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *