52.11. pg_class
В каталоге pg_class
описываются таблицы и прочие объекты, имеющие столбцы или каким-то образом подобные таблицам. Сюда входят индексы (но смотрите также pg_index
), последовательности (но смотрите также pg_sequence
), представления, материализованные представления, составные типы и таблицы TOAST; см. relkind
. Далее, подразумевая все эти типы объектов, мы будем говорить об «отношениях». Не все столбцы pg_class
здесь имеют смысл для всех видов отношений.
Таблица 52.11. Столбцы pg_class
Имя | Тип | Ссылки | Описание |
---|---|---|---|
oid | oid | Идентификатор строки | |
relname | name | Имя таблицы, индекса, представления и т. п. | |
relnamespace | oid |
| OID пространства имён, содержащего это отношение |
reltype | oid |
| OID типа данных, соответствующего типу строки этой таблицы, если таковой есть (ноль для индексов, так как они не имеют записи в pg_type ) |
reloftype | oid |
| Для типизированных таблиц, OID нижележащего составного типа, или ноль для всех других отношений |
relowner | oid |
| Владелец отношения |
relam | oid |
| Если это таблица или индекс, применяемый метод доступа (куча, B-дерево, хеш и т. д.) |
relfilenode | oid | Имя файла на диске с этим отношением; ноль означает, что это «отображённое» представление, имя файла для которого определяется состоянием на нижнем уровне | |
reltablespace | oid |
| Табличное пространство, в котором хранится это отношение. Если указан ноль, подразумевается табличное пространство базы данных по умолчанию. Если у отношения нет файла на диске, указанное значение ни на что не влияет, кроме случаев с секционированными таблицами, где это табличное пространство, в котором будут создаваться секции, если пространство не указано явно в команде создания. |
relpages | int4 | Размер представления этой таблицы на диске (в страницах размера BLCKSZ ). Это лишь примерная оценка, используемая планировщиком. Она обновляется командами VACUUM , ANALYZE и несколькими командами DDL, например, CREATE INDEX . | |
reltuples | float4 | Число актуальных строк в таблице. Это лишь примерная оценка, используемая планировщиком. Она обновляется командами VACUUM , ANALYZE и несколькими командами DDL, например, CREATE INDEX . | |
relallvisible | int4 | Число страниц, помеченных как «полностью видимые» в карте видимости таблицы. Это лишь примерная оценка, используемая планировщиком. Она обновляется командами VACUUM , ANALYZE и несколькими командами DDL, например, CREATE INDEX . | |
reltoastrelid | oid |
| OID таблицы TOAST, связанной с данной таблицей, или 0, если таковой нет. В таблицу TOAST, как во вторичную, «выносятся» большие атрибуты. |
relhasindex | bool | True, если это таблица и она имеет (или недавно имела) индексы | |
relisshared | bool | True, если эта таблица разделяется всеми базами данных в кластере. Разделяемыми являются только некоторые системные каталоги (как например, pg_database ). | |
relpersistence | char | p = постоянная таблица (permanent), u = нежурналируемая таблица (unlogged), t = временная таблица (temporary), c = неизменяемая таблица (constant) | |
relkind | char | r = обычная таблица (Relation), i = индекс (Index), S = последовательность (Sequence), t = таблица TOAST, v = представление (View), m = материализованное представление (Materialized view), c = составной тип (Composite type), f = сторонняя таблица (Foreign table), p = секционированная таблица (Partitioned table), I = секционированный индекс (partitioned Index) | |
relnatts | int2 | Число пользовательских столбцов в отношении (системные столбцы не считаются). Столько же соответствующих строк должно быть в pg_attribute . См. также pg_attribute.attnum . | |
relchecks | int2 | Число ограничений CHECK в таблице; см. каталог pg_constraint | |
relhasrules | bool | True, если для таблицы определены (или были определены) правила; см. каталог pg_rewrite | |
relhastriggers | bool | True, если для таблицы определены (или были определены) триггеры; см. каталог pg_trigger | |
relhassubclass | bool | True, если у таблицы или индекса есть (или были) потомки в иерархии наследования. | |
relrowsecurity | bool | True, если для таблицы включена защита на уровне строк; см. каталог pg_policy | |
relforcerowsecurity | bool | True, если защита на уровне строк (когда она включена) также применяется к владельцу таблицы; см. каталог pg_policy | |
relispopulated | bool | True, если отношение наполнено данными (это истинно для всех отношений, кроме некоторых материализованных представлений) | |
relreplident | char | Столбцы, формирующие «идентификатор реплики» для строк: d = по умолчанию (первичный ключ, если есть), n = никакие (nothing), f = все столбцы, i = индекс со свойством indisreplident (если ранее использованный индекс удалён, действует так же, как n ) | |
relispartition | bool | True, если таблица или индекс является секцией | |
relrewrite | oid |
| Для новых отношений, записываемых в процессе операции DDL, требующей перезаписи таблицы, это поле содержит OID исходного отношения; в противном случае — 0. Это состояние видимо только внутри; в этом поле никогда не должно быть ненулевого значения для видимого пользователем отношения. |
relfrozenxid | xid | Идентификаторы транзакций, предшествующие данному, в этой таблице заменены постоянным («замороженным») идентификатором транзакции. Это нужно для определения, когда требуется очищать таблицу для сокращения объёма pg_xact . Если это отношение — не таблица, значение равно нулю (InvalidTransactionId ). | |
relminmxid | xid | Идентификаторы мультитранзакций, предшествующие данному, в этой таблице заменены другим идентификатором транзакции. Это нужно для определения, когда требуется очищать таблицу для сокращения объёма pg_multixact . Если это отношение — не таблица, значение равно нулю (InvalidMultiXactId ). | |
relacl | aclitem[] | Права доступа; за подробностями обратитесь к Разделу 5.7. | |
reloptions | text[] | Специальные параметры для методов доступа, в виде строк «ключ=значение» | |
relpartbound | pg_node_tree | Если таблица является секцией (см. relispartition ), внутреннее представление границ секции |
Некоторые логические флаги в pg_class
поддерживаются не строго: гарантируется, что они будут установлены при переходе в определённое состояние, но они могут не сбрасываться немедленно, когда условия поменяются. Например, relhasindex
устанавливается командой CREATE INDEX
, но никогда не сбрасывается командой DROP INDEX
. Вместо этого, флаг relhasindex
сбрасывается командой VACUUM
, если она находит, что в таблице нет индексов. Такая организация позволяет избежать состояния гонки и способствует параллельному использованию.