СУБД PostgreSQL в разных операционных системах имеет практически идентичную структуру каталогов. В данной статье рассматривается стандартная структура каталогов для ОС Ubuntu 12.04.
По умолчанию PostgreSQL устанавливается в папку /var/lib/postgresql/<version>/main. Основной каталог СУБД содержит подкаталоги с пользовательскими данными и служебной информацией.
На моем компьютере в этом файле хранится следующая строка
/usr/lib/postgresql/9.3/bin/postgres "-D" "/var/lib/postgresql/9.3/main" "-c" "config_file=/etc/postgresql/9.3/main/postgresql.conf"
PG_VERSION - файл, содержащий основной номер версии СУБД (к примеру, 9.3)
base - каталог, содержащий каталоги баз данных (по каталогу на каждую БД)
Имена подкаталогов соответствуют OID'ам баз данных.
root@server: /var/lib/postgresql/9.3/main/base# ls 1/ 12065/ 12070/ 16384/ 24580/denis=# select oid, datname from pg_database; oid | datname -------+----------- 1 | template1 12065 | template0 12070 | postgres 16384 | denis 24580 | t1 (5 rows)
global - каталог, в котором хранятся глобальные таблицы (к примеру, pg_database)
На каждую транзакцию выделяется 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 denis=# SELECT pg_export_snapshot(); pg_export_snapshot -------------------- 00000312-1 (1 row)В каталоге появился файл, в котором содержится информация о снапшоте
root@server: /var/lib/postgresql/9.3/main/pg_snapshots# ls 00000312-1 root@server: /var/lib/postgresql/9.3/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Отмена транзакции
denis=# rollback; ROLLBACKФайл удален
root@server: /var/lib/postgresql/9.3/main/pg_snapshots# l ----
Сборщик статистики использует этот каталог для передачи информации другим процессам СУБД. Этот каталог может быть перемещен в оперативную память для уменьшение нагрузки на жесткий диск.
pg_subtrans - каталог, в котором хранится информация о подтранзакциях
pg_tblspc - в каталоге хранятся символьные ссылки на табличные пространства (tablespaces).
Ниже показана последовательность действий, демонстрирующая, как в этом каталоге появляются файлы.
Создается табличное пространство
denis=# CREATE TABLESPACE tmp LOCATION '/home/denis/1'; CREATE TABLESPACEПолучается список табличных пространств
denis=# select oid, spcname from pg_tablespace; oid | spcname -------+------------ 1663 | pg_default 1664 | pg_global 27936 | tmp (3 rows)Для каждого пользовательского табличного пространства в каталоге создается символьная ссылка на заданный каталог, именем этой ссылки является OID этого табличного пространства.
/var/lib/postgresql/9.3/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/denis/1/
pg_twophase - каталог содержит информацию о подготовленных транзакциях для двухфазного коммита.
pg_xlog - каталог, содержит WAL-файлы