Структура каталогов и файлов PostgreSQL#
СУБД PostgreSQL в разных операционных системах имеет практически идентичную структуру каталогов. В данной статье рассматривается стандартная структура каталогов для ОС Ubuntu 12.04.
По умолчанию PostgreSQL устанавливается в папку /var/lib/postgresql/<version>/main. Основной каталог СУБД содержит подкаталоги с пользовательскими данными и служебной информацией.
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-файлы (журнал предзаписи).