Содержание

Предыдущий раздел

psql - консольная утилита для работы с PostgreSQL

Следующий раздел

Не удается подключиться к базе данных (could not connect to server: Connection refused)

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

СУБД PostgreSQL в разных операционных системах имеет практически идентичную структуру каталогов. В данной статье рассматривается стандартная структура каталогов для ОС Ubuntu 12.04.

По умолчанию PostgreSQL устанавливается в папку /var/lib/postgresql/<version>/main. Основной каталог СУБД содержит подкаталоги с пользовательскими данными и служебной информацией.

  • postmaster.opts - файл, в котором сдержится командная строка с параметрами, с помощью которой была запущена СУБД.

    На моем компьютере в этом файле хранится следующая строка

    /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)

  • pg_clog - каталог, в котором хранится информация о статусах транзакций.

    На каждую транзакцию выделяется 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_stat_tmp - каталог, содержащий информация необходимую для поддержания работы системы статистики.

    Сборщик статистики использует этот каталог для передачи информации другим процессам СУБД. Этот каталог может быть перемещен в оперативную память для уменьшение нагрузки на жесткий диск.

  • 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-файлы

comments powered by Disqus