pg_class
Каталог pg_class
каталогизирует таблицы и большую часть всего остального, что имеет столбцы или иным образом похоже на таблицу. Это включает индексы (но также pg_index
), последовательности (но также pg_sequence
), представления, материализованные представления, составные типы и таблицы TOAST
; см. relkind
. Ниже, когда мы имеем в виду все эти виды объектов, мы говорим о «отношениях». Не все столбцы pg_class
имеют значение для всех видов отношений.
Столбец | Тип данных | Описание |
---|---|---|
oid | oid | Идентификатор строки |
relname | name | имя столбца |
relnamespace | oid (ссылается на pg_namespace.oid) | OID пространства имен, которое содержит это отношение |
reltype | oid (ссылается на pg_type.oid) | OID типа данных, который соответствует типу строки этой таблицы, если таковой имеется; ноль для индексов, последовательностей и таблиц toast, которые не имеют записи pg_type |
reloftype | oid (ссылается на pg_type.oid)) | Для напечатанных таблиц OID базового композитного типа; ноль для всех других отношений |
relowner | oid (ссылается на pg_authid.oid) | Владелец отношения |
relam | oid (ссылается на pg_am.oid) | Если это таблица или индекс, используемый метод доступа (Heap, B-Tree, Hash и т. Д.); в противном случае ноль (ноль происходит для последовательностей, а также отношений без хранения, таких как представления |
relfilenode | oid | Имя дискового файла этого отношения; ноль означает, что это «сопоставленное» отношение, имя дискового файла которого определяется состоянием низкого уровня |
reltablespace | oid (ссылается на pg_tablespace.oid) | Табличное пространство, в котором хранится это отношение. Если подразумевается ноль, то подразумевается ноль базы данных. Не имеет смысла, если отношение не имеет файла на диск, за исключением разделенных таблиц, где это табличное пространство, в котором разделам будет создаваться, когда кто-то не указан в команде создания. |
relpages | int4 | Размер представления этой таблицы на диске в страницах (размер BLCKSZ). Это только оценка, используемая планировщиком. Она обновляется VACUUM, ANALYZE и несколькими командами DDL, такими как CREATE INDEX |
reltuples | float4 | Число живых строк в таблице. Это только оценка, используемая планировщиком. Она обновляется VACUUM, ANALYZE и несколькими командами DDL, такими как CREATE INDEX. Если таблица еще не была очищена или проанализирована, reltuples содержит -1, что указывает на то, что количество строк неизвестно |
relallvisible | int4 | Количество страниц, которые помечены как полностью видимые на карте видимости таблицы. Это только оценка, используемая планировщиком. Она обновляется VACUUM, ANALYZE и несколькими командами DDL, такими как CREATE INDEX |
reltoastrelid | oid (ссылается на pg_class.oid) | OID таблицы TOAST, связанной с этой таблицей, ноль, если нет. Таблица TOAST хранит большие атрибуты, которые не соответствуют строке, во вторичной таблице |
relhasindex | bool | True, если это таблица и у нее есть (или недавно были) какие-либо индексы |
relisshared | bool | True, если эта таблица совместно используется всеми базами данных в кластере. Общими являются только определенные системные каталоги (например, pg_database) |
возвратность | char | p = постоянная таблица/последовательность, u = незарегистрированная таблица/последовательность, t = временная таблица/последовательность |
relkind | char | r = обычная таблица, i = индекс, S = последовательность, t = таблица TOAST, v = представление, m = материализованное представление, c = композитный тип, f = сторонняя таблица, p = секционированная таблица, I = секционированный индекс |
relnatts | int2 | Количество пользовательских столбцов в отношении (системные столбцы не учитываются). Должно быть так много соответствующих записей в атрибуте pg_. См. также 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 |
перезаполненный | bool | True, если заполнено отношение (это верно для всех отношений, кроме некоторых материализованных представлений) |
relreplident | char | Столбцы, используемые для формирования «идентичности реплики» для строк: d = по умолчанию (первичный ключ, если таковой имеется), n = ничего, f = все столбцы, i = индекс с набором indisreplident (то же самое, что и ничего, если используемый индекс был удален) |
relispartition | bool | True, если таблица или индекс является разделом |
rerewrite | oid (ссылается на pg_class.oid) | Для новых отношений, написанных во время операции DDL, которая требует перезаписи таблицы, это содержит OID исходного отношения; в остальном нулевое. Это состояние видно только внутри; это поле никогда не должно содержать ничего, кроме нуля для отношения, видимого пользователю |
relfrozenxid | xid | Все идентификаторы транзакций до этого были заменены постоянным («замороженным») идентификатором транзакции в этой таблице. Это используется для отслеживания того, нужно ли очистить таблицу, чтобы предотвратить обращение к идентификатору транзакции или позволить сузить pg_xact. Нулевой (InvalidTransactionId), если отношение не является таблицей |
relminmxid | xid | Все идентификаторы мультифакта до этого были заменены идентификатором транзакции в этой таблице. Это используется для отслеживания того, нужно ли очистить таблицу, чтобы предотвратить обращение идентификатора мультифакта или позволить сузить pg_multixact. Ноль (InvalidMultiXactId), если отношение не является таблицей |
relacl | aclitem[] | Права доступа |
reloptions | text[] | Cпецифичные для метода доступа, как строки «ключевое слово = значение» |
relpartbound | pg_node_tree | Если таблица является разделом (см. relispartition), внутреннее представление раздела, связанного |
Несколько булевых флагов в pg_class
поддерживаются лениво: они гарантированно верны, если это правильное состояние, но не могут быть сразу сбросены до false
, когда условие больше не является верным. Например, relhasindex
устанавливается командой CREATE INDEX
, но никогда не очищается командой DROP INDEX
. Вместо этого VACUUM очищает relhasindex
, если обнаруживает, что таблица не имеет индексов. Такое расположение позволяет избегать условий гонки и улучшает параллелизм.