49.11. pg_class

В каталоге pg_class описываются таблицы и практически всё, что имеет столбцы или каким-то образом подобно таблице. Сюда входят индексы (но смотрите также pg_index), последовательности, представления, материализованные представления, составные типы и таблицы TOAST; см. relkind. Далее, подразумевая все эти типы объектов, мы будем говорить об "отношениях". Не все столбцы здесь имеют смысл для всех типов отношений.

Таблица 49-11. Столбцы pg_class

ИмяТипСсылкиОписание
oid oid  Идентификатор строки (скрытый атрибут; должен выбираться явно)
relname name  Имя таблицы, индекса, представления и т. п.
relnamespace oid pg_namespace.oid OID пространства имён, содержащего это отношение
reltype oid pg_type.oid OID типа данных, соответствующего типу строки этой таблицы, если таковой есть (ноль для индексов, так как они не имеют записи в pg_type)
reloftype oid pg_type.oid Для типизированных таблиц, OID нижележащего составного типа, или ноль для всех других отношений
relowner oid pg_authid.oid Владелец отношения
relam oid pg_am.oid Если это индекс, применяемый метод доступа (B-дерево, хеш и т. д.)
relfilenode oid  Имя файла на диске с этим отношением; ноль означает, что это "отображённое" представление, имя файла для которого определяется состоянием на нижнем уровне
reltablespace oid pg_tablespace.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 pg_class.oid OID таблицы TOAST, связанной с данной таблицей, или 0, если таковой нет. В таблицу TOAST, как во вторичную, "выносятся" большие атрибуты.
relhasindex bool  True, если это таблица и она имеет (или недавно имела) индексы
relisshared bool  True, если эта таблица разделяется всеми базами данных в кластере. Разделяемыми являются только некоторые системные каталоги (как например, pg_database).
relpersistence char  p = постоянная таблица (permanent), u = нежурналируемая таблица (unlogged), t = временная таблица (temporary)
relkind char  r = обычная таблица, i = индекс (index), S = последовательность (sequence), v = представление (view), m = материализованное представление (materialized view), c = составной тип (composite), t = таблица TOAST, f = сторонняя таблица (foreign)
relnatts int2  Число пользовательских столбцов в отношении (системные столбцы не считаются). Столько же соответствующих строк должно быть в pg_attribute. См. также pg_attribute.attnum.
relchecks int2  Число ограничений CHECK в таблице; см. каталог pg_constraint
relhasoids bool  True, если для каждой строки отношения генерируется OID
relhaspkey bool  True, если в таблице имеется (или имелся) первичный ключ
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 = индекс (index), если задано значение indisreplident, либо набор по умолчанию
relfrozenxid xid  Идентификаторы транзакций, предшествующие данному, в этой таблице заменены постоянным ("замороженным") идентификатором транзакции. Это нужно для определения, когда требуется очищать таблицу для предотвращения зацикливания идентификаторов или для сокращения объёма pg_clog. Если это отношение — не таблица, значение равно нулю (InvalidTransactionId).
relminmxid xid  Идентификаторы мультитранзакций, предшествующие данному, в этой таблице заменены другим идентификатором транзакции. Это нужно для определения, когда требуется очищать таблицу для предотвращения зацикливания идентификаторов мультитранзакций или для сокращения объёма pg_multixact. Если это отношение — не таблица, значение равно нулю (InvalidMultiXactId).
relacl aclitem[]  Права доступа; за подробностями обратитесь к описанию GRANT и REVOKE
reloptions text[]  Специальные параметры для методов доступа, в виде строк "ключ=значение"

Некоторые логические флаги в pg_class поддерживаются не строго: гарантируется, что они будут установлены при переходе в определённое состояние, но они могут не сбрасываться немедленно, когда условия поменяются. Например, relhasindex устанавливается командой CREATE INDEX, но никогда не сбрасывается командой DROP INDEX. Вместо этого, флаг relhasindex сбрасывается командой VACUUM, если она находит, что в таблице нет индексов. Такая организация позволяет избежать состояния гонки и способствует параллельному использованию.