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, если обнаруживает, что таблица не имеет индексов. Такое расположение позволяет избегать условий гонки и улучшает параллелизм.