Структура каталогов и файлов PostgreSQL
Структура каталогов и файлов PostgreSQL#
СУБД PostgreSQL в разных операционных системах имеет практически идентичную структуру каталогов. В данной статье рассматривается стандартная структура каталогов для ОС Ubuntu 12.04.
По умолчанию PostgreSQL устанавливается в папку /var/lib/postgresql/
postmaster.opts - файл, в котором сдержится командная строка с параметрами, с помощью которой была запущена СУБД. Пример строки из файла postmaster.opts
/usr/lib/postgresql/16/bin/postgres "-D" "/var/lib/postgresql/16/main" "-c" "config_file=/etc/postgresql/16/main/postgresql.conf"
PG_VERSION - файл, содержащий основной номер версии СУБД (к примеру, 16)
base - каталоги внутри base/ соответствуют OID баз данных. Это физические директории, где хранятся файлы таблиц, индексов и т.д. для каждой базы.
Имена подкаталогов соответствуют OID’ам баз данных.
root@server: /var/lib/postgresql/16/main/base# ls 1/ 12065/ 12070/ 16384/ 24580/
user=# select oid, datname from pg_database; oid | datname -------+----------- 1 | template1 12065 | template0 12070 | postgres 16384 | user 24580 | t1 (5 rows)
global - Каталог global/ содержит данные, общие для всех БД — например, pg_database, pg_authid и др.
В PostgreSQL 10 и выше pg_clog переименован в pg_xact и содержит информацию о статусах транзакций (по 2 бита на каждую).. Статус транзакции может иметь следующие значения:
транзакция стартовала,
транзакция успешно завершена,
транзакция отменена,
подтранзакция успешно завершена.
Количество хранимых транзакций ограничено параметром autovacuum_freeze_max_age (максимальное значение ~ 2 миллиарда), который в свою очередь регулирует работу автовакума. Поэтому максимальный размер файла может быть ~ 0.5 Гб максимум.
pg_multixact - каталог, содержащий информацию, необходимую для координации работы параллельных транзакций (используется для хранения SHARED ROW LOCKS)
pg_notify - каталог, в котором хранится информация для поддержки работы LISTEN/NOTIFY
pg_serial - каталог, содержащий информацию о завершенных последовательных (serializable) транзакциях
pg_snapshots - каталог, в котором хранятся экспортированные снапшоты
Файлы создаются при вызове процедуры pg_export_snapshot() и существуют до окончания транзакции.
Ниже представлена последовательность действий, позволяющая понять, как появляются и исчезают файлы в этом каталоге.
Экспорт снапшота в транзакции
BEGIN user=# SELECT pg_export_snapshot(); pg_export_snapshot -------------------- 00000312-1 (1 row)
В каталоге появился файл, в котором содержится информация о снапшоте
root@server: /var/lib/postgresql/16/main/pg_snapshots# ls 00000312-1 root@server: /var/lib/postgresql/16/main/pg_snapshots# cat 00000312-1 xid:786 dbid:16384 iso:1 ro:0 xmin:786 xmax:786 xcnt:0 sof:0 sxcnt:0 rec:0
Отмена транзакции
user=# rollback; ROLLBACK
Файл удален
root@server: /var/lib/postgresql/16/main/pg_snapshots# l ----
pg_stat_tmp - каталог, содержащий информацию необходимую для поддержания работы системы статистики. Сборщик статистики использует этот каталог для передачи информации другим процессам СУБД. Этот каталог может быть перемещен в оперативную память для уменьшение нагрузки на жесткий диск.
pg_subtrans - каталог, в котором хранится информация о подтранзакциях
pg_tblspc - в каталоге хранятся символьные ссылки на табличные пространства (tablespaces).
Ниже показана последовательность действий, демонстрирующая, как в этом каталоге появляются файлы.
Создается табличное пространство
user=# CREATE TABLESPACE tmp LOCATION '/home/user/1'; CREATE TABLESPACE
Получается список табличных пространств
user=# select oid, spcname from pg_tablespace; oid | spcname -------+------------ 1663 | pg_default 1664 | pg_global 27936 | tmp (3 rows)
Для каждого пользовательского табличного пространства в каталоге создается символьная ссылка на заданный каталог, именем этой ссылки является OID этого табличного пространства.
/var/lib/postgresql/16/main/pg_tblspc# ll total 8 drwx------ 2 postgres postgres 4096 Nov 4 09:51 ./ drwx------ 15 postgres postgres 4096 Nov 4 07:05 ../ lrwxrwxrwx 1 postgres postgres 13 Nov 4 09:51 27936 -> /home/user/1/
pg_twophase - каталог содержит информацию о подготовленных транзакциях для двухфазного коммита.
Каталог pg_xlog (в PostgreSQL 10+ — pg_wal) содержит WAL-файлы (журнал предзаписи).