Системные каталоги

Системные каталоги — это место, где система управления реляционными базами данных хранит метаданные схемы, такие как сведения о таблицах и столбцах, а также информацию о внутреннем бухгалтерском учете. Системные каталоги QHB — это обычные таблицы. Вы можете удалить и пересоздать их, добавить столбцы, вставить и обновить значения — и тем самым сильно испортить свою систему. В большинстве случаев не следует изменять системные каталоги вручную, для этого обычно существуют команды SQL. (Например, CREATE DATABASE вставляет строку в каталог pg_database и фактически создает базу данных на диске.) Есть некоторые исключения для особенно сложных операций, но многие из них с течением времени становятся доступны в виде команд SQL, и поэтому необходимость в прямом манипулировании системными каталогами постоянно уменьшается.

Обзор

В таблице Системные каталоги перечислены системные каталоги. Более подробная документация по каждому каталогу приводится ниже.

Большинство системных каталогов копируются из шаблона базы данных во время ее создания и затем зависят от конкретной базы данных. Несколько каталогов физически совместно используются во всех базах данных в кластере — они отмечаются в описаниях отдельных каталогов.

Таблица: Системные каталоги

имя каталогаЦель
pg_aggregateагрегатные функции
pg_amметоды доступа отношений
pg_amopоператоры метода доступа
pg_amprocфункции поддержки метода доступа
pg_attrdefзначения столбца по умолчанию
pg_attributeстолбцы таблицы («атрибуты»)
pg_authidидентификаторы авторизации (роли)
pg_auth_membersотношения членства идентификатора авторизации
pg_castприведения (преобразования типов данных)
pg_classтаблицы, индексы, последовательности, представления («отношения»)
pg_collationпараметры сортировки (сведения о локали)
pg_constraintпроверочные ограничения, ограничения уникальности, ограничения первичного ключа, ограничения внешнего ключа
pg_conversionкодирование информация о преобразовании
pg_databaseбазы данных в этом кластере
pg_db_role_settingпараметры для каждой роли и базы данных
pg_default_aclправа доступа по умолчанию для типов объектов
pg_dependзависимости между объектами базы данных
pg_descriptionописания или комментарии объектов базы данных
pg_enumопределения меток и значений перечислений
pg_event_triggerтриггеры событий
pg_extensionустановленные расширения
pg_foreign_data_wrapperопределения оберток сторонних данных
pg_foreign_serverопределения сторонних серверов
pg_foreign_tableдополнительная информация по сторонней таблице
pg_indexдополнительная информация по индексам
pg_inheritsиерархия наследования таблиц
pg_init_privsначальные права объекта
pg_languageязыки для написания функций
pg_largeobjectстраницы данных для больших объектов
pg_largeobject_metadataметаданные для больших объектов
pg_namespaceсхемы
pg_opclassклассы операторов метода доступа
pg_operatorоператоры
pg_opfamilyсемейства операторов метода доступа
pg_partitioned_tableинформация о ключе разбиения таблиц
pg_policyполитики защиты строк
pg_procфункции и процедуры
pg_publicationпубликации для логической репликации
pg_publication_relсопоставление отношения с публикацией
pg_rangeинформация о типах диапазонов
pg_replication_originзарегистрированные источники репликации
pg_rewriteправила перезаписи запроса
pg_seclabelметки безопасности для объектов базы данных
pg_sequenceинформация о последовательностях
pg_shdependзависимости от общих объектов
pg_shdescriptionкомментарии к общим объектам
pg_shseclabelметки безопасности для общих объектов базы данных
pg_statisticстатистика планировщика
pg_statistic_extрасширенная статистика планировщика (определение)
pg_statistic_ext_dataрасширенная статистика планировщика (собранная статистика)
pg_subscriptionподписки на логическую репликацию
pg_subscription_relсостояние связи для подписок
pg_tablespaceтабличные пространства в кластере базы данных
pg_transformпреобразования (преобразование типа данных в процедурный язык)
pg_triggerтриггеры
pg_ts_configконфигурации текстового поиска
pg_ts_config_mapсопоставления маркеров конфигураций текстового поиска
pg_ts_dictсловари текстового поиска
pg_ts_parserсинтаксические анализаторы текстового поиска
pg_ts_templateшаблоны текстового поиска
pg_typeтипы данных
pg_user_mappingсопоставления пользователей для сторонних серверов

pg_aggregate

В каталоге pg_aggregate хранится информация об агрегатных функциях. Агрегатная функция — это функция, которая работает с набором значений (как правило, с одним столбцом из каждой строки, которая соответствует условию запроса) и возвращает одно значение, вычисленное из всех этих значений. Типичными агрегатными функциями являются sum, count и max. Каждая запись внутри pg_aggregate представляет собой расширение записи в pg_proc. Запись в pg_proc содержит имя агрегата, типы входных и выходных данных, а также другую информацию, аналогичную имеющейся у обычных функций.

Таблица: Столбцы pg_aggregate

ИмяТипСсылкиОписание
aggfnoidregprocpg_proc.oidOID агрегатной функции в pg_proc
aggkindcharВид агрегатной функции: n для обычной (normal), o для сортирующей (ordered-set) или h для гипотезирующей (hypothetical-set)
aggnumdirectargsint2Число прямых (неагрегированных) аргументов сортирующей или гипотезирующей агрегатной функции, считая переменный массив аргументов за один аргумент. Если равняется pronargs, агрегатная функция должна принимать переменный массив, и этот массив описывает как агрегированные аргументы, так и конечные прямые аргументы. Всегда равно нулю для обычных агрегатных функций.
aggtransfnregprocpg_proc.oidФункция перехода
aggfinalfnregprocpg_proc.oidФункция завершения (ноль, если ее нет)
aggcombinefnregprocpg_proc.oidФункция совмещения (ноль, если ее нет)
aggserialfnregprocpg_proc.oidФункция сериализации (ноль, если ее нет)
aggdeserialfnregprocpg_proc.oidФункция десериализации (ноль, если ее нет)
aggmtransfnregprocpg_proc.oidФункция прямого перехода для режима движущегося агрегата (ноль, если ее нет)
agminvtransfnregprocpg_proc.oidФункция обратного перехода для режима движущегося агрегата (ноль, если ее нет)
aggmfinalfnregprocpg_proc.oidФункция завершения для режима движущегося агрегата (ноль, если ее нет)
aggfinalextraboolПри значении true в aggfinalfn передаются дополнительные фиктивные аргументы
aggmfinalextraboolПри значении true в aggmfinalfn передаются дополнительные фиктивные аргументы
aggfinalmodifycharИзменяет ли aggfinalfn значение состояния перехода: r, если состояние доступно только для чтения (read), s, если aggtransfn не может быть применена после aggfinalfn, или w, если состояние перезаписывается (write).
aggmfinalmodifycharСходно с aggfinalmodify, но для самого aggmfinalfn
aggsortopoidpg_operator.oidСвязанный оператор сортировки (ноль, если его нет)
aggtranstypeoidpg_type.oidТип данных внутреннего перехода (состояния) агрегатной функции
aggtransspaceint4Приблизительный средний размер (в байтах) данных о состоянии перехода или 0 для использования оценки по умолчанию
aggmtranstypeoidpg_type.oidТип данных внутреннего перехода (состояния) агрегатной функции для режима движущегося агрегата (ноль, если его нет)
aggmtransspaceint4Приблизительный средний размер (в байтах) данных о состоянии перехода для режима движущегося агрегата или 0 для использования оценки по умолчанию
agginitvaltextНачальное значение переходного состояния. Это текстовое поле, содержащее начальное значение во внешнем строковом представлении. Если это поле имеет значение NULL, то значение состояния перехода начнется с NULL.
agginitvaltextНачальное значение переходного состояния для режима движущегося агрегата. Это текстовое поле, содержащее начальное значение во внешнем строковом представлении. Если это поле имеет значение NULL, то значение состояния перехода начнется с NULL.

Новые агрегатные функции регистрируются с помощью команды CREATE AGGREGATE. Дополнительную информацию о написании агрегатных функций и значении функций перехода см. в разделе Пользовательские агрегаты.

pg_am

В каталоге pg_am хранится информация о методах доступа к отношениям. Для каждого метода доступа, поддерживаемого системой, существует одна строка. В настоящее время только таблицы и индексы имеют методы доступа. Требования к методам доступа к таблицам и индексам подробно рассматриваются в главах Интерфейс доступа к таблице и Интерфейс доступа индекса соответственно.

Таблица: Столбцы pg_am

ИмяТипСсылкиОписание
oidoidИдентификатор строки
amnamenameИмя метода доступа
amhandlerregprocpg_proc.oidOID функции обработчика, ответственного за предоставление информации о методе доступа
amtypechart = таблица (включая материализованные представления) (table), i = индекс (index).

Примечание
Данные о свойствах индексных методов доступа напрямую видны только на уровне кода С. Однако запросы SQL могут проверять эти свойства с помощью pg_index_column_has_property() и связанных функций.

pg_amop

В каталоге pg_amop хранится информация об операторах, связанных с семействами операторов метода доступа. Для каждого оператора, который является членом семейства операторов, существует одна строка. Членом семейства может быть либо оператор поиска, либо оператор упорядочивания. Оператор может принадлежать нескольким семействам, но в пределах одного семейства не может находиться более чем в одной позиции поиска или позиции упорядочивания. (Допустимо, хотя и маловероятно, что оператор будет использоваться как для поиска, так и для сравнения.)

Таблица: Столбцы pg_amop

ИмяТипСсылкиОписание
oidoidИдентификатор строки
amopfamilyoidpg_opfamily.oidСемейство операторов, для которых эта запись предназначена
amoplefttypeoidpg_type.oidТип данных левого операнда оператора
amoprighttypeoidpg_type.oidТип данных правого операнда оператора
amopstrategyint2Номер стратегии оператора
amoppurposecharНазначение оператора: s для поиска (search), о для упорядочивания (order by)
amopoproidpg_operator.oidOID оператора
amopmethodoidpg_am.oidСемейство операторов индексного метода доступа
amopsortfamilyoidpg_opfamily.oidСемейство операторов B-дерева, в соответствии с которым данный оператор сортирует, если это оператор упорядочивания, и 0, если это оператор поиска

Запись оператора «поиска» указывает, что индекс этого семейства операторов может быть использован для поиска всех строк, удовлетворяющих требованию WHERE столбец_индекса оператор константа. Очевидно, что такой оператор должен вернуть тип boolean, а тип его левого операнда должен соответствовать типу данных столбца индекса.

Запись оператора «упорядочивания» указывает, что индекс этого семейства операторов может быть отсканирован для возврата строк в порядке, представленном ORDER BY столбец_индекса оператор константа. Такой оператор может возвращать любой сортируемый тип данных, хотя, опять же, тип его левого операнда должен соответствовать типу данных столбца индекса. Точная семантика выражения ORDER BY определяется по столбцу amopsortfamily, который должен указывать на семейство операторов B-дерева для типа, возвращаемого оператором.

Примечание
В настоящее время предполагается, что порядок сортировки для оператора упорядочивания является значением по умолчанию для указанного семейства операторов, т. е. ASC NULLS LAST. Возможно, когда-нибудь для придания большей гибкости будут добавлены дополнительные столбцы, чтобы явно указать параметры сортировки.

Поле amopmethod в записи оператора должно соответствовать полю opfmethod содержащего его семейства операторов (в данном случае включение amopmethod является преднамеренной денормализацией структуры каталога из соображений производительности). Кроме того, поля amoplefttype и amoprighttype должны соответствовать полям oprleft и oprright соответствующей записи в pg_operator.

pg_amproc

В каталоге pg_amproc хранится информация о функциях, поддерживаемых оператором и связанных с семействами операторов метода доступа. Для каждой вспомогательной функции, принадлежащей семейству операторов, существует одна строка.

Таблица: Столбцы pg_amproc

ИмяТипСсылкиОписание
oidoidИдентификатор строки
amprocfamilyoidpg_opfamily.oidСемейство операторов, для которых предназначается эта запись
amproclefttypeoidpg_type.oidТип данных левого операнда связанного оператора
amprocrighttypeoidpg_type.oidТип данных правого операнда связанного оператора
amprocnumint2Номер вспомогательной функции
amprocregprocpg_proc.oidOID функции

Обычная интерпретация полей amproclefttype и amprocrighttype состоит в том, что они определяют типы левого и правого операнда оператора(ов), который(ые) поддерживает определенная вспомогательная функция. Для некоторых методов доступа они соответствуют типу(ам) входных данных самой вспомогательной функции, для других — нет. Существует такое понятие, как вспомогательные функции для индекса «по умолчанию». Это функции, у которых amproclefttype и amprocrighttype равны opcintype класса операторов индекса.

pg_attrdef

В каталоге pg_attrdef хранятся значения столбца по умолчанию. Основная информация о столбцах находится в каталоге pg_attribute. В этом каталоге хранятся только те столбцы, для которых было явно установлено значение по умолчанию.

Таблица: Столбцы pg_attrdef

ИмяТипСсылкиОписание
oidoidИдентификатор строки
adrelidoidpg_class.oidТаблица, которой принадлежит этот столбец
adnumint2pg_attribute.attnumНомер столбца
adbinpg_node_treeЗначение столбца по умолчанию в формате nodeToString(). Чтобы преобразовать его в выражение SQL, воспользуйтесь функцией pg_get_expr(adbin, adrelid).

pg_attribute

В каталоге pg_attribute хранится информация о столбцах таблицы. Для каждого столбца в каждой таблице базы данных будет храниться ровно одна строка pg_attribute. (Также будут храниться записи атрибутов для индексов и всех объектов, которые имеют записи в pg_class).

Термин «атрибут» равнозначен столбцу и используется по историческим причинам.

Таблица: Столбцы pg_attribute

ИмяТипСсылкиОписание
attrelidoidpg_class.oidТаблица, которой принадлежит этот столбец
attnamenameИмя столбца
atttypidoidpg_type.oidТип данных этого столбца
attstattargetint4attstattarget управляет уровнем детализации статистики, накопленной для данного столбца при помощи команды ANALYZE. Нулевое значение указывает на то, что статистика не должна собираться. Отрицательное значение указывает на использование цели системной статистики по умолчанию. Точное значение положительных значений зависит от типа данных. Для скалярных типов данных attstattarget является как целевым числом «наиболее распространенных значений» для сбора, так и целевым числом создаваемых интервалов гистограммы.
attlenint2Копия pg_type.typlen типа этого столбца
attnumint2Номер столбца. Обычные столбцы пронумерованы от 1 и выше. Системные столбцы, такие как ctid, имеют отрицательные номера (произвольные).
attndimsint4Число размерностей, если столбец имеет тип массива; в противном случае ноль. (В настоящее время число размерностей массива не регулируется, поэтому любое ненулевое значение означает «это массив».)
attcacheofint4Всегда -1 в хранилище, но при загрузке в дескриптор строки в памяти это поле может быть изменено в целях кэширования смещения атрибута в строке
atttypmodint4В поле atttypmod записываются специфичные для определенного типа данные, предоставляемые при создании таблицы (например, максимальную длину столбца varchar). Эти данные передаются функциям ввода определенного типа и функциям ограничения длины. Для типов, которые не нуждаются в atttypmod, значение обычно равно -1.
attbyvalboolКопия pg_type.typbyval типа этого столбца
attstoragecharОбычно это копия pg_type.typsize типа этого столбца. Для типов данных, поддерживающих TOAST, этот атрибут можно изменить после создания столбца в целях управления политикой хранения.
attaligncharКопия pg_type.typalign типа этого столбца
attnotnullboolПредставляет ограничение NOT NULL.
atthasdefboolЭтот столбец имеет выражение по умолчанию или генерирующее выражение; в этом случае в каталоге pg_attrdef, который фактически определяет данное выражение, появится соответствующая запись. (Определить, какое это выражение: по умолчанию или генерирующее, можно, проверив attgenerated.)
atthasmissingboolЭтот столбец имеет значение, которое используется, когда столбец полностью отсутствует в строке (это происходит, когда столбец добавляется с неизменяющимся значением DEFAULT после создания строки). Используемое фактическое значение хранится в столбце attmissingval.
attidentitycharПустой символ ('') указывает, что это не столбец идентификации. a = значение генерируется всегда (always), d = значение генерируется по умолчанию (by default).
attgeneratedcharПустой символ ('') указывает, что это не генерируемый столбец. s = генерируемое значение хранится (stored). (В будущем могут быть добавлены и другие значения.)
attisdroppedboolЭтот столбец был удален и стал нерабочим. Удаленный столбец все еще физически присутствует в таблице, но игнорируется синтаксическим анализатором и поэтому не может быть доступен через SQL.
attislocalboolЭтот столбец определяется локально в отношении. Обратите внимание, что столбец может быть локально определен и унаследован одновременно.
attinhcountint4Число прямых предков этого столбца. Столбец с ненулевым числом предков нельзя удалить или переименовать.
attcollationoidpg_collation.oidЗаданные параметры сортировки столбца или ноль, если столбец не относится к сортируемому типу данных.
attaclaclitem[]Права доступа на уровне столбца, если они были предоставлены специально для этого столбца
attoptionstext[]Параметры уровня атрибута в виде строк «ключ=значение»
attfdwoptionstext[]Параметры внешней оболочки данных уровня атрибута в виде строк «ключ=значение»
attmissingvalanyarrayЭтот столбец имеет массив из одного элемента, содержащий значение, используемое, когда столбец полностью отсутствует в строке (это происходит, когда столбец добавляется с неизменяющимся значением DEFAULT после создания строки). Значение используется, только если atthasmissing равен true. Если значение отсутствует, столбец содержит NULL.

В записи удаленного(ых) столбца(ов) pg_attribute поле atttypid сбрасывается до нуля, но поле attlen и остальные поля, скопированные из pg_type все еще действительны. Это необходимо, чтобы справиться с ситуацией, когда после удаления столбца удаляется и его тип данных, и поэтому соответствующей строки pg_type тоже нет. Поле attlen и остальные поля можно использовать для интерпретации содержимого строки таблицы.

pg_authid

В каталоге pg_authid хранится информация об идентификаторах авторизации базы данных (ролях). Роль включает в себя понятия «пользователи» и «группы». Пользователь — это просто роль с установленным флагом rolcanlogin. Любая роль (с rolcanlogin или без него) может иметь другие роли в качестве членов; см. описание каталога pg_auth_members.

Поскольку этот каталог содержит пароли, он не должен быть общедоступным. pg_roles — это публично доступное представление на базе pg_authid, которое скрывает поле пароля.

В главе Роли в базе данных содержатся подробные сведения об управлении пользователями и их правами.

Поскольку аутентификация пользователей проводится для всего кластера, pg_authid является общим каталогом для всех баз данных кластера: существует только одна копия pg_authid на кластер, а не собственная для каждой базы данных.

Таблица: Столбцы pg_authid

ИмяТипОписание
oidoidИдентификатор строки
rolnamenameИмя роли
rolsuperboolРоль имеет права суперпользователя
rolinheritboolРоль автоматически наследует права ролей, членом которых является
rolcreateroleboolРоль может создавать другие роли
rolcreatedbboolРоль может создавать базы данных
rolcanloginboolРоль может войти в систему. То есть эта роль может быть задана в качестве идентификатора авторизации начального сеанса
rolreplicationboolРоль является ролью репликации. Роль репликации может инициировать подключения репликации и создавать и удалять слоты репликации.
rolbypassrlsboolРоль обходит политику защиты уровня строки; дополнительную информацию см. в разделе Политики защиты строк.
rolconnlimitint4Для ролей, которые могут войти в систему, задает максимальное число одновременных подключений, которые может создать эта роль. -1 означает отсутствие ограничений.
rolpasswordtextПароль (возможно зашифрованный); NULL, если он не задан. Формат зависит от используемой формы шифрования.
rolvaliduntiltimestamptzСрок действия пароля (используется только для аутентификации по паролю); NULL, если срок действия не ограничен

Для пароля, зашифрованного MD5, столбец rolpassword будет начинаться со строки md5, за которой следует 32-символьный шестнадцатеричный хэш MD5. Хэш MD5 будет содержать пароль пользователя, связанный с его именем. Например, если пользователь joe имеет пароль xyzzy, QHB будет хранить хэш md5 строки xyzzyjoe.

Если пароль зашифрован с помощью SCRAM-SHA-256, он имеет следующий формат:

SCRAM-SHA-256$<число итераций>:<соль>$<СохраненныйКлюч>:<КлючСервера>

где соль, СохраненныйКлюч и КлючСервера кодируются в формате Base64. Этот формат совпадает с форматом, указанным в документе RFC 5803.

Пароль, который не соответствует ни одному из этих форматов, считается незашифрованным.

pg_auth_members

В каталоге pg_auth_members представлены отношения членства между ролями. Допускается любой нециклический набор отношений.

Поскольку авторизация пользователей является кластерной, pg_auth_members является общим каталогом для всех баз данных кластера: существует только одна копия pg_auth_members на кластер, а не для каждой базы данных.

Таблица: Столбцы pg_auth_members

ИмяТипСсылкиОписание
roleidoidpg_authid.oidИдентификатор роли, имеющей участника
memberoidpg_authid.oidИдентификатор роли, которая является членом roleid
grantoroidpg_authid.oidИдентификатор роли, предоставившей это членство
admin_optionboolTrue, если member может предоставить членство в roleid другим ролям

pg_cast

В каталоге pg_cast хранятся как встроенные, так и определяемые пользователем пути преобразования типов данных.

Следует отметить, что pg_cast содержит не все преобразования типов, которые система умеет выполнять, а только те, которые нельзя вывести из некоторого общего правила. Например, приведение между доменом и его базовым типом в pg_cast явно не представлено. Еще одним важным исключением является то, что в каталоге pg_cast явно не представлены «автоматические приведения преобразования ввода-вывода», которые выполняются, используя для преобразования в/из text или других строковых типов собственные функции ввода-вывода типа данных.

Таблица: Столбцы pg_cast

ИмяТипСсылкиОписание
oidoidИдентификатор строки
castsourceoidpg_type.oidOID исходного типа данных
casttargetoidpg_type.oidOID целевого типа данных
castfuncoidpg_proc.oidOID функции, которая будет использоваться для выполнения этого приведения. Ноль, если для данного метода приведения функция не требуется.
castcontextcharУказывает, в каких контекстах приведение может быть вызвано. e означает только явное приведение (explicit) с использованием синтаксиса CAST или ::. а означает неявное и явное приведение при присвоении (assignment) целевому столбцу. i означает неявное (implicitly) приведение в выражениях, а также в других случаях.
castmethodcharУказывает, как выполняется приведение. f означает, что используется функция (function), указанная в столбце castfunc. i означает, что используются функции ввода/вывода (input/output). b означает, что типы являются двоично-совместимыми (binary-coercible), поэтому преобразование не требуется.

Функции приведения, перечисленные в pg_cast, должны всегда принимать исходный тип приведения в качестве типа первого аргумента и возвращать результат, имеющий целевой тип приведения. Функция приведения может иметь до трех аргументов. Второй аргумент, если он присутствует, должен иметь тип integer; он получает модификатор типа, связанный с целевым типом, или -1, если модификатора нет. Третий аргумент, если он присутствует, должен иметь тип boolean; он получает значение true, если приведение является явным, в противном случае — false.

Есть возможность создать в pg_cast запись, в которой исходные и целевые типы совпадают, если связанная функция принимает более одного аргумента. Такие функции представляют собой «функции приведения длины», которые добиваются того, чтобы значения типа подходили определенному значению модификатора типа.

Когда запись в pg_cast имеет различные исходный и целевой типы, а функция принимает более одного аргумента, эта запись представляет собой преобразование из одного типа в другой и применение приведения длины за один шаг. Если такая запись недоступна, приведение к типу, использующему модификатор типа, включает два шага: один для преобразования между типами данных и второй для применения модификатора.

pg_class

Каталог pg_class содержит информацию о таблицах и практически всех остальных объектах, которые имеет столбцы или иным образом похожи на таблицу. Этот каталог включает в себя индексы (см. также описание каталога pg_index), последовательности (см. также описание каталога pg_sequence), представления, материализованные представления, составные типы и таблицы TOAST (см. описание столбца relkind). Ниже, подразумевая все эти виды объектов, мы говорим об «отношениях». Не все столбцы в каталоге значимы для всех типов отношений.

Таблица: Столбцы pg_class

ИмяТипСсылкиОписание
oidoidИдентификатор строки
relnamenameИмя таблицы, индекса, представления и т.д.
relnamespaceoidpg_namespace.oidOID пространства имен, содержащего это отношение
reltypeoidpg_type.oidOID типа данных, который соответствует типу строки этой таблицы, если таковой имеется (ноль для индексов, у которых нет записи в pg_type)
reloftypeoidpg_type.oidOID базового составного типа для типизированных таблиц или 0 для всех остальных отношений
relowneroidpg_authid.oidВладелец отношения
relamoidpg_am.oidЕсли это таблица или индекс, то используемый метод доступа (куча, B-дерево, хэш и т. д.)
relfilenodeoidИмя файла на диске для этого отношения; Ноль означает, что это «сопоставленное» отношение, для которого имя файла на диске определяется состоянием на нижнем уровне
reltablespaceoidpg_tablespace.oidТабличное пространство, в котором хранится это отношение. Если значение равно нулю, подразумевается табличное пространство базы данных по умолчанию. (Не имеет смысла, если отношение не имеет файла на диске.)
relpagesint4Размер представления этой таблицы на диске в страницах (размера BLCKSZ). Это только приблизительная оценка, используемая планировщиком. Она обновляется с помощью команд VACUUM, ANALYZE и нескольких команд DDL, таких как CREATE INDEX.
reltuplesfloat4Количество активных строк в таблице. Это только приблизительная оценка, используемая планировщиком. Она обновляется с помощью команд VACUUM, ANALYZE и нескольких команд DDL, таких как CREATE INDEX.
relallvisibleint4Количество страниц, отмеченных как полностью видимые на карте видимости таблицы. Это только приблизительная оценка, используемая планировщиком. Она обновляется с помощью команд VACUUM, ANALYZE и нескольких команд DDL, таких как CREATE INDEX.
reltoastrelidoidpg_class.oidOID таблицы TOAST, связанной с этой таблицей, или ноль, если такой таблицы нет. Таблица TOAST хранит большие атрибуты «вынесенными» во вторичную таблицу.
relhasindexboolTrue, если это таблица и она имеет (или недавно имела) какие-либо индексы
relissharedboolTrue, если эта таблица является разделяемой для всех баз данных в кластере. Только определенные системные каталоги (такие как pg_database) являются разделяемыми.
relpersistencecharp = постоянная таблица (permanent), u = незарегистрированная таблица (unlogged), t = временная таблица (temporary)
relkindcharr = Обычная таблица (regular), i = индекс (index), s = последовательность (sequence), t = таблица TOAST, v = представление (view), m = материализованное представление (materialized), c = составной тип (composite), f = сторонняя таблица (foreign), p = партиционированная таблица (partitioned), I = партиционированный индекс
relnattsint2Количество пользовательских столбцов в отношении (системные столбцы не учитываются). Должно быть такое же количество соответствующих записей в pg_attribute. См. также pg_attribute.attnum.
relchecksint2Количество ограничений CHECK (проверочных) у таблицы; см. каталог pg_constraint
relhasrulesboolTrue, если таблица имеет (или когда-то имела) правила; см. каталог pg_rewrite
relhastriggersboolTrue, если таблица имеет (или когда-то имела) триггеры; см. каталог pg_trigger
relhassubclassboolTrue, если таблица или индекс имеют (или когда-то имели) потомков в результате наследования
relrowsecurityboolTrue, если в таблице включена защита на уровне строк; см. каталог pg_policy
relforcerowsecurityboolTrue, если защита уровня строк (если она включена) будет также применяться и к владельцу таблицы; см. каталог pg_policy
relispopulatedboolTrue, если отношение заполнено (это справедливо для всех отношений, кроме некоторых материализованных представлений)
relreplidentcharСтолбцы, используемые для формирования «идентификации реплики» для строк: d = по умолчанию (первичный ключ, если есть), n = ничего, f = все столбцы, i = индекс со свойством indisreplident (если ранее использовавшийся индекс был удален, действует так же, как n)
relispartitionboolTrue, если таблица или индекс является партицией
relrewriteoidpg_class.oidДля новых отношений, записываемых во время операции DDL, которая требует перезаписи таблицы, это поле содержит OID исходного отношения; в противном случае ноль. Это состояние видимо только внутри; данное поле всегда должно содержать 0 для видимого пользователю отношения.
relfrozenxidxidВ этой таблице все идентификаторы транзакций, предшествующие данному, были заменены на постоянный («замороженный») идентификатор транзакции. Это используется для отслеживания того, нужно ли очистить таблицу для предотвращения зацикливания идентификатора транзакции или уменьшения размера pg_xact. Значение равно нулю (InvalidTransactionId), если данное отношение не является таблицей.
relminmxidxidВ этой таблице все идентификаторы мультитранзакций, предшествующие данному, были заменены на постоянный («замороженный») идентификатор транзакции. Это используется для отслеживания того, нужно ли очистить таблицу для предотвращения зацикливания идентификатора мультитранзакции или уменьшения размера pg_multixact. Значение равно нулю (InvalidMultiXactId), если данное отношение не является таблицей.
relaclaclitem[]Права доступа; дополнительную информацию см. в разделе Права
reloptionstext[]Параметры, специфичные для методов доступа, в виде строк «ключ=значение»
relpartboundpg_node_treeЕсли таблица является партицией (см. relispartition), внутреннее представление границ партиции

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

pg_collation

В каталоге pg_collation описываются доступные правила сортировки, которые в сущности представляют собой сопоставления между именем SQL и категориями локали операционной системы. Дополнительную информацию см. в разделе Поддержка правил сортировки.

Таблица: Столбцы pg_collation

ИмяТипСсылкиОписание
oidoidИдентификатор строки
collnamenameИмя правила сортировки (уникальное для каждого пространства имен и кодировки)
collnamespaceoidpg_namespace.oidOID пространства имен, содержащего это правило сортировки
collowneroidpg_authid.oidВладелец правила сортировки
collprovidercharПоставщик правила сортировки: d = установленный в базе данных по умолчанию (default), c = libc, i = icu
collisdeterministicboolЯвляется ли правило сортировки детерминированным?
collencodingint4Кодировка, в которой применимо правило сортировки, или -1, если оно работает для любой кодировки
collcollatenameLC_COLLATE для этого объекта сортировки
collctypenameLC_CTYPE для этого объекта сортировки
collversiontextВерсия правила сортировки для конкретного поставщика. Записывается при создании правила сортировки, а затем проверяется при его использовании для обнаружения изменений в его определении, которые могут привести к повреждению данных.

Обратите внимание, что уникальными ключами в этом каталоге являются (collname, collencoding, collnamespace), а не только (collname, collnamespace). QHB обычно игнорирует все правила сортировки, которые не имеют collencoding равным либо кодировке текущей базы данных, либо -1; кроме того, создание новых записей с тем же именем, что и запись с collencoding = -1, запрещено. Поэтому для определения правила сортировки достаточно использовать полное имя SQL (schema.name), даже если оно не является уникальным в соответствии с определением каталога. Такое определение каталога обусловлено тем, что во время инициализации кластера qhb_bootstrap заполняет его записями для всех доступных в системе локалей, поэтому каталог должен иметь возможность хранить записи для всех кодировок, которые могут когда-либо использоваться в кластере.

В базе данных template0 может быть полезно создать правила сортировки, кодировка которых не соответствует кодировке базы данных, так как они могут соответствовать кодировкам баз данных, впоследствии клонированных из template0. В настоящее время это придется сделать вручную.

pg_constraint

В каталоге pg_constraint хранятся проверочные и исключающие ограничения, ограничения уникальности, первичного и внешнего ключей для таблиц. (Ограничения столбцов не обрабатываются отдельно. Каждое ограничение столбца эквивалентно некоторому ограничению таблицы.) Ограничения NOT NULL представлены не здесь, а в каталоге pg_attribute.

Определяемые пользователем триггеры ограничений (созданные с помощью команды CREATE CONSTRAINT TRIGGER) также приводят к появлению записи в этой таблице.

Также здесь хранятся проверочные ограничения для доменов.

Таблица: Столбцы pg_constraint

ИмяТипСсылкиОписание
oidoidИдентификатор строки
connamenameИмя ограничения (не обязательно уникальное!)
connamespaceoidpg_namespace.oidOID пространства имен, содержащего это ограничение
contypecharc = проверочное ограничение (check), f = ограничение внешнего ключа (foreign), p = ограничение первичного ключа (primary), u = ограничение уникальности (unique), t = триггер ограничения (trigger), x = исключающее ограничение (exclusion)
condeferrableboolЯвляется ли ограничение откладываемым?
condeferredboolЯвляется ли ограничение отложенным по умолчанию?
convalidatedboolБыло ли это ограничение проверено? В настоящее время false может быть только для внешних ключей и ограничений CHECK
conrelidoidpg_class.oidТаблица, на которую наложено это ограничение; ноль, если это не ограничение таблицы
contypidoidpg_type.oidДомен, на который наложено это ограничение; ноль, если это не ограничение домена
conindidoidpg_class.oidИндекс, поддерживающий это ограничение, если это ограничение уникальности, первичного ключа, внешнего ключа или исключающее ограничение; в противном случае ноль
conparentidoidpg_constraint.oidСоответствующее ограничение в родительской партиционированной таблице, если это ограничение для партиции; в противном случае ноль
confrelidoidpg_class.oidЕсли это внешний ключ, то ссылочная таблица (на которую ссылается ключ); в противном случае ноль
confupdtypecharКод действия при обновлении внешнего ключа: a = нет действия (action), r = ограничить (restrict), c = каскадное действие (cascade), n = установить значение NULL, d = поведение по умолчанию (default)
confdeltypecharКод действия при удалении внешнего ключа: a = нет действия, r = ограничить, c = каскадное действие, n = установить значение NULL, d = поведение по умолчанию
confmatchtypecharТип соответствия для внешнего ключа: f = полный (full), p = частичный (partial), s = простой (simple)
conislocalboolЭто ограничение определяется локально для данного отношения. Обратите внимание, что ограничение может быть локально определено и унаследовано одновременно.
coninhcountint4Число предков прямого наследования от ограничения. Ограничение с ненулевым числом предков не может быть удалено или переименовано.
connoinheritboolОграничение определено локально для данного отношения и является ненаследуемым.
conkeyint2[]pg_attribute.attnumДля ограничения таблицы (включая внешние ключи, но не триггеры ограничений) — список столбцов с ограничением
confkeyint2[]pg_attribute.attnumДля внешнего ключа — список ссылочных столбцов
conpfeqopoid[]pg_operator.oidДля внешнего ключа — список операторов равенства для сравнений PK = FK
conppeqopoid[]pg_operator.oidДля внешнего ключа — список операторов равенства для сравнений PK = PK
conffeqopoid[]pg_operator.oidДля внешнего ключа — список операторов равенства для сравнений FK = FK
conexclopoid[]pg_operator.oidДля исключающего ограничения — список операторов исключения для каждого столбца
conbinpg_node_treeДля проверочного ограничения — внутреннее представление выражения. (Чтобы извлечь определение проверочного ограничения, рекомендуется использовать pg_get_constraintdef().)

В случае исключающего ограничения столбец conkey полезен только для элементов ограничения, которые являются простыми ссылками на столбец. Для других случаев значение conkey будет равно NULL, и чтобы обнаружить выражение, определяющее ограничение, необходимо просмотреть связанный индекс. (Следовательно, поле conkey имеет то же содержание, что и pg_index.indkey для индекса.)

Примечание
pg_class.relchecks необходимо согласовать с количеством записей проверочного ограничения, найденных в этой таблице для каждого отношения.

pg_conversion

В каталоге pg_conversion описаны функции преобразования кодировки. Дополнительную информацию см. в описании команды CREATE CONVERSION.

Таблица: Столбцы pg_conversion

ИмяТипСсылкиОписание
oidoidИдентификатор строки
connamenameИмя преобразования (уникальное в пределах пространства имен)
connamespaceoidpg_namespace.oidOID пространства имен, содержащего это преобразование
conowneroidpg_authid.oidВладелец преобразования
conforencodingint4Идентификатор исходной кодировки
contoencodingint4Идентификатор целевой кодировки
conprocregprocpg_proc.oidФункция преобразования
condefaultboolTrue, если это преобразование по умолчанию

pg_database

В каталоге pg_database хранится информация о доступных базах данных. Базы данных создаются с помощью команды CREATE DATABASE. Дополнительную информацию о значении некоторых параметров см. в главе Управление базами данных.

В отличие от большинства системных каталогов, pg_database является общим для всех баз данных кластера: существует только одна копия pg_database на кластер, а не по одному на каждую базу данных.

Таблица: Столбцы pg_database

ИмяТипСсылкиОписание
oidoidИдентификатор строки
datnamenameИмя базы данных
datdbaoidpg_authid.oidВладелец базы данных — как правило, пользователь, который ее создал
encodingint4Кодировка символов для этой базы данных (при помощи pg_encoding_to_char() можно перевести этот номер в имя кодировки)
datcollatenameLC_COLLATE для этой базы данных
datctypenameLC_CTYPE для этой базы данных
datistemplateboolЕсли true, то эту базу данных может клонировать любой пользователь, обладающий правом CREATEDB; если false, то клонировать ее могут только суперпользователи или владелец этой базы данных.
datallowconnboolЕсли false, то никто не может подключиться к этой базе данных. Используется для защиты базы данных template0 от изменений.
datconnlimitint4Задает максимальное число одновременных подключений, которые могут быть выполнены для этой базы данных. -1 означает отсутствие ограничений.
datlastsysoidoidПоследний системный OID в базе данных; полезен, в частности, для qhb_dump
datfrozenxidxidВ этой базе данных все идентификаторы транзакций, предшествующие данному, были заменены на постоянный («замороженный») идентификатор транзакции. Это используется для отслеживания того, нужно ли очистить таблицу для предотвращения зацикливания идентификатора транзакции или уменьшения размера pg_xact. Это минимальные значения pg_class.relfrozenxid для каждой таблицы.
datminmxidxidВ этой базе данных все идентификаторы мультитранзакций, предшествующие данному, были заменены на другой идентификатор транзакции. Это используется для отслеживания того, нужно ли очистить таблицу для предотвращения зацикливания идентификатора мультитранзакции или уменьшения размера pg_multixact. Это минимальные значения pg_class.relminmxid для каждой таблицы.
dattablespaceoidpg_tablespace.oidТабличное пространство по умолчанию для этой базы данных. В пределах этой базы данных все таблицы, у которых pg_class.reltablespace равно нулю, будут храниться в этом табличном пространстве (в частности, там будут находиться все частные системные каталоги).
dataclaclitem[]Права доступа; дополнительную информацию см. в разделе Права

pg_db_role_setting

В каталоге pg_db_role_setting хранятся значения по умолчанию, заданные для переменных конфигурации времени выполнения, для каждой комбинации роли и базы данных.

В отличие от большинства системных каталогов, pg_db_role_setting является общим для всех баз данных кластера: существует только одна копия pg_db_role_setting на кластер, а не по одному на каждую базу данных.

Таблица: Столбцы pg_db_role_setting

ИмяТипСсылкиОписание
setdatabaseoidpg_database.oidOID базы данных, к которой применяется этот параметр, или NULL, если он не относится к конкретной базе данных
setroleoidpg_authid.oidOID роли, к которой применяется этот параметр, или NULL, если он не относится к конкретной роли
setconfigtext[]Значения по умолчанию для переменных конфигурации времени выполнения

pg_default_acl

В каталоге pg_default_acl сохраняются права, изначально присваиваемые только что созданным объектам.

Таблица: Столбцы pg_default_acl

ИмяТипСсылкиОписание
oidoidИдентификатор строки
defaclroleoidpg_authid.oidOID роли, связанной с этой записью
defaclnamespaceoidpg_namespace.oidOID пространства имен, связанного с этой записью, или ноль для глобальной записи
defaclobjtypecharТип объекта, для которого эта запись предназначена: r = отношение (таблица, представление), S = последовательность, f = функция, T = тип, n = схема
defaclaclaclitem[]Права доступа, которые этот тип объекта должен иметь при создании

Запись в pg_default_acl показывает начальные права, которые будут присвоены объекту, принадлежащему указанному пользователю. В настоящее время существует два типа записей: «глобальные» записи с defaclnamespace = 0 и записи «схемы», ссылающиеся на конкретную схему. Если глобальная запись присутствует, то она переопределяет обычные фиксированные права по умолчанию для типа объекта. Запись схемы, если она присутствует, представляет права, которые будут добавлены к глобальным или фиксированным правам по умолчанию.

Обратите внимание, что если запись ACL в другом каталоге имеет значение NULL, то она используется для представления фиксированных прав по умолчанию для ее объекта, а не тех, которые могут находиться в pg_default_acl в данный момент. Каталог pg_default_acl считывается только во время создания объекта.

pg_depend

В каталог pg_depend записываются отношения зависимости между объектами базы данных. Эта информация позволяет командам DROP находить, какие другие объекты должны быть удалены с помощью DROP CASCADE, или предотвращать удаление в случае DROP RESTRICT.

См. также описание каталога pg_shdepend, который выполняет аналогичную функцию для зависимостей, включающих объекты, совместно используемые в кластере баз данных.

Таблица: Столбцы pg_depend

ИмяТипСсылкиОписание
classidoidpg_class.oidOID системного каталога, в котором находится зависимый объект
objidoidOID любого столбцаOID конкретного зависимого объекта
objsubidint4Для столбца таблицы это номер столбца (поля objid и classid задают саму таблицу). Для всех других типов объектов этот столбец равен нулю.
refclassidoidpg_class.oidOID системного каталога, в котором находится ссылочный объект
refobjidoidOID любого столбцаOID конкретного ссылочного объекта
refobjsubidint4Для столбца таблицы это номер столбца (refobjid и refclassid задают саму таблицу). Для всех других типов объектов этот столбец равен нулю.
deptypecharКод, определяющий конкретную семантику этого отношения зависимости; см. текст ниже

Во всех случаях запись в pg_depend указывает, что ссылочный объект не может быть удален без удаления также зависимого объекта. Тем не менее, есть несколько подвидов зависимостей, задаваемых с помощью deptype:

DEPENDENCY_NORMAL (n)

Обычное отношение между раздельно созданными объектами. Зависимый объект можно удалить, не затрагивая ссылочный объект. Последний может быть удален только путем указания CASCADE, и в этом случае зависимый объект также удаляется. Пример: столбец таблицы имеет нормальную зависимость от своего типа данных.

DEPENDENCY_AUTO (a)

Зависимый объект может быть удален отдельно от ссылочного и должен быть автоматически удален (вне зависимости от режима RESTRICT или CASCADE). Пример: именованное ограничение для таблицы становится автоматически зависимым от таблицы, поэтому оно исчезнет автоматически, если таблица будет удалена.

DEPENDENCY_INTERNAL (i)

Зависимый объект был создан как часть ссылочного и на самом деле является только частью его внутренней реализации. Удаление такого зависимого объекта напрямую при помощи DROP будет запрещено (вместо этого пользователю будет выдано сообщение о том, что необходимо вызвать DROP для ссылочного объекта). Удаление ссылочного объекта приведет к автоматическому удалению зависимого объекта без учета того, указывается ли CASCADE при удалении или нет. Если зависимый объект должен быть удален из-за зависимости от какого-либо другого удаляемого объекта, его удаление преобразуется в удаление ссылочного объекта, поэтому зависимости NORMAL и AUTO зависимого объекта ведут себя так же, как и зависимости ссылочного объекта. Пример: правило ON SELECT для представления становится внутренне зависимым от этого представления, предотвращая его удаление, пока то остается в системе. Зависимости для этого правила (например, таблицы, на которые оно ссылается) действуют так, как если бы они были зависимостями представления.

DEPENDENCY_PARTITION_PRI (P) DEPENDENCY_PARTITION_SEC (S)

Зависимый объект был создан как часть создания ссылочного объекта и на самом деле является только частью его внутренней реализации; однако, в отличие от INTERNAL, существует более одного такого ссылочного объекта. Зависимый объект не должен быть удален, пока не будет удален хотя бы один из этих объектов; если какой-либо из них удаляется, зависимый объект должен быть удален вне зависимости от указания CASCADE. Также, в отличие от INTERNAL, удаление некоторого другого объекта, от которого зависит объект, не приводит к автоматическому удалению какого-либо ссылочного объекта партиции. Следовательно, если удаление каскадно не доходит хотя бы до одного из этих объектов каким-то другим способом, оно не произойдет. (В большинстве случаев зависимый объект совместно использует все свои не связанные с партициями зависимости, по крайней мере, с одним ссылочным объектом партиции, так что это ограничение не приведет к блокированию каскадного удаления.) Первичные (PRI) и вторичные (SEC) зависимости партиций ведут себя одинаково, за исключением того, что первичная зависимость предпочтительна для использования в сообщениях об ошибках — следовательно, объект, зависящий от партиции, должен иметь одну первичную зависимость партиции и одну или несколько вторичных зависимостей партиции. Обратите внимание, что зависимости партиций создаются в дополнение к любым зависимостям, которые обычно имеются у объекта, а не вместо них. Это упрощает операции ATTACH/DETACH PARTITION: необходимо только добавить или удалить зависимости партиции. Пример: дочерний партиционированный индекс становится партиционно-зависимым как от своей партиционированной таблицы, так и от родительского партиционированного индекса, поэтому он будет удален при удалении любого из этих объектов, но не в других случаях. Зависимость от родительского индекса является первичной, так что если пользователь попытается удалить дочерний партиционированный индекс, сообщение об ошибке будет предлагать вместо этого удалить родительский индекс (а не таблицу).

DEPENDENCY_EXTENSION (е)

Зависимый объект является элементом расширения, на которое ссылается объект (см. раздел pg_extension). Зависимый объект можно удалить только с помощью DROP EXTENSION для ссылочного объекта. Функционально этот тип зависимости действует так же, как и зависимость INTERNAL, но он хранится отдельно для ясности и упрощения qhb_dump.

DEPENDENCY_AUTO_EXTENSION (x)

Зависимый объект не является элементом расширения, на которое ссылается объект (и поэтому он не должен игнорироваться qhb_dump), но он не может функционировать без расширения и должен автоматически удаляться при удалении расширения. Зависимый объект также может быть удален сам по себе. Функционально этот тип зависимости действует так же, как и зависимость AUTO, но она хранится отдельно для ясности и упрощения qhb_dump.

DEPENDENCY_PIN (p)

Зависимого объекта нет. Этот тип записи означает, что сама система зависит от ссылочного объекта, и поэтому этот объект никогда не должен быть удален. Записи этого типа создаются только в команде qhb_bootstrap. Столбцы для зависимого объекта содержат нули.

Обратите внимание, что два объекта вполне могут быть связаны более чем одной записью в pg_depend. Например, дочерний партиционированный индекс будет иметь зависимость партиционного типа от связанной партиционированной таблицы и автозависимость от каждого столбца той таблицы, которую он индексирует. Такая ситуация выражает объединение семантики множественной зависимости. Зависимый объект можно удалить без указания CASCADE, если какая-либо из его зависимостей удовлетворяет его условию автоматического удаления. И наоборот, должны быть выполнены все ограничения зависимостей, определяющие, какие объекты должны быть удалены вместе.

pg_description

В каталоге pg_description хранятся дополнительные описания (комментарии) для каждого объекта базы данных. Описания можно обрабатывать с помощью команды COMMENT и просматривать с помощью команд qsql \d.

См. также описание каталога pg_shdescription, который выполняет аналогичную функцию в отношении описаний совместно используемых объектов в кластере баз данных.

Таблица: Столбцы pg_description

ИмяТипСсылкиОписание
objoidoidOID любого столбцаOID объекта, к которому относится данное описание
classoidoidpg_class.oidOID системного каталога, в котором содержится этот объект
objsubidint4Для комментария к столбцу таблицы это номер столбца (objoid и classoid задают саму таблицу). Для всех других типов объектов этот столбец равен нулю.
descriptiontextПроизвольный текст, который служит описанием данного объекта

pg_enum

Каталог pg_enum содержит записи, показывающие значения и текстовые метки для всех типов-перечислений. Внутренним представлением заданного значения перечисления в действительности является OID соответствующей ему строки в pg_enum.

Таблица: Столбцы pg_enum

ИмяТипСсылкиОписание
oidoidИдентификатор строки
enumtypidoidpg_type.oidOID записи в pg_type, содержащей это значение перечисления
enumsortorderfloat4Порядок сортировки этого значения перечисления внутри его типа-перечисления
enumlabelnameТекстовая метка для этого значения перечисления

OID для строк в pg_enum следуют специальному правилу: четные OID гарантированно упорядочиваются аналогично порядку сортировки их типа-перечисления. То есть если два четных OID принадлежат к одному и тому же типу-перечислению, меньший OID должен иметь меньшее значение enumsortorder. Нечетные значения OID могут быть никак не связаны с порядком сортировки. Это правило во многих случаях позволяет подпрограммам сравнения перечислений обходиться без поиска в каталоге. Подпрограммы, которые создают и изменяют типы-перечисления, по возможности пытаются назначать значениям перечислений четный OID.

При создании типа-перечисления его членам присваиваются позиции по порядку сортировки 1..n. Но элементам, добавляемым позже, могут присваиваться отрицательные или дробные значения enumsortorder. Единственное требование к этим значениям в том, чтобы они были правильно упорядочены и уникальны в каждом типе-перечислении.

pg_event_trigger

В каталоге pg_event_trigger хранятся триггеры событий. Дополнительную информацию см. в главе Триггеры событий.

Таблица: Столбцы pg_event_trigger

ИмяТипСсылкиОписание
evtnamenameИмя триггера (должно быть уникальным)
evteventnameОпределяет событие, для которого срабатывает этот триггер
evtowneroidpg_authid.oidВладелец триггера события
evtfoidoidpg_proc.oidВызываемая функция
evtenabledcharЗадает режимы session_replication_role, в которых срабатывает триггер события. О = триггер срабатывает в режимах «origin» (источник) и «local» (локально), D = триггер отключен (disabled), R = триггер срабатывает в режиме «replica» (реплика), A = триггер срабатывает всегда (always).
evttagstext[]Метки команд, для которых этот триггер будет срабатывать. Если NULL, то срабатывание этого триггера не ограничено в зависимости от тега команды.

pg_extension

Каталог pg_extension сохраняет информацию об установленных расширениях. Подробную информацию о расширениях см. в разделе Упаковка связанных объектов в расширение.

Таблица: Столбцы pg_extension

ИмяТипСсылкиОписание
oidoidИдентификатор строки
extnamenameИмя расширения
extowneroidpg_authid.oidВладелец расширения
extnamespaceoidpg_namespace.oidСхема, содержащая экспортируемые объекты расширения
extrelocatableboolTrue, если расширение можно переместить в другую схему
extversiontextИмя версии для расширения
extconfigoid[]pg_class.oidМассив с OID regclass для таблиц(ы) конфигурации расширения или NULL, если у расширения нет таких таблиц
extconditiontext[]Массив с условиями фильтра предложения WHERE для таблиц(ы) конфигурации расширения или NULL, если условий нет

Обратите внимание, что, в отличие от большинства каталогов со столбцом «namespace», столбец extnamespace не должен означать, что расширение принадлежит к этой схеме. Имена расширений никогда не определяются схемой. Скорее, extnamespace указывает схему, содержащую большинство или все объекты расширения. Если extrelocatable имеет значение true, то эта схема фактически должна содержать все определяемые схемой объекты, принадлежащие данному расширению.

pg_foreign_data_wrapper

В каталоге pg_foreign_data_wrapper хранятся определения оберток сторонних данных. Обертки сторонних данных — это механизм, с помощью которого осуществляется доступ к внешним данным, находящимся на сторонних серверах.

Таблица: Столбцы pg_foreign_data_wrapper

ИмяТипСсылкиОписание
oidoidИдентификатор строки
fdwnamenameИмя обертки сторонних данных
fdwowneroidpg_authid.oidВладелец обертки сторонних данных
fdwhandleroidpg_proc.oidСсылается на функцию-обработчик, которая отвечает за предоставление исполняемых подпрограмм для обертки сторонних данных. Ноль, если обработчик не предусмотрен
fdwvalidatoroidpg_proc.oidСсылается на функцию-валидатор, которая отвечает за проверку правильности параметров, заданных обертке сторонних данных, а также параметров для сторонних серверов и сопоставлений пользователей, задаваемых через эту обертку. Ноль, если валидатор не предусмотрен
fdwaclaclitem[]Права доступа; дополнительную информацию см. в разделе Права
fdwoptionstext[]Конкретные параметры обертки сторонних данных в виде строки «ключ=значение»

pg_foreign_server

В каталоге pg_foreign_server хранятся определения сторонних серверов. Сторонний сервер описывает источник внешних данных, например удаленный сервер. Доступ к сторонним серверам осуществляется через обертки сторонних данных.

Таблица: Столбцы pg_foreign_server

ИмяТипСсылкиОписание
oidoidИдентификатор строки
srvnamenameИмя стороннего сервера
srvowneroidpg_authid.oidВладелец стороннего сервера
srvfdwoidpg_foreign_data_wrapper.oidOID обертки сторонних данных этого стороннего сервера
srvtypetextТип сервера (необязательно)
srvversiontextВерсия сервера (необязательно)
srvaclaclitem[]Права доступа; дополнительную информацию см. в разделе Права
srvoptionstext[]Конкретные параметры стороннего сервера в виде строки «ключ=значение»

pg_foreign_table

Каталог pg_foreign_table содержит дополнительную информацию о сторонних таблицах. Сторонняя таблица в основном представлена записью в каталоге pg_class, как и обычная таблица. Запись, соответствующая ей в pg_foreign_table, содержит информацию, относящуюся только к сторонним таблицам, а не к какому-либо другому виду отношений.

Таблица: Столбцы pg_foreign_table

ИмяТипСсылкиОписание
ftrelidoidpg_class.oidOID записи из pg_class для этой сторонней таблицы
ftserveroidpg_foreign_server.oidOID стороннего сервера для этой сторонней таблицы
ftoptionstext[]Параметры сторонней таблицы в виде строки «ключ=значение»

pg_index

Каталог pg_index содержит часть информации об индексах. Остальное находится по большей части в каталоге pg_class.

Таблица: Столбцы pg_index

ИмяТипСсылкиОписание
indexrelidoidpg_class.oidOID записи в каталоге pg_class для этого индекса
indrelidoidpg_class.oidOID записи в каталоге pg_class для таблицы, к которой относится этот индекс
indnattsint2Общее количество столбцов в индексе (повторяет pg_class.relnatts); это число включает в себя как ключевые, так и включенные атрибуты
indnkeyattsint2Количество ключевых столбцов в индексе, не считая каких-либо включенных столбцов, которые просто хранятся и не участвуют в семантике индекса
indisuniqueboolЕсли true, то это уникальный индекс
indisprimaryboolЕсли true, то этот индекс представляет собой первичный ключ таблицы (в этом случае indisunique всегда должно быть true)
indisexclusionboolЕсли true, то этот индекс поддерживает исключающее ограничение
indimmediateboolЕсли true, то проверка уникальности применяется сразу после вставки (не применимо, если у indisunique значение false)
indisclusteredboolЕсли true, то данная таблица в последний раз кластеризовалась по этому индексу
indisvalidboolЕсли true, то индекс в настоящее время является допустимым для запросов. False означает, что индекс может быть неполным: он по-прежнему должен изменяться с помощью операций INSERT/UPDATE, но безопасно использовать его для запросов нельзя. Если индекс уникальный, свойство уникальности также не гарантируется.
indcheckxminboolЕсли true, запросы не должны использовать индекс до тех пор, пока поле xmin этой строки pg_index находится ниже их горизонта событий (TransactionXmin), поскольку таблица может содержать разорванные цепочки HOT с видимыми запросам несовместимыми строками
indisreadyboolЕсли true, то индекс в настоящее время готов к вставкам. False означает, что индекс должен быть проигнорирован операциями INSERT/UPDATE.
indisliveboolЕсли false, индекс находится в процессе удаления и должен игнорироваться при любой попытке использования (включая заключение о безопасности HOT)
indisreplidentboolЕсли true, то этот индекс был выбран в качестве «идентификатора реплики» с помощью команды ALTER TABLE ... REPLICA IDENTITY USING INDEX ...
indkeyint2vectorpg_attribute.attnumМассив из значений indnatts, указывающий на столбцы таблицы, которые этот индекс обрабатывает. Например, значение параметра 1 3 означает, что первый и третий столбцы таблицы составляют записи индекса. Ключевые столбцы предшествуют неключевым (включенным) столбцам. Ноль в этом массиве указывает, что соответствующий атрибут индекса является выражением над столбцами таблицы, а не просто ссылкой на столбец.
indcollationoidvectorpg_collation.oidДля каждого столбца в ключе индекса (значения indnkeyatts) содержит OID правила сортировки, используемого для индекса, или ноль, если столбец не относится к сортируемому типу данных.
indclassoidvectorpg_opclass.oidДля каждого столбца в ключе индекса (значения indnkeyatts) содержит OID используемого класса операторов. Дополнительную информацию см. в описании каталога pg_opclass.
indoptionint2vectorМассив из значений indnkeyatts, хранящих биты флагов для каждого столбца. Значение битов определяется методом доступа индекса.
indexprspg_node_treeДеревья выражений (в представлении nodeToString()) для атрибутов индекса, которые не являются простыми ссылками на столбец. Это список с одним элементом для каждой нулевой записи в indkey. Null, если все атрибуты индекса являются простыми ссылками.
indpredpg_node_treeДерево выражений (в представлении nodeToString()) для частичного индексного предиката. Null, если это не частичный индекс.

pg_inherits

В каталог pg_inherits записывается информация об иерархиях наследования таблицы и индекса. Для каждой прямой связи «родитель-потомок» таблицы или индекса в базе данных существует одна запись. (Косвенное наследование можно определить, проследив цепочки записей.)

Таблица: Столбцы pg_inherits

ИмяТипСсылкиОписание
inhrelidoidpg_class.oidOID дочерней таблицы или индекса
inparentoidpg_class.oidOID родительской таблицы или индекса
inhseqnoint4Если у дочерней таблицы существует более одного прямого родителя (множественное наследование), это число указывает порядок, в котором должны быть упорядочены наследуемые столбцы. Отсчет начинается с 1. У индексов не может быть множественного наследования, так как они могут наследоваться только при декларативном партиционировании.

pg_init_privs

В каталог pg_init_privs записывается информация об изначальных правах объектов в системе. Для каждого объекта в базе данных, имеющего нестандартный (отличный от NULL) начальный набор прав, существует одна запись.

Начальные права объектов могут задаваться либо при инициализации системы (с помощью qhb_bootstrap), либо при создании объекта в процессе выполнения команды CREATE EXTENSION, а скрипт расширения устанавливает начальные права с помощью системы GRANT. Обратите внимание, что эта система автоматически записывает права во время выполнения скрипта расширения, поэтому авторам расширения достаточно использовать в своем скрипте только команды GRANT и REVOKE, чтобы права были записаны. Столбец privtype указывает, было ли начальное право установлено программой qhb_bootstrap или в процессе выполнения команды CREATE EXTENSION.

Объекты с начальными правами, установленными qhb_bootstrap, будут иметь записи, где privtype помечается буквой 'i', тогда как у объектов с начальными правами, установленными CREATE EXTENSION, privtype будет помечаться буквой 'e'.

Таблица: Столбцы pg_init_privs

ИмяТипСсылкиОписание
objoidoidOID любого столбцаOID конкретного объекта
classoidoidpg_class.oidOID системного каталога, в котором находится объект
objsubidint4Для столбца таблицы это номер столбца (objoid и classoid указывают на саму таблицу). Для всех других типов объектов этот столбец содержит ноль.
privtypecharКод, определяющий тип начального права этого объекта; см. текст выше
initprivsaclitem[]Начальные права доступа; дополнительную информацию см. в разделе Права

pg_language

В каталоге pg_language регистрируются языки, на которых можно писать функции или хранимые процедуры. Дополнительную информацию об обработчиках языка см. в описании команды CREATE LANGUAGE и главе Процедурные языки.

Таблица: Столбцы pg_language

ИмяТипСсылкиОписание
oidoidИдентификатор строки
lannamenameИмя языка
lanowneroidpg_authid.oidВладелец языка
lanisplboolДля внутренних языков (таких как SQL) имеет значение false, для пользовательских — true. В настоящее время qhb_dump все еще использует это, чтобы определить, какие языки нужно выгружать, но в будущем этот механизм может быть заменен на другой.
lanplustedboolTrue, если это доверенный язык (это означает, что он предположительно не предоставляет доступ к чему-либо за пределами обычной среды выполнения SQL). Только суперпользователи могут создавать функции на ненадежных языках.
lanplcallfoidoidpg_proc.oidДля не внутренних языков это значение указывает на обработчик языка — специальную функцию, ответственную за выполнение всех функций, написанных конкретно на этом языке
laninlineoidpg_proc.oidСсылка на функцию, которая отвечает за выполнение «встроенных» анонимных блоков кода (блоков DO). Ноль, если встроенные блоки не поддерживаются.
lanvalidatoroidpg_proc.oidСсылка на функцию-валидатор языка, которая отвечает за проверку синтаксиса и правильности новых функций при их создании. Ноль, если валидатор не предусмотрен.
lanaclaclitem[]Права доступа; дополнительную информацию см. в разделе Права

pg_largeobject

Каталог pg_largeobject содержит данные, составляющие «большие объекты». Большой объект идентифицируется OID, назначенным при его создании. Каждый большой объект разбивается на сегменты или «страницы», достаточно маленькие для удобного хранения в виде строк в pg_largeobject. Количество данных на странице определяется как LOBLKSIZE (который в настоящее время равен BLCKSZ/4, т. е. обычно 2 Кб).

Для получения списка OID больших объектов следует обратиться к pg_largeobject_metadata.

Таблица: Столбцы pg_largeobject

ИмяТипСсылкиОписание
loidoidpg_largeobject_metadata.oidИдентификатор большого объекта, включающего эту страницу
pagenoint4Номер этой страницы в большом объекте (начиная с нуля)
databyteaНепосредственно данные, хранящиеся в большом объекте. Их объем никогда не будет превышать количество байтов LOBLKSIZE, но может быть меньше.

Каждая строка pg_largeobject содержит данные для одной страницы большого объекта, начиная со смещения (pageno * LOBLKSIZE) внутри него в байтах. Эта реализация допускает разреженное хранилище: страницы могут отсутствовать и быть короче LOBLKSIZE, даже если они не являются последней страницей объекта. Отсутствующие области внутри большого объекта считываются как нули.

pg_largeobject_metadata

Каталог pg_largeobject_metadata содержит метаданные, связанные с большими объектами. Фактические данные большого объекта хранятся в каталоге pg_largeobject.

Таблица: Столбцы pg_largeobject_metadata

ИмяТипСсылкиОписание
oidoidИдентификатор строки
lomowneroidpg_authid.oidВладелец большого объекта
lomaclaclitem[]Права доступа; дополнительную информацию см. в разделе Права

pg_namespace

В каталоге pg_namespace хранятся пространства имен. Пространство имен — это структура, лежащая в основе схем SQL: каждое пространство имен без конфликтов может иметь отдельный набор отношений, типов и т. д.

Таблица: Столбцы pg_namespace

ИмяТипСсылкиОписание
oidoidИдентификатор строки
nspnamenameИмя пространства имен
nspowneroidpg_authid.oidВладелец пространства имен
nspaclaclitem[]Права доступа; дополнительную информацию см. в разделе Права

pg_opclass

Каталог pg_opclass определяет классы операторов метода доступа к индексу. Каждый класс операторов определяет семантику для индексных столбцов определенного типа данных и конкретного метода доступа к индексам. Класс оператора по существу определяет, что конкретное семейство операторов применимо к конкретному типу данных индексируемого столбца. Набор операторов из семейства, которые на самом деле можно использовать с индексированным столбцом, составляет те, что принимают в качестве левого операнда тип данных столбца.

Классы операторов подробно описаны в разделе Интерфейсные расширения для индексов.

Таблица: Столбцы pg_opclass

ИмяТипСсылкиОписание
oidoidИдентификатор строки
opcmethodoidpg_am.oidКласс операторов для метода индексного доступа
opcnamenameИмя этого класса операторов
opcnamespaceoidpg_namespace.oidПространство имен этого класса операторов
opcowneroidpg_authid.oidВладелец класса операторов
opcfamilyoidpg_opfamily.oidСемейство операторов, содержащее этот класс операторов
opcintypeoidpg_type.oidТип данных, который индексирует этот класс операторов
opcdefaultboolTrue, если этот класс операторов является значением по умолчанию для opcintype
opckeytypeoidpg_type.oidТип данных, хранящихся в индексе, или ноль, если он совпадает с opcintype

Значение opfmethod класса операторов должно совпадать с таковым у содержащего его семейства операторов. Кроме того, в pg_opclass должно быть не более одной строки, в которой opcdefault равно true для любой заданной комбинации opcmethod и opcintype.

pg_operator

В каталоге pg_operator хранится информация об операторах. Дополнительную информацию см. в описании команды CREATE OPERATOR и разделе Пользовательские операторы.

Таблица: Столбцы pg_operator

ИмяТипСсылкиОписание
oidoidИдентификатор строки
oprnamenameИмя оператора
oprnamespaceoidpg_namespace.oidOID пространства имен, содержащего этот оператор
oprowneroidpg_authid.oidВладелец оператора
oprkindcharb = инфиксный («both»), l = префиксный («left»), r = постфиксный («right»)
oprcanmergeboolЭтот оператор поддерживает соединения слиянием
oprcanhashboolЭтот оператор поддерживает хэш-соединения
oprleftoidpg_type.oidТип левого операнда
oprrightoidpg_type.oidТип правого операнда
oprresultoidpg_type.oidТип результата
oprcomoidpg_operator.oidКоммутатор оператора этого типа, если таковой имеется
oprnegateoidpg_operator.oidИнвертор оператора этого типа, если таковой имеется
oprcoderegprocpg_proc.oidФункция, реализующая этот оператор
oprrestregprocpg_proc.oidФункция оценки избирательности ограничения для этого оператора
oprjoinregprocpg_proc.oidФункция оценки избирательности соединения для этого оператора

Неиспользуемые столбцы содержат нули. Например, поле oprleft содержит ноль для префиксного оператора.

pg_opfamily

Каталог pg_opfamily определяет семейства операторов. Каждое семейство операторов представляет собой набор операторов и связанных с ними вспомогательных процедур, реализующих семантику, заданную для конкретного метода доступа к индексу. Более того, все операторы в семействе «совместимы» в том смысле, который определяется методом доступа. Концепция семейства операторов позволяет применять с индексами операторы разного типа и рассуждать о них, используя знания о семантике метода доступа.

Семейства операторов подробно описаны в разделе Интерфейсные расширения для индексов.

Таблица: Столбцы pg_opfamily

ИмяТипСсылкиОписание
oidoidИдентификатор строки
opfmethodoidpg_am.oidМетод доступа к индексу, для которого предназначено семейство операторов
opfnamenameИмя этого семейства операторов
opfnamespaceoidpg_namespace.oidПространство имен этого семейства операторов
opfowneroidpg_authid.oidВладелец этого семейства операторов

Большая часть информации, определяющей семейство операторов, находится не в строке pg_opfamily, а в связанных строках в каталогах pg_amop, pg_amproc и pg_opclass.

pg_partitioned_table

В каталоге pg_partitioned_table хранится информация о способе партиционирования таблиц.

Таблица: Столбцы pg_partitioned_table

ИмяТипСсылкиОписание
partrelidoidpg_class.oidOID записи в каталоге pg_class для партиционированной таблицы
partstratcharСтратегия партиционирования; h = по хэшу (hash), l = по списку (list), r = по диапазону (range)
partnattsint2Количество столбцов в ключе разбиения
partdefidoidpg_class.oidOID записи в каталоге pg_class для партиции по умолчанию этой партиционированной таблицы или ноль, если эта партиционированная таблица не имеет партиции по умолчанию.
partattrsint2vectorpg_attribute.attnumЭто массив из значений partnatts, указывающих, какие столбцы таблицы являются частью ключа разбиения. Например, значение параметра 1 3 будет означать, что первый и третий столбцы таблицы составляют ключ разбиения. Ноль в этом массиве указывает, что соответствующий столбец ключа разбиения является выражением, а не простой ссылкой на столбец.
partclassoidvectorpg_opclass.oidДля каждого столбца в ключе разбиения это поле содержит OID используемых классов операторов. Дополнительную информацию см. в описании каталога pg_opclass.
partcollationoidvectorpg_opclass.oidДля каждого столбца в ключе разбиения это поле содержит OID правил сортировки, используемых для партиционирования, или ноль, если столбец не относится к сортируемому типу данных.
partexprspg_node_treeДеревья выражений (в представлении nodeToString()) для столбцов ключа разбиения, которые не являются простыми ссылками на столбцы. Это список с одним элементом для каждой нулевой записи в partattrs. Null, если все столбцы ключа разбиения являются простыми ссылками.

pg_policy

В каталоге pg_policy хранятся политики защиты на уровне строк для таблиц. Политика включает тип команды, к которой она применяется (возможно, все команды), роли, к которым она применяется, выражение, добавляемое в качестве требования барьера безопасности к запросам, включающим таблицу, и выражение, добавляемое в качестве параметра WITH CHECK для запросов, которые пытаются добавить новые записи в таблицу.

Таблица: Столбцы pg_policy

ИмяТипСсылкиОписание
polnamenameИмя политики
polrelidoidpg_class.oidТаблица, к которой применяется политика
polcmdcharТип команды, к которой применяется политика: r для SELECT, a для INSERT, w для UPDATE, d для DELETE или * для всех
polpermissivebooleanЯвляется ли эта политика разрешительной или ограничительной?
polrolesoid[]pg_authid.oidРоли, к которым применяется политика
polqualpg_node_treeДерево выражений, добавляемое к требованиям барьеров безопасности для запросов, использующих данную таблицу
polwithcheckpg_node_treeДерево выражений, добавляемое к требованиям WITH CHECK для запросов, пытающихся добавить строки в таблицу

Примечание
Политики, хранящиеся в каталоге pg_policy, применяются только тогда, когда для их таблицы задано свойство pg_class.relrowsecurity.

pg_proc

В каталоге pg_proc хранится информация о простых функциях, процедурах, агрегатных и оконных функциях (в совокупности также известных как подпрограммы). Дополнительную информацию см. в описаниях команд CREATE FUNCTION и CREATE PROCEDURE и разделе Пользовательские функции.

Если prokind указывает, что эта запись предназначена для агрегатной функции, в каталоге pg_aggregate должна быть соответствующая строка.

Таблица: Столбцы pg_proc

ИмяТипСсылкиОписание
oidoidИдентификатор строки
pronamenameИмя функции
pronamespaceoidpg_namespace.oidOID пространства имен, содержащего эту функцию
proowneroidpg_authid.oidВладелец этой функции
prolangoidpg_language.oidЯзык реализации или интерфейс вызова этой функции
procostfloat4Предполагаемая стоимость исполнения (в единицах cpu_operator_cost); если установлен признак proretset, это стоимость одной возвращенной строки
prorowsfloat4Предполагаемое количество возвращаемых строк (ноль, если не задан proretset)
provariadicoidpg_type.oidТип данных элементов переменного массива параметров или ноль, если функция не имеет переменного числа параметров
prosupportregprocpg_proc.oidНеобязательная вспомогательная функция планировщика для этой функции (см. раздел Информация по оптимизации функций)
prokindcharf для нормальной функции (function), p для процедуры (procedure), a для агрегатной функции (aggregate) или w для оконной функции (window)
prosecdefboolФункция является определителем контекста безопасности (т. е. функцией «setuid»)
proleakproofboolФункция не имеет никаких побочных эффектов. Никакая информация о ее аргументах не передается, иначе чем через возвращаемое значение. Любая функция, которая может вызвать ошибку, в зависимости от значений ее аргументов, не является герметичной.
proisstrictboolФункция возвращает значение NULL, если любой аргумент вызова имеет значение NULL. В этом случае функция по факту не будет вызвана вообще. Функции, которые не являются «строгими», должны быть подготовлены для обработки нулевых входных данных.
proretsetboolФункция возвращает набор (т. е. несколько значений указанного типа данных)
provolatilecharprovolatile указывает, зависит ли результат функции только от ее входных аргументов, или на него влияют внешние факторы. Для «неизменяемых» функций, которые всегда дают один и тот же результат для одних и тех же входных данных, устанавливается значение i (immutable). Для «стабильных» функций, результаты которых (для фиксированных входных аргументов) не изменяются в пределах сканирования, устанавливается значение s (stable). Для «изменчивых» функций, результаты которых могут измениться в любое время, устанавливается значение v (volatile). (Также v используется для функций с побочными эффектами, чтобы их вызовы нельзя было исключить в процессе оптимизации.)
proparallelcharУказывает, можно ли безопасно запускать функцию в параллельном режиме. Для функций, которые безопасно запускать в параллельном режиме без ограничений, устанавливается значение s (safe). Для функций, которые могут выполняться в параллельном режиме, но ограничены ведущим процессом группы (параллельные рабочие процессы не могут вызывать эти функции), устанавливается значение r (restricted). Для функций, которые небезопасны в параллельном режиме (наличие такой функции заставляет оптимизатор строить план последовательного выполнения запроса), устанавливается значение u (unsafe).
pronargsint2Количество входных аргументов
pronargdefaultsint2Количество аргументов, имеющих значения по умолчанию
prorettypeoidpg_type.oidТип данных возвращаемого значения
proargtypesoidvectorpg_type.oidМассив с типами данных аргументов функции. Включает только входные аргументы (включая аргументы INOUT и VARIADIC) и тем самым представляет сигнатуру вызова функции.
proallargtypesoid[]pg_type.oidМассив с типами данных аргументов функции. Включает в себя все аргументы (в том числе аргументы IN и INOUT), однако если все аргументы являются IN, это поле будет иметь значение NULL. Обратите внимание, что индексация массива обычно начинается с 1, тогда как по историческим причинам proargtypes индексируется от 0.
proargmodeschar[]Массив с режимами аргументов функции, закодированными как i для аргументов IN, о для агрументов OUT, b для аргументов INOUT, v для аргументов VARIADIC, t для аргументов TABLE. Если все аргументы являются IN, это поле будет иметь значение NULL. Обратите внимание, что индексы соответствуют позициям в proallargtypes, а не в proargtypes.
proargnamestext[]Массив с именами аргументов функции. Аргументы без имени представляют собой пустые строки в массиве. Если ни один из аргументов не имеет имени, это поле будет иметь значение NULL. Обратите внимание, что индексы соответствуют позициям в proallargtypes, а не в proargtypes.
proargdefaultspg_node_treeДеревья выражений (в представлении nodeToString()) для значений по умолчанию. Это список, содержащий pronargdefaults элементов, соответствующих последним N входным аргументам (т. е. последним N позициям в proargtypes). Если ни один из аргументов не имеет значений по умолчанию, это поле будет иметь значение NULL.
protrftypesoid[]Массив типов данных аргументов/результатов, к которым необходимо применить преобразования (из предложения TRANSFORM объявления функции). NULL, если таковых нет.
prosrctextЭто значение говорит обработчику функции, как ее вызвать. Это может быть фактический исходный код функции для интерпретируемых языков, символ ссылки, имя файла или почти все остальное, в зависимости от языка реализации/соглашения о вызове.
probintextДополнительная информация о том, как вызвать эту функцию. Интерпретация этого значения также зависит от языка.
proconfigtext[]Локальные настройки функции для переменных конфигурации времени выполнения
proaclaclitem[]Права доступа; дополнительную информацию см. в разделе Права

Для скомпилированных функций, как встроенных, так и динамически загружаемых, поле prosrc содержит имя функции на языке C (объектную ссылку). Для всех других известных на данный момент типов языков prosrc содержит исходный текст функции. Поле probin используется только для динамически загружаемых функций на языке C/RUST, для которых он дает имя файла разделяемой библиотеки, содержащей эти функции.

pg_publication

Каталог pg_publication содержит все публикации для логической репликации, созданные в базе данных.

Таблица: Столбцы pg_publication

ИмяТипСсылкиОписание
oidoidИдентификатор строки
pubnamenameИмя публикации
pubnameoidpg_authid.oidВладелец этой публикации
puballtablesboolЕсли true, эта публикация автоматически включает все таблицы в базе данных, в том числе те, что будут созданы в будущем.
pubinsertboolЕсли true, операции INSERT реплицируются для таблиц в публикации.
pubupdateboolЕсли true, операции UPDATE реплицируются для таблиц в публикации.
pubdeleteboolЕсли true, операции DELETE реплицируются для таблиц в публикации.
pubtruncateboolЕсли true, операции TRUNCATE реплицируются для таблиц в публикации.

pg_publication_rel

Каталог pg_publication_rel содержит сопоставления между отношениями и публикациями в базе данных. Это сопоставления вида многие-ко-многим. Более понятное пользователю представление этой информации можно также посмотреть в подразделе pg_publication_tables.

Таблица: Столбцы pg_publication_rel

ИмяТипСсылкиОписание
prpubidoidpg_publication.oidСсылка на публикацию
prrelidoidpg_class.oidСсылка на связь

pg_range

В каталоге pg_range хранится информация о типах диапазонов. Это дополнительная информация к записям типов в каталоге pg_type.

Таблица: Столбцы pg_range

ИмяТипСсылкиОписание
rngtypidoidpg_type.oidOID типа диапазона
rngsubtypeoidpg_type.oidOID типа элемента (подтипа) данного типа диапазона
rngcollationoidpg_collation.oidOID правила сортировки, используемого для сравнения диапазонов, или 0, если такового нет
rngsubopcoidpg_opclass.oidOID класса операторов подтипа, используемого для сравнения диапазонов
rngcanonicregprocpg_proc.oidOID функции, преобразующей значения диапазона в каноническую форму, или 0, если таковой нет
rngsubdiffregprocpg_proc.oidOID функции, возвращающей разницу между двумя значениями элементов в виде значения double precision, или 0, если таковой нет

Значение поля rngsubopc (плюс rngcollation, если тип элемента является сортируемым) определяет правило сортировки, используемое типом диапазона. Значение поля rngcanonic используется, когда тип элемента является дискретным. Значение поля rngsubdiff является необязательным, но его стоит задавать для повышения производительности индексов GiST с диапазонным типом.

pg_replication_origin

Каталог pg_replication_origin содержит все созданные источники репликации.

В отличие от большинства системных каталогов, pg_replication_origin является общим для всех баз данных кластера: существует только одна копия pg_replication_origin на кластер, а не по одному на каждую базу данных.

Таблица: Столбцы pg_replication_origin

ИмяТипСсылкиОписание
roidentoidУникальный в пределах кластера идентификатор источника репликации. Никогда не должен выходить за границы системы.
ronametextОпределяемое пользователем внешнее имя источника репликации.

pg_rewrite

В каталоге pg_rewrite хранятся правила перезаписи для таблиц и представлений.

Таблица: Столбцы pg_rewrite

ИмяТипСсылкиОписание
oidoidИдентификатор строки
rulenamenameИмя правила
ev_classoidpg_class.oidТаблица, для которой предназначено это правило
ev_typecharТип события, для которого используется это правило: 1 = SELECT, 2 = UPDATE, 3 = INSERT, 4 = DELETE
ev_enabledcharЗадает режимы session_replication_role, при которых срабатывает это правило. О = правило срабатывает в режимах «origin» (источник) и «local» (локально), D = правило отключено (disabled), R = правило срабатывает в режиме «replica» (реплика), A = правило срабатывает всегда (always).
is_insteadboolTrue, если это правило INSTEAD
ev_qualpg_node_treeДерево выражений (в форме представления nodeToString()) для условия применения правила
ev_actionpg_node_treeДерево запросов (в форме представления nodeToString()) для действия правила

Примечание
Если таблица имеет какие-либо правила в этом каталоге, поле pg_class.relhasrules должно содержать true.

pg_seclabel

В каталоге pg_seclabel хранятся метки безопасности для объектов базы данных. Метками безопасности можно управлять с помощью команды SECURITY LABEL. Более простой способ просмотра меток безопасности описан в подразделе pg_seclabels. См. также описание каталога pg_shseclabel, который выполняет ту же функцию для меток безопасности объектов базы данных, совместно используемых в кластере баз данных.

Таблица: Столбцы pg_seclabel

ИмяТипСсылкиОписание
objoidoidOID любого столбцаOID объекта, к которому относится эта метка безопасности
classoidoidpg_class.oidOID системного каталога, к которому относится этот объект
objsubidint4Для метки безопасности в столбце таблицы это номер столбца (поля objoid и classoid указывают на саму таблицу). Для всех других типов объектов этот столбец содержит ноль.
providertextПоставщик меток безопасности, связанный с этой меткой.
labeltextМетка безопасности, применяемая к этому объекту.

pg_sequence

Каталог pg_sequence содержит информацию о последовательностях. Некоторые сведения о последовательностях, такие как имя и схема, находятся в каталоге pg_class.

Таблица: Столбцы pg_sequence

ИмяТипСсылкиОписание
seqrelidoidpg_class.oidOID записи в pg_class для этой последовательности
seqtypidoidpg_type.oidТип данных последовательности
seqstartint8Начальное значение последовательности
seqincrementint8Значение приращения последовательности
seqmaxint8Максимальное значение последовательности
seqminint8Минимальное значение последовательности
seqcacheint8Размер кэша последовательности
seqcycleboolЗацикливается ли последовательность

pg_shdepend

В каталог pg_shdepend записываются отношения зависимости между объектами базы данных и общими объектами, такими как роли. Эта информация позволяет QHB перед попыткой удаления этих объектов убедиться в том, что они не используются.

См. также описание каталога pg_depend, который выполняет ту же функцию для зависимостей объектов в пределах одной базы данных.

В отличие от большинства системных каталогов, pg_shdepend является общим для всех баз данных кластера: существует только одна копия pg_shdepend на кластер, а не по одному на каждую базу данных.

Таблица: Столбцы pg_shdepend

ИмяТипСсылкиОписание
dbidoidpg_database.oidOID базы данных, в которой находится зависимый объект, или ноль для общего объекта
classidoidpg_class.oidOID системного каталога, в котором находится зависимый объект
objidoidOID любого столбцаOID конкретного зависимого объекта
objsubidint4Для столбца таблицы это номер столбца (objid и classid указывают на саму таблицу). Для всех других типов объектов этот столбец содержит ноль.
refclassidoidpg_class.oidOID системного каталога, в котором находится ссылочный объект (должен быть общим каталогом)
refobjidoidOID любого столбцаOID конкретного ссылочного объекта
deptypecharКод, определяющий конкретную семантику этого отношения зависимости; см. текст ниже

Во всех случаях запись в pg_shdepend указывает, что ссылочный объект нельзя удалить, не удалив также зависимый объект. Однако есть несколько подвидов зависимостей, которые задаются в поле deptype:

SHARED_DEPENDENCY_OWNER (о)

Ссылочный объект (который должен быть ролью) является владельцем зависимого объекта.

SHARED_DEPENDENCY_ACL (a)

Ссылочный объект (который должен быть ролью) упоминается в списке ACL (список управления доступом (access control list), т. е. список прав) зависимого объекта. (Запись SHARED_DEPENDENCY_ACL не создается для владельца объекта, так как у владельца в любом случае будет запись SHARED_DEPENDENCY_OWNER.)

SHARED_DEPENDENCY_POLICY (r)

Ссылочный объект (который должен быть ролью) является целью для объекта зависимой политики.

SHARED_DEPENDENCY_PIN (p)

Зависимый объект отсутствует; этот тип записи служит сигналом, что сама система зависит от ссылочного объекта, и поэтому этот объект никогда не должен быть удален. Записи этого типа создаются только командой qhb_bootstrap. Столбцы для зависимого объекта у этой записи содержат нули.

SHARED_DEPENDENCY_TABLESPACE (t)

Зависимый объект (который должен быть табличным пространством) упоминается в качестве табличного пространства в отношении, у которого нет хранилища.

В будущем могут потребоваться и другие подвиды зависимостей. В частности, обратите внимание, что в текущем определении ссылочными объектами могут быть только роли и табличные пространства.

pg_shdescription

В каталоге pg_shdescription хранятся необязательные описания (комментарии) для общих объектов базы данных. Описаниями можно манипулировать с помощью команды COMMENT и просматривать с помощью команд qsql \d.

См. также описание каталога pg_description, который выполняет ту же функцию для описаний объектов в пределах одной базы данных.

В отличие от большинства системных каталогов, pg_shdescription является общим для всех баз данных кластера: существует только одна копия pg_shdescription на кластер, а не по одному на каждую базу данных.

Таблица: Столбцы pg_shdescription

ИмяТипСсылкиОписание
objoidoidOID любого столбцаOID объекта, к которому относится это описание
classoidoidpg_class.oidOID системного каталога, к которому относится этот объект
descriptiontextПроизвольный текст, который служит описанием этого объекта

pg_shseclabel

В каталоге pg_shseclabel хранятся метки безопасности на общих объектах базы данных. Метками безопасности можно управлять с помощью команды SECURITY LABEL. Более простой способ просмотра меток безопасности описан в подразделе pg_seclabels.

См. также описание каталога pg_seclabel, который выполняет ту же функцию для меток безопасности объектов в пределах одной базы данных.

В отличие от большинства системных каталогов, pg_shseclabel является общим для всех баз данных кластера: существует только одна копия pg_shseclabel на кластер, а не по одному на каждую базу данных.

Таблица: Столбцы pg_shseclabel

ИмяТипСсылкиОписание
objoidoidOID любого столбцаOID объекта, к которому относится эта метка безопасности
classoidoidpg_class.oidOID системного каталога, к которому относится этот объект
providertextПоставщик меток безопасности, связанный с этой меткой.
labeltextМетка безопасности, применяемая к этому объекту.

pg_statistic

В каталоге pg_statistic хранятся статистические данные о содержимом базы данных. Записи создаются при помощи команды ANALYZE и впоследствии используются планировщиком запросов. Обратите внимание, что все статистические данные по своей сути приблизительны, даже если предполагается, что они актуальны.

Обычно для каждого столбца таблицы, который был проанализирован, есть одна запись со значением stainherit = false. Если таблица имеет потомков в иерархии наследования, то создается также вторая запись со значением stainherit = true. Эта строка представляет статистику для столбца по всему дереву наследования, т. е. статистику для данных, которые вы видите с помощью SELECT column FROM table*, в то время как строка stainherit = false представляет собой результаты выполнения SELECT column FROM ONLY table.

В pg_statistic также хранятся статистические данные о значениях индексных выражений. Они описываются так, как если бы они были реальными столбцами данных; в частности, starelid ссылается на индекс. Однако для обычного столбца индекса, не содержащего выражения, запись не производится, поскольку она дублировала бы запись для нижележащего столбца таблицы. В настоящее время записи для выражений индекса всегда имеют значение stainherit = false.

Поскольку различные виды статистики подходят для различных видов данных, pg_statistic предназначен не для того, чтобы строить конкретные предположения о том, какая статистика в нем хранится. В отдельных столбцах pg_statistic приводятся только самые общие статистические данные (такие как доля значений NULL). Все остальное хранится в «слотах», представляющих собой группы связанных столбцов, содержимое которых определяется кодовым номером в одном из слотов. Более подробную информацию см. в src/include/catalog/pg_statistic.h.

Каталог pg_statistic не должен быть доступным для чтения всем, поскольку даже статистическая информация о содержании таблицы может считаться конфиденциальной. (Например: могут представлять интерес минимальные и максимальные значения столбца зарплаты.) Доступным для чтения всеми представлением для pg_statistic является pg_stats, которое предоставляет информацию только о тех таблицах, которые может читать текущий пользователь.

Таблица: Столбцы pg_statistic

ИмяТипСсылкиОписание
starelidoidpg_class.oidТаблица или индекс, к которому принадлежит описываемый столбец
staattnumint2pg_attribute.attnumНомер описываемого столбца
stainheritboolЕсли true, то в статистику включены значения в дочерних столбцах иерархии наследования, а не только значения в указанном отношении
stanullfracfloat4Доля записей столбца, которые содержат NULL
stawidthint4Средняя хранимая ширина записей, отличных от NULL, в байтах
stadistinctfloat4Число различных значений данных, отличных от NULL, в столбце. Значение больше нуля — это фактическое количество различных значений. Значение меньше нуля — это множитель для количества строк в таблице, взятый с отрицательным знаком; например, столбец, в котором около 80% значений не имеют значения NULL и каждое такое значение появляется в среднем примерно два раза, может быть представлен как stadistinct = -0.4. Нулевое значение означает, что число различных значений неизвестно.
stakindNint2Кодовый номер, указывающий вид статистики, хранящейся в N-м «слоте» строки в pg_statistic.
staopNoidpg_operator.oidОператор, используемый для получения статистики, хранящейся в N-м «слоте». Например, для слота гистограммы это будет оператор <, определяющий порядок сортировки данных.
stacollNoidpg_collation.oidПравило сортировки, используемое для получения статистики, хранящейся в N-м «слоте». Например, слот гистограммы для сортируемого столбца будет отображать правило сортировки, определяющее порядок сортировки данных. Ноль для несортируемых данных.
stanumbersNfloat4[]Числовая статистика соответствующего вида для N-го «слота» или NULL, если вид слота не содержит числовых значений
stavaluesNanyarrayЗначения данных столбца соответствующего вида для N-го «слота» или NULL, если этот вид слота не хранит никаких значений данных. Значения каждого элемента массива фактически относятся к определенному типу данных столбца или связанному типу, например, типу элемента массива, поэтому нет способа определить тип этих столбцов более конкретно, чем anyarray.

pg_statistic_ext

Каталог pg_statistic_ext содержит определения расширенной статистики планировщика. Каждая строка в этом каталоге соответствует объекту статистики, созданному с помощью команды CREATE STATISTICS.

Таблица: Столбцы pg_statistic_ext

ИмяТипСсылкиОписание
stxrelidoidpg_class.oidТаблица, содержащая столбцы, описываемые данным объектом
stxnamenameИмя объекта статистики
stxnamespaceoidpg_namespace.oidOID пространства имен, содержащего этот объект статистики
stxowneroidpg_authid.oidВладелец объекта статистики
stxkeysint2vectorpg_attribute.attnumМассив номеров атрибутов, указывающих, какие столбцы таблицы охвачены этим объектом статистики; например, значение 1 3 означает, что будут покрыты первый и третий столбцы таблицы
stxkindchar[]Массив, содержащий коды для включенных типов статистики; допустимыми значениями являются: d для статистики по количеству различных значений (n-distinct), f для статистики функциональной зависимости (functional dependency) и m для статистики списка наиболее частых значений (most common values, MCV)

Запись в pg_statistic_ext полностью заполняется во время выполнения команды CREATE STATISTICS, но фактические статистические значения при этом не вычисляются. Последующие команды ANALYZE вычисляют требуемые значения и заполняют запись в каталоге pg_statistic_ext_data.

pg_statistic_ext_data

Каталог pg_statistic_ext_data содержит данные для расширенной статистики планировщика, определенной в pg_statistic_ext. Каждая строка в этом каталоге соответствует объекту статистики, созданному командой CREATE STATISTICS.

Как и в случае с pg_statistic, каталог pg_statistic_ext_data не должен быть доступен для чтения всем, поскольку его содержимое может считаться конфиденциальным. (Пример: определённый интерес могут предоставлять наиболее распространенные комбинации значений в столбцах базы данных.) Доступным для всех представлением каталога pg_statistic_ext_data является pg_stats_ext (после соединения с pg_statistic_ext), которое предоставляет информацию только о тех таблицах и столбцах, которые может прочитать текущий пользователь.

Таблица: Столбцы pg_statistic_ext_data

ИмяТипСсылкиОписание
stxoidoidpg_statistic_ext.oidРасширенный статистический объект, содержащий определение для этих данных
stxdndistinctpg_ndistinctКоличество различных значений, сериализованное как тип pg_ndistinct
stxddependenciespg_dependenciesСтатистика функциональных зависимостей, сериализованная как тип pg_dependencies
stxdmcvpg_mcv_listСтатистика списка MCV (наиболее частых значений, most-common values), сериализованная как тип pg_mcv_list

pg_subscription

Каталог pg_subscription содержит все существующие подписки на логическую репликацию.

В отличие от большинства системных каталогов, pg_subscription является общим для всех баз данных кластера: существует только одна копия pg_subscription на кластер, а не по одному на каждую базу данных.

Обычным пользователям запрещен доступ к столбцу subconninfo, поскольку он может содержать простые текстовые пароли.

Таблица: Столбцы pg_subscription

ИмяТипСсылкиОписание
oidoidИдентификатор строки
subdbidoidpg_database.oidOID базы данных, в которой находится подписка
subnamenameИмя подписки
subowneroidpg_authid.oidВладелец подписки
subenabledboolЕсли true, то подписка включена и должна реплицироваться.
subsynccommittextСодержит значение параметра synchronous_commit для рабочих процессов подписки.
subconninfotextСтрока подключения к вышестоящей базе данных
subslotnamenameИмя слота репликации в вышестоящей базе данных (также используется при локальной репликации имени источника); значение NULL представляет имя NONE.
subpublicationstext[]Массив имен публикаций, на которые оформлена подписка. Эти имена представляют публикации на публикующем сервере.

pg_subscription_rel

Каталог pg_subscription_rel содержит состояние для каждого реплицируемого отношения в каждой подписке. Это сопоставление вида многие-ко-многим.

Этот каталог содержит только таблицы, известные подписке после выполнения команды CREATE SUBSCRIPTION или ALTER SUBSCRIPTION ... REFRESH PUBLICATION.

Таблица: Столбцы pg_subscription_rel

ИмяТипСсылкиОписание
srsubidoidpg_subscription.oidСсылка на подписку
srrelidoidpg_class.oidСсылка на отношение
srsubstatecharКод состояния: i = инициализация, d = копирование данных, s = синхронизация выполнена, r = готовность (нормальная репликация)
srsublsnpg_lsnLSN изменения состояния на удаленной стороне, используемый для координации синхронизации при состояниях s или r, в ином случае NULL.

pg_tablespace

В каталоге pg_tablespace хранится информация о доступных табличных пространствах. Таблицы могут быть размещены в определенных табличных пространствах с целью управления структурой диска.

В отличие от большинства системных каталогов, pg_tablespace является общим для всех баз данных кластера - существует только одна копия pg_tablespace на кластер, а не по одному на каждую базу данных.

Таблица: Столбцы pg_tablespace

ИмяТипСсылкиОписание
oidoidИдентификатор строки
spcnamenameИмя табличного пространства
spcowneroidpg_authid.oidВладелец этого табличного пространства (обычно это пользователь, который его создал)
spcaclaclitem[]Права доступа; дополнительную информацию см. в разделе Права
spcoptionstext[]Параметры уровня табличного пространства в виде строк «ключ=значение»

pg_transform

В каталоге pg_transform хранится информация о преобразованиях, которые являются механизмом адаптации типов данных к процедурным языкам. Дополнительную информацию см. в описании команды CREATE TRANSFORM.

Таблица: Столбцы pg_transform

ИмяТипСсылкиОписание
trftypeoidpg_type.oidOID типа данных, для которого предназначено это преобразование
trflangoidpg_language.oidOID языка, для которого предназначено это преобразование
trffromsqlregprocpg_proc.oidOID функции, используемой при преобразовании типа данных для передачи в процедурный язык (например, параметры функции). Ноль, если эта операция не поддерживается.
trftosqlregprocpg_proc.oidOID функции, используемой при преобразовании значений, полученных из процедурного языка (например, возвращаемых значений) к типу данных. Ноль, если эта операция не поддерживается.

pg_trigger

Каталог pg_trigger содержит информацию о триггерах в таблицах и представлениях. Дополнительную информацию см. в описании команды CREATE TRIGGER.

Таблица: Столбцы pg_trigger

ИмяТипСсылкиОписание
oidoidИдентификатор строки
tgrelidoidpg_class.oidТаблица, к которой относится этот триггер
tgnamenameИмя триггера (должно быть уникальным среди триггеров одной таблицы)
tgfoidoidpg_proc.oidВызываемая функция
tgtypeint2Битовая маска, определяющая условия срабатывания триггера
tgenabledcharЗадает режимы session_replication_role, при которых срабатывает триггер. О = триггер срабатывает в режимах «origin» (источник) и «local» (локально), D = триггер отключен (disabled), R = триггер срабатывает в режиме «replica» (реплика), A = триггер срабатывает всегда (always).
tgisinternalboolTrue, если триггер генерируется внутри системы (обычно для принудительного применения ограничения, определенного tgconstraint)
tgconstrrelidoidpg_class.oidТаблица, на которую ссылается ограничение ссылочной целостности
tgconstrindidoidpg_class.oidИндекс, поддерживающий ограничение уникальности, первичного ключа, ссылочной целостности или исключения
tgconstraintoidpg_constraint.oidСвязанная с триггером запись в pg_constraint, если таковая имеется
tgdeferrableboolTrue, если триггер ограничения является откладываемым
tginitdeferredboolTrue, если триггер ограничения изначально отложен
tgnargsint2Количество строк аргументов, переданных в триггерную функцию
tgattrint2vectorpg_attribute.attnumНомера столбцов, если триггер является специфичным для столбца; в противном случае — пустой массив
tgargsbyteaСтроки аргументов для передачи триггеру, каждая завершается NULL
tgqualpg_node_treeДерево выражений (в представлении nodeToString()) для условия триггера WHEN или NULL, если оно отсутствует
tgoldtablenameИмя предложения REFERENCING для OLD TABLE или NULL, если оно отсутствует
tgnewtablenameимя предложения REFERENCING для NEW TABLE или NULL, если оно отсутствует

В настоящее время триггеры, относящиеся к столбцам, поддерживаются только для событий UPDATE, поэтому поле tgattr актуально только для этого типа событий. tgtype может также содержать биты для других типов событий, но считается, что они распространяются только на таблицы, независимо от значения поля tgattr.

Примечание
Когда поле tgconstraint имеет отличное от нуля значение, поля tgconstrrelid, tgconstrindid, tgdeferrable и tginitdeferred в основном дублируют ссылочную запись в pg_constraint. Тем не менее, неоткладываемый триггер может быть связан с откладываемым ограничением: ограничения внешнего ключа могут иметь и откладываемые, и неоткладываемые триггеры.

Примечание
если отношение имеет какие-либо триггеры в этом каталоге, поле pg_class.relhastriggers должно иметь значение true.

pg_ts_config

Каталог pg_ts_config содержит записи, представляющие конфигурации текстового поиска. Конфигурация задает определенный синтаксический анализатор текстового поиска и список словарей, которые будут использоваться для каждого из типов выходных фрагментов синтаксического анализатора. Анализатор хранится в записи pg_ts_config, но сопоставление фрагмент-словарь определяется подчиненными записями в pg_ts_config_map.

Таблица: Столбцы pg_ts_config

ИмяТипСсылкиОписание
oidoidИдентификатор строки
cfgnamenameИмя конфигурации текстового поиска
cfgnamespaceoidpg_namespace.oidOID пространства имен, содержащего эту конфигурацию
cfgowneroidpg_authid.oidВладелец этой конфигурации
cfgparseroidpg_ts_parser.oidOID синтаксического анализатора текстового поиска для этой конфигурации

pg_ts_config_map

Каталог pg_ts_config_map содержит записи, показывающие, к каким словарям текстового поиска следует обращаться и в каком порядке, для каждого типа фрагмента, выдаваемого синтаксическим анализатором каждой конфигурации текстового поиска.

Таблица: Столбцы pg_ts_config_map

ИмяТипСсылкиОписание
mapcfgoidpg_ts_config.oidOID записи из pg_ts_config, которой принадлежит эта запись сопоставления
maptokentypeintegerТип фрагмента, создаваемого синтаксическим анализатором конфигурации
mapseqnointegerПорядок, в котором следует обращаться к этой записи (сначала меньшие mapseqnos)
mapdictoidpg_ts_dict.oidOID словаря текстового поиска, к которому нужно обращаться

pg_ts_dict

Каталог pg_ts_dict содержит записи, определяющие словари текстового поиска. Словарь зависит от шаблона текстового поиска, который задает все необходимые функции реализации; сам словарь предоставляет значения для настраиваемых пользователем параметров, поддерживаемых шаблоном. Такое разделение позволяет создавать словари непривилегированным пользователям. Параметры задаются текстовой строкой dictinitoption, формат и значение которой различаются в зависимости от шаблона.

Таблица: Столбцы pg_ts_dict

ИмяТипСсылкиОписание
oidoidИдентификатор строки
dictnamenameИмя словаря текстового поиска
dictnamespaceoidpg_namespace.oidOID пространства имен, содержащего этот словарь
dictowneroidpg_authid.oidВладелец этого словаря
dicttemplateoidpg_ts_template.oidOID шаблона текстового поиска для этого словаря
dictinitoptiontextСтрока параметра инициализации для этого шаблона

pg_ts_parser

Каталог pg_ts_parser содержит записи, определяющие синтаксические анализаторы текстового поиска. Синтаксический анализатор отвечает за разбиение входного текста на лексемы и присвоение каждой лексеме типа фрагмента. Поскольку синтаксический анализатор должен быть реализован с помощью функций на языке уровня C\RUST, создавать новые синтаксические анализаторы могут только суперпользователи базы данных.

Таблица: Столбцы pg_ts_parser

ИмяТипСсылкиОписание
oidoidИдентификатор строки
prsnamenameИмя синтаксического анализатора текстового поиска
prsnamespaceoidpg_namespace.oidOID пространства имен, содержащего этот синтаксический анализатор
prsstartregprocpg_proc.oidOID функции запуска синтаксического анализатора
prstokenregprocpg_proc.oidOID функции синтаксического анализатора, выдающей следующий фрагмент
prsendregprocpg_proc.oidOID функции синтаксического анализатора, завершающей разбиение
prsheadlineregprocpg_proc.oidOID функции синтаксического анализатора, выдающей заголовки
prslextyperegprocpg_proc.oidOID функции анализатора лексических типов

pg_ts_template

Каталог pg_ts_template содержит записи, определяющие шаблоны текстового поиска. Шаблон — это основа реализации для класса словарей текстового поиска. Поскольку шаблон должен быть реализован с помощью функций на языке уровня C\RUST, создавать новые шаблоны могут только суперпользователи базы данных.

Таблица: Столбцы pg_ts_template

ИмяТипСсылкиОписание
oidoidИдентификатор строки
tmplnamenameИмя шаблона текстового поиска
tmplnamespaceoidpg_namespace.oidOID пространства имен, содержащего этот шаблон
tmplinitregprocpg_proc.oidOID функции инициализации этого шаблона
tmpllexizeregprocpg_proc.oidOID функции выделения лексем этого шаблона

pg_type

В каталоге pg_type хранится информация о типах данных. Базовые типы и типы перечислений (скалярные типы) создаются с помощью команды CREATE TYPE, а домены — с помощью CREATE DOMAIN. Составной тип автоматически создается для каждой таблицы в базе данных для представления структуры строк таблицы. Кроме того, составные типы можно создать с помощью CREATE TYPE AS.

Таблица: Столбцы pg_type

ИмяТипСсылкиОписание
oidoidИдентификатор строки
typnamenameИмя типа данных
typnamespaceoidpg_namespace.oidOID пространства имен, содержащего этот тип
typowneroidpg_authid.oidВладелец данного типа
typlenint2Для типа фиксированного размера typlen — это число байтов во внутреннем представлении типа. Но для типа переменной длины typlen будет отрицательным. -1 обозначает тип «varlena» (он содержит машинное слово, указывающее длину), -2 обозначает строку в стиле C, завершающуюся значением NULL.
typbyvalbooltypbyval определяет, будут ли внутренние функции передавать значение этого типа по значению или по ссылке. typbyval предпочтительно иметь значение false, если только длина typlen не равна 1, 2 или 4 (или 8 на 64-битных машинах). Типы переменной длины всегда передаются по ссылке. Обратите внимание, что typbyval может иметь значение false, даже если длина позволит передачу по значению.
typtypechartyptype имеет значение b для базового типа (base), c для составного типа (composite) (например, типа строки таблицы), d для домена (domain), e для перечислимого типа (enum), p для псевдотипа (pseudo) или r для типа диапазона (range). См. также описания столбцов typrelid и typbasetype.
typcategorycharВ typcategory задается произвольная классификация типов данных, которая используется синтаксическим анализатором для определения того, какие неявные приведения должны быть «предпочтительными». См. таблицу Коды typcategory.
typispreferredboolTrue, если тип является предпочтительным объектом приведения в пределах его typcategory
typisdefinedboolTrue, если тип определен, false, если это запись-«заготовка» для еще не определенного типа. Когда typisdefined имеет значение false, ни на что, кроме имени типа, пространства имен и OID, нельзя полагаться.
typdelimcharСимвол, который разделяет два значения этого типа при разборе вводимы данных массива. Обратите внимание, что разделитель связан с типом данных элемента массива, а не с типом самого массива.
typrelidoidpg_class.oidЕсли это составной тип (см. typtype), то данный столбец указывает на запись в pg_class, которая определяет соответствующую таблицу. (Для отдельно стоящего композитного типа; запись в pg_class на самом деле не представляет собой таблицу, но она все равно необходима для записей типа в pg_attribute, чтобы сослаться на них.) Для несоставных типов значение столбца равно нулю.
typelemoidpg_type.oidЕсли typelem не содержит 0, то он ссылается на другую строку в pg_type. В этом случае к текущему типу можно обращаться по индексу, как к массиву, и получать значения типа typelem. «Настоящий» массив при этом имеет переменную длину (typlen = -1), но некоторые типы фиксированной длины (typlen > 0) также имеют ненулевое значение typelem, например name и point. Если для типа фиксированной длины задан typelem то его внутреннее представление должно быть некоторым количеством значений (кортежем) с типом данных typelem без каких-либо других данных. Типы массивов переменной длины имеют заголовок, определяемый подпрограммами массива.
typarrayoidpg_type.oidЕсли typarray не содержит 0, то он ссылается на другую строку в pg_type, описывающую «настоящий» тип массива, где этот тип является элементом
typinputregprocpg_proc.oidФункция преобразования ввода (из текстового формата)
typoutputregprocpg_proc.oidФункция преобразования вывода (в текстовый формат)
typreceiveregprocpg_proc.oidФункция преобразования ввода (из двоичного формата) или 0, если такой функции нет
typsendregprocpg_proc.oidФункция преобразования вывода (в двоичный формат) или 0, если такой функции нет
typmodinregprocpg_proc.oidФункция модификатора ввода или 0, если тип не поддерживает модификаторы
typmodoutregprocpg_proc.oidФункция модификатора вывода или 0 для использования стандартного формата
typanalyzeregprocpg_proc.oidПользовательская функция ANALYZE или 0 для использования стандартной функции
typalignchartypalign определяет выравнивание, необходимое при хранении значения этого типа. Это относится к хранилищу на диске, а также к большинству представлений значения внутри QHB. Когда несколько значений хранятся последовательно, например в представлении строки данных на диске, заполнение дополнительными байтами происходит перед значением этого типа, чтобы тот начинался на указанной границе. Ссылка на выравнивание является началом первого значения в последовательности.
Возможные значения:
  • c = выравнивание по символам (char), т. е. выравнивание не требуется.

  • s = выравнивание по границе слова (short) (2 байта на большинстве процессоров).

  • i = выравнивание по границе целого (int) (4 байта на большинстве процессоров).

  • d = выравнивание по границе двойного слова (double) (8 байт на многих процессорах, но далеко не на всех).
typstoragecharЗначение typstorage для типов varlena (т. е. с typlen = -1) сообщает, подготовлен ли тип для помещения в TOAST, и какова должна быть стратегия по умолчанию для атрибутов этого типа.
Возможные значения:
  • p: Значение всегда должно храниться в обычном виде.

  • e: Значение может храниться во «вторичном» отношении (если в отношении это значение есть, см. столбец pg_class.reltoastrelid).

  • m: Значение может храниться сжатым в строке.

  • x: Значение может храниться сжатым в строке или во «вторичном» хранилище.

Для типов, которые могут быть помещены в TOAST, обычно применяется стратегия x. Обратите внимание, что столбцы m также можно переместить во вторичное хранилище, но только в крайнем случае (столбцы e и x перемещаются первыми).
typnotnullboolПоле typnotnull представляет собой ограничение «не NULL» для типа. Используется только для доменов.
typbasetypeoidpg_type.oidЕсли это домен (см. typtype), то typbasetype определяет тип, на котором он основан. Ноль, если этот тип не является доменом.
typtypmodint4Домены используют typtypmod, чтобы записать модификатор typmod, применяемый к их базовому типу (-1, если базовый тип не использует typtypmod). -1, если этот тип не является доменом.
typndimsint4Значение typndims задает число размерностей массива для домена, определенного поверх массива (т. е. когда typbasetype является типом массива). Ноль для типов, отличных от доменов поверх типов массивов.
typcollationoidpg_collation.oidЗначение typcollation задает правило сортировки типа. Если тип не поддерживает правила сортировки, столбец равен нулю. Базовый тип, который поддерживает правила сортировки, будет иметь ненулевое значение, как правило, DEFAULT_COLLATION_OID. Домен поверх сортируемого типа может иметь OID правила сортировки, отличающийся от такового его базового типа, если он был указан для домена.
typdefaultbinpg_node_treeЕсли поле typdefaultbin содержит не NULL, то это представление nodeToString() выражения по умолчанию для данного типа. Используется только для доменов.
typdefaulttextПоле typdefault имеет значение NULL, если с типом не связано значение по умолчанию. Если поле typdefaultbin содержит не NULL, то typdefault должно содержать понятную человеку версию выражения по умолчанию, представленного в typdefaultbin. Если typdefaultbin имеет значение NULL, а typdefault — нет, значит, в typdefault находится внешнее представление значения по умолчанию типа, которое можно передать в принадлежающую типу функцию преобразования ввода для получения константы.
typaclaclitem[]Права доступа; дополнительную информацию см. в разделе Права

Примечание
Для типов, используемых в системных таблицах, крайне важно, чтобы размер и выравнивание, определенные в каталоге pg_type, были согласованы с тем, как компилятор расположит этот столбец в структуре, представляющей строку таблицы.

В таблице Коды typcategory перечислены определяемые системой значения typcategory. Любые будущие дополнения к этому списку также будут записаны прописными буквами ASCII. Все остальные символы ASCII зарезервированы для пользовательских категорий.

Таблица: Коды typcategory

КодКатегория
AТипы массивов
BЛогические типы
CСоставные типы
DТипы даты/времени
EТипы-перечисления
GГеометрические типы
IТипы сетевых адресов
NЧисловые типы
PПсевдотипы
RДиапазонные типы
SСтроковые типы
TИнтервальные типы
UПользовательские типы
VТипы битовых строк
XНеизвестный тип (unknown)

pg_user_mapping

В каталоге pg_user_mapping хранятся сопоставления локальных пользователей с удаленными. Обычные пользователи не имеют доступа к этому каталогу, вместо этого им следует использовать представление pg_user_mappings.

Таблица: Столбцы pg_user_mapping

ИмяТипСсылкиОписание
oidoidИдентификатор строки
umuseroidpg_authid.oidOID сопоставляемой локальной роли, 0, если пользовательское сопоставление является общедоступным
umserveroidpg_foreign_server.oidOID внешнего сервера, содержащего это сопоставление
umoptionstext[]Специальные параметры сопоставления пользователей в виде строк «ключ=значение»

Системные представления

Помимо системных каталогов, QHB предоставляет ряд встроенных представлений. Некоторые системные представления обеспечивают удобный доступ к некоторым часто используемым запросам в системных каталогах. Другие представления обеспечивают доступ к внутреннему состоянию сервера.

Информационная схема предоставляет альтернативный набор представлений, которые перекрывают функциональные возможности системных представлений. Поскольку информационная схема является частью стандарта SQL, а описанные здесь представления специфичны для QHB, обычно лучше использовать информационную схему, если та выдает всю необходимую информацию.

В таблице Системные представления перечислены системные представления, описанные в этом разделе. Более подробная документация по каждому представлению приведена ниже. Существуют некоторые дополнительные представления, обеспечивающие доступ к результатам работы сборщика статистических данных; они описаны в таблице Представления по собранной статистике.

Кроме явно отмеченных исключений, все описанные здесь представления доступны только для чтения.

Таблица: Системные представления

Имя представленияЦель
pg_available_extensionsдоступные расширения
pg_available_extension_versionsдоступные версии расширений
pg_configпараметры конфигурации во время компиляции
pg_cursorsоткрытый курсор
pg_file_settingsсводка содержимого файла конфигурации
pg_groupгруппы пользователей баз данных
pg_hba_file_rulesсводка содержимого файла конфигурации проверки подлинности клиента
pg_indexesиндексы
pg_locksзамки в настоящее время удерживаются или ожидаются
pg_matviewsматериализованное представление
pg_policiesполитики
pg_prepared_statementsподготовленное заявление
pg_prepared_xactsподготовленные сделки
pg_publication_tablesпубликации и связанные с ними таблицы
pg_replication_origin_statusсведения об источниках репликации, включая ход выполнения репликации
pg_replication_slotsсведения о слоте репликации
pg_rolesроль базы данных
pg_rulesправила
pg_seclabelsметка безопасности
pg_sequencesпоследовательности
pg_settingsнастройка параметров
pg_shadowпользователь базы данных
pg_statsстатистика планировщика
pg_stats_extрасширенная статистика планировщика
pg_tablesтаблицы
pg_timezone_abbrevsсокращения часовых поясов
pg_timezone_namesназвания часовых поясов
pg_userпользователь базы данных
pg_user_mappingsсопоставление пользователей
pg_viewsчисло просмотров

pg_available_extensions

Представление pg_available_extensions содержит список расширений, доступных для установки. См. также каталог pg_extension, в котором отображаются уже установленные расширения.

Таблица: Столбцы pg_available_extensions

ИмяТипОписание
namenameИмя расширения
default_versiontextИмя версии по умолчанию или NULL, если версия не указана
installed_versiontextТекущая установленная версия расширения или NULL, если расширение не установлено
commenttextСтрока комментария из управляющего файла расширения

Представление pg_available_extensions доступно только для чтения.

pg_available_extension_versions

Представление pg_available_extension_versions содержит список конкретных версий расширений, доступных для установки. См. также каталог pg_extension, в котором отображаются уже установленные расширения.

Таблица: Столбцы pg_available_extension_versions

ИмяТипОписание
namenameИмя расширения
versiontextИмя версии
installedboolTrue, если эта версия данного расширения уже установлена
superuserboolTrue, если это расширение разрешено устанавливать только суперпользователям
relocatableboolTrue, если расширение можно переместить в другую схему
schemanameИмя схемы, в которую необходимо установить расширение, или NULL, если оно частично или полностью переместимо
requiresname[]Имена расширений, требующихся для данного, или NULL, если таковых нет
commenttextСтрока комментария из управляющего файла расширения

Представление pg_available_extension_versions доступно только для чтения.

pg_config

Представление pg_config описывает конфигурационные параметры времени компиляции текущей установленной версии QHB. Оно предназначено, например, для использования программными пакетами, которым может понадобиться содействие QHB в поиске необходимых заголовочных файлов и библиотек. Оно выдает ту же основную информацию, что и утилита qhb_config из поставки QHB.

По умолчанию представление pg_config могут прочитать только суперпользователи.

Таблица: Столбцы pg_config

ИмяТипОписание
nametextИмя параметра
settingtextЗначение параметра

pg_cursors

В представлении pg_cursors перечислены курсоры, доступные в настоящий момент. Курсоры могут быть определены несколькими способами:

  • через оператор DECLARE в SQL

  • через сообщение Bind в клиент-серверном протоколе QHB

  • через интерфейс программирования сервера (SPI, Server Programming Interface), как описано в разделе Функции интерфейса

Представление pg_cursors отображает курсоры, созданные любым из этих средств. Курсоры существуют только в течение транзакции, которая их определяет, если только они не были объявлены WITH HOLD. Таким образом, не удерживаемые курсоры присутствуют в представлении только до конца создавшей их транзакции.

Примечание
Курсоры используются внутри системы для реализации некоторых компонентов QHB, таких как процедурные языки. Поэтому представление pg_cursors может содержать курсоры, которые не были явно созданы пользователем.

Таблица: Столбцы pg_cursors

ИмяТипОписание
nametextИмя курсора
statementtextДословная строка запроса, инициализировавшая объявления этого курсора
is_holdablebooleanTrue, если курсор удерживаемый (т. е. он может быть доступен после фиксации транзакции, в которой он был объявлен); иначе — false
is_binarybooleanTrue, если курсор был объявлен с указанием BINARY; иначе — false
is_scrollablebooleanTrue, если курсор прокручиваемый (т. е. он позволяет извлекать строки непоследовательным образом); иначе — false
creation_timetimestamptzВремя, когда был объявлен курсор

Представление pg_cursors доступно только для чтения.

pg_file_settings

Представление pg_file_settings выдает сводку содержимого файла(ов) конфигурации сервера. Для каждой записи «имя = значение», имеющейся в этих файлах, данное представление содержит строку с примечаниями, показывающими, может ли это значение быть успешно применено. Также для проблем, не связанных с записью «имя = значение», например синтаксических ошибок в файлах, в этом представлении могут появляться дополнительные строки.

Это представление полезно для проверки того, будут ли работать запланированные изменения в файлах конфигурации, или для диагностики предыдущего сбоя. Обратите внимание, что это представление сообщает о текущем содержимом файлов, а не о том, что было применено сервером в последний раз. (Для получения того состояния обычно достаточно представления pg_settings).

По умолчанию представление pg_file_settings могут прочитать только суперпользователи.

Таблица: Столбцы pg_file_settings

ИмяТипОписание
sourcefiletextПолный путь к файлу конфигурации
sourcelineintegerНомер строки в файле конфигурации, где появляется эта запись
seqnointegerПорядок, в котором обрабатываются операции (1..n)
nametextИмя параметра конфигурации
settingtextЗначение, присваиваемое параметру
appliedbooleanTrue, если значение может быть применено успешно
errortextСообщение об ошибке, указывающее, почему эта запись не может быть применена, или NULL

Если файл конфигурации содержит синтаксические ошибки или недопустимые имена параметров, сервер не будет пытаться применить какие-либо параметры из файла, а следовательно, все поля applied будут равны false. В таком случае в представлении будет одна или несколько строк со значением error, отличные от NULL, указывающие на проблему(ы). Иначе, если это возможно, будут применены отдельные параметры. Если отдельный параметр применить нельзя (например, из-за недопустимого значения или если параметр нельзя изменять после запуска сервера), он будет иметь соответствующее сообщение в поле error. Другой вариант, при котором поле applied будет содержать false, означает, что эта запись переопределяется более поздней записью для того же имени параметра; этот случай не считается ошибкой, поэтому в поле error ничего не появляется.

Дополнительную информацию о различных способах изменения параметров времени выполнения см. в разделе Настройка параметров

pg_group

Представление pg_group показывает имена и члены всех ролей, отмеченных как не имеющие признака rolcanlogin, что примерно соответствует набору ролей, которые использовались как группы.

Таблица: Столбцы pg_group

ИмяТипСсылкиОписание
gronamenamepg_authid.rolnameИмя группы
grosysidoidpg_authid.oidИдентификатор этой группы
grolistoid[]pg_authid.oidМассив, содержащий идентификаторы ролей в этой группе

pg_hba_file_rules

Представление pg_hba_file_rules выдает сводку содержимого файла конфигурации аутентификации клиентов, qhb_hba.conf. Для каждой непустой строки файла, не имеющей комментариев, в этом представлении содержится строка с примечаниями, показывающими, может ли это правило быть успешно применено.

Это представление может быть полезно для проверки того, будут ли работать запланированные изменения в файле конфигурации аутентификации, или для диагностики предыдущего сбоя. Обратите внимание, что это представление сообщает о текущем содержимом файла, а не о том, что было загружено сервером в последний раз.

По умолчанию представление pg_hba_file_rules могут прочитать только суперпользователи.

Таблица: Столбцы pg_hba_file_rules

ИмяТипОписание
line_numberintegerНомер строки этого правила в qhb_hba.conf
typetextТип соединения
databasetext[]Список имен баз данных, к которым применяется данное правило
user_nametext[]Список имен пользователей и ролей, к которым применяется данное правило
addresstextИмя хоста или IP-адрес, либо одно из значений: all, samehost или *samenet, либо NULL для локальных соединений
netmasktextМаска IP-адреса или NULL, если это неприменимо
auth_methodtextСпособ аутентификации
optionstext[]Параметры, указанные для метода аутентификации, если таковые имеются
errortextСообщение об ошибке, указывающее, почему эта строка не может быть обработана, или NULL

Обычно строка, отражающая неверную запись, будет иметь значения только для полей line_number и error.

pg_indexes

Представление pg_indexes предоставляет доступ к полезной информации о каждом индексе в базе данных.

Таблица: Столбцы pg_indexes

ИмяТипСсылкиОписание
schemanamenamepg_namespace.nspnameИмя схемы, содержащей таблицу и индекс
tablenamenamepg_class.relnameИмя таблицы, для которой создан индекс
indexnamenamepg_class.relnameИмя индекса
tablespacenamepg_tablespace.spcnameИмя табличного пространства, содержащего индекс (NULL, если это пространство по умолчанию для базы данных)
indexdeftextОпределение индекса (реконструированная команда CREATE INDEX)

pg_locks

Представление pg_locks предоставляет доступ к информации о блокировках, удерживаемых активными процессами на сервере базы данных. Подробное рассмотрение процесса блокировки см. в главе Управление параллельным доступом.

pg_locks содержит одну строку на каждый активный блокируемый объект, запрошенный режим блокировки и соответствующий процесс. Таким образом, один и тот же блокируемый объект может появляться много раз, если его блокируют или ожидают блокировки несколько процессов. Однако объект, который в настоящее время не имеет блокировок, не будет отображаться вообще.

Существует несколько различных типов блокируемых объектов: отношения целиком (например, таблицы), отдельные страницы отношений, отдельные кортежи отношений, идентификаторы транзакций (как виртуальные, так и постоянные) и общие объекты базы данных (идентифицируемые по OID класса и OID объекта, так же как и в pg_description или pg_depend). Также в виде отдельного блокируемого объекта представляется право на расширение отношения, как и право изменения значения pg_database.datfrozenxid. Кроме того, «необязательные» блокировки могут иметь номера, значения которых определяет пользователь.

Таблица: Столбцы pg_locks

ИмяТипСсылкиОписание
locktypetextТип блокируемого объекта: relation (отношение), extend (расширение), page (страница), tuple (кортеж), transactionid (идентификатор транзакции), virtualxid (виртуальный идентификатор), object (объект), userlock (пользовательская блокировка) или advisory (необязательная)
databaseoidpg_database.oidOID базы данных, в которой существует цель блокировки, или ноль, если цель является общим объектом, или NULL, если цель является идентификатором транзакции
relationoidpg_class.oidOID отношения, на которое направлена блокировка, или NULL, если цель не является отношением или частью отношения
pageintegerНомер страницы, на которую направлена блокировка в пределах отношения, или NULL, если цель не является страницей отношения или кортежем
tuplesmallintНомер кортежа, на который направлена блокировка внутри страницы, или NULL, если цель не является кортежем
virtualxidtextВиртуальный идентификатор транзакции, на которую направлена блокировка, или NULL, если цель не является виртуальным идентификатором транзакции
transactionidxidИдентификатор транзакции, на которую направлена блокировка, или NULL, если цель не является идентификатором транзакции
classidoidpg_class.oidOID системного каталога, содержащего целевой объект блокировки, или NULL, если целевой объект не является общим объектом базы данных
objidoidOID любого столбцаOID целевого объекта блокировки в системном каталоге или NULL, если целевой объект не является общим объектом базы данных
objsubidsmallintНомер столбца, на который направлена блокировка (поля classid и objid определяют саму таблицу), или ноль, если целевой объект является каким-либо другим общим объектом базы данных, или NULL, если целевой объект не является общим объектом базы данных
virtualtransactiontextВиртуальный идентификатор транзакции, которая удерживает или ожидает эту блокировку
pidintegerИдентификатор серверного процесса (PID), удерживающего или ожидающего эту блокировку, или NULL, если блокировка удерживается подготовленной транзакцией
modetextНазвание режима блокировки, удерживаемой или ожидаемой этим процессом (см. подразделы Блокировки на уровне таблицы и Уровень изоляции Serializable)
grantedbooleanTrue, если блокировка удерживается, false, если блокировка ожидается
fastpathbooleanTrue, если блокировка была получена быстрым путем, false, если она получена через главную таблицу блокировки

Поле granted имеет значение true в строке, представляющей блокировку, удерживаемую указанным процессом. Значение false показывает, что этот процесс в настоящее время ожидает получения данной блокировки, свидетельствуя о том, что как минимум еще один процесс удерживает или ожидает блокировку того же объекта в конфликтном режиме. Процесс ожидания будет находиться в спящем режиме до тех пор, пока не будет снята другая блокировка (или обнаружена ситуация взаимоблокировки). Один процесс может ожидать получения не более одной блокировки за один раз.

Во время выполнения транзакции серверный процесс удерживает исключительную блокировку виртуального идентификатора транзакции. Если транзакции присваивается постоянный идентификатор (что обычно происходит только в том случае, если транзакция изменяет состояние базы данных), он также удерживает монопольную блокировку на постоянном идентификаторе транзакции до ее завершения. Когда процесс считает необходимым специально дождаться окончания другой транзакции, он делает это, пытаясь получить общую блокировку идентификатора другой транзакции (виртуального или постоянного, в зависимости от ситуации). Это произойдет только тогда, когда другая транзакция завершится и освободит свои блокировки.

Хотя кортежи являются блокируемым типом объекта, информация о блокировках на уровне строк хранится на диске, а не в памяти, и поэтому блокировки на уровне строк обычно в этом представлении не отображаются. Если процесс ожидает блокировки уровня строки, он обычно отображается в представлении как ожидающий постоянного идентификатора транзакции текущего владельца этой блокировки.

Необязательные блокировки можно получить по ключам, состоящим из одного значения bigint или двух значений integer. При выведении ключа bigint его старшая часть отображается в столбце classid, младшая — в столбце objid, а objsubid равен 1. Исходное значение bigint можно собрать заново с помощью выражения (classid::bigint << 32) | objid::bigint. Ключи integer отображаются так: первый в столбце classid, второй — в столбце objid, а objsubid равен 2. Фактическое значение ключей определяет пользователь. Необязательные блокировки являются локальными для каждой базы данных, поэтому столбец database имеет для них значение.

pg_locks обеспечивает глобальное представление всех блокировок в кластере баз данных, а не только тех, которые относятся к текущей базе данных. Хотя через соединение столбцов relation и pg_class.oid можно определить заблокированные отношения, это будет правильно работать только для отношений в текущей базе данных (т. е. тех, для которых столбец database — это либо OID текущей базы данных, либо ноль).

Столбец pid можно соединить со столбцом pid представления pg_stat_activity, что позволит получить дополнительную информацию о сеансе, удерживающем или ожидающем каждую блокировку, например

SELECT * FROM pg_locks pl LEFT JOIN pg_stat_activity psa
    ON pl.pid = psa.pid;

Кроме того, при использовании подготовленных транзакций столбец virtualtransaction можно соединить со столбцом transaction представления pg_prepared_xacts, что позволит получить дополнительную информацию об удерживающих блокировки подготовленных транзакциях. (Подготовленная транзакция не может ожидать блокировки, но она продолжает удерживать блокировки, полученные ей в процессе выполнения.) Например:

SELECT * FROM pg_locks pl LEFT JOIN pg_prepared_xacts ppx
    ON pl.virtualtransaction = '-1/' || ppx.transaction;

Хотя и возможно получить информацию о том, какие из процессов блокируют другие процессы (и какие именно), соединив представление pg_locks с самим собой, крайне трудно сделать это правильно во всех деталях. Такому запросу пришлось бы кодировать знания о том, какие режимы блокировки конфликтуют с другими. Хуже того, представление pg_locks не выдает информацию ни о том, какие процессы опережают другие в очереди ожидания блокировки, ни о том, какие процессы являются параллельными рабочими процессами и от от имени каких других сеансов клиента они выполняются. Чтобы определить, каким процессом (или процессами) блокируется ожидающий процесс, лучше воспользоваться функцией pg_blocking_pids() (см. таблицу Информационные функции сеанса).

Представление pg_locks отображает данные как из диспетчера обычных блокировок, так и из диспетчера предикатных блокировок, которые являются отдельными системами; кроме того, диспетчер обычных блокировок подразделяет свои блокировки на обычные и полученные быстрым путем. Полная согласованность этих данных не гарантируется. При запросе к этому представлению данные о блокировках по быстрому пути (с fastpath = true) собираются с каждого серверного процесса по очереди, без замораживания состояние всего диспетчера блокировок, поэтому существует вероятность того, что во время сбора этой информации блокировки будут получены или освобождены. Обратите внимание, однако, что эти блокировки, как известно, не должны конфликтовать ни с какими другими действующими блокировками. После того, как во все серверные процессы были сделаны запросы для получения быстрых блокировок, оставшаяся часть диспетчера обычных блокировок блокируется как единое целое, и согласованный снимок всех оставшихся блокировок собирается атомарно. После разблокирования диспетчера обычных блокировок аналогичным образом блокируется диспетчер предикатных блокировок, и все предикатные блокировки собираются атомарно. Таким образом, за исключением быстрых блокировок, каждый диспетчер блокировок будет выдавать согласованный набор результатов, но поскольку мы не блокируем оба диспетчера блокировок одновременно, блокировки могут быть получены или освобождены после опроса диспетчера обычных блокировок и до опроса диспетчера предикатных блокировки.

Блокировка диспетчера обычных и/или предикатных блокировок может некоторым образом повлиять на производительность базы данных, если очень часто обращаться к этому представлению. Эти блокировки удерживаются не дольше, чем необходимо для получения данных от диспетчеров блокировок, но это не до конца исключает возможность влияния на производительность.

pg_matviews

Представление pg_matviews обеспечивает доступ к полезной информации о каждом материализованном представлении в базе данных.

Таблица: Столбцы pg_matviews

ИмяТипСсылкиОписание
schemanamenamepg_namespace.nspnameИмя схемы, содержащей материализованное представление
matviewnamenamepg_class.relnameИмя материализованного представления
matviewownernamepg_authid.rolnameИмя владельца материализованного представления
tablespacenamepg_tablespace.spcnameИмя табличного пространства, содержащего материализованное представление (NULL, если это пространство по умолчанию для базы данных)
hasindexesbooleanTrue, если материализованное представление имеет (или недавно имело) какие-либо индексы
ISP populatedbooleanTrue, если материализованное представление в данный момент заполнено
definitiontextОпределение материализованного представления (реконструированный запрос SELECT)

pg_policies

Представление pg_policies обеспечивает доступ к полезной информации о каждой политике защиты на уровне строк в базе данных.

Таблица: Столбцы pg_policies

ИмяТипСсылкиОписание
schemanamenamepg_namespace.nspnameИмя схемы, содержащей таблицу с этой политикой
tablenamenamepg_class.relnameИмя таблицы с этой политикой
policynamenamepg_policy.polnameИмя политики
polpermissivetextЯвляется ли эта политика разрешительной или ограничительной?
rolesname[]Роли, к которым применяется эта политика
cmdtextТип команды, к которой применяется эта политика
qualtextВыражение, добавленное к условиям барьера безопасности для запросов, к которым применяется эта политика
with_checktextВыражение, добавленное к условиям WITH CHECK для запросов, которые пытаются добавить строки в эту таблицу

pg_prepared_statements

В представлении pg_prepared_statements отображаются все подготовленные операторы, доступные в текущем сеансе. Более подробную информацию о подготовленных операторах см. в описании команды PREPARE.

pg_prepared_statements содержит отдельную строку для каждого подготовленного оператора. Строки добавляются в представление при создании нового подготовленного оператора и удаляются при освобождении подготовленного оператора (например, с помощью команды DEALLOCATE).

Таблица: Столбцы pg_prepared_statements

ИмяТипОписание
nametextИдентификатор подготовленного оператора
statementtextСтрока запроса, отправленная клиентом для создания этого подготовленного оператора. Для подготовленных операторов, созданных посредством SQL, это команда PREPARE, инициализированная клиентом. Для подготовленных операторов, созданных посредством клиент-серверного протокола, это текст самого подготовленного оператора.
prepare_timetimestamptzВремя, в которое был создан подготовленный оператор
parameter_typesregtype[]Ожидаемые типы параметров для подготовленного оператора в виде массива regtype. OID, соответствующий элементу этого массива, может быть получен путем приведения значения regtype к oid.
from_sqlbooleanTrue, если подготовленный оператор был создан посредством SQL-команды PREPARE; false, если оператор был подготовлен посредством клиент-серверного протокола

Представление pg_prepared_statements доступно только для чтения.

pg_prepared_xacts

В представлении pg_prepared_xacts отображается информация о транзакциях, которые в настоящее время подготовлены для двухфазной фиксации (подробную информацию см. в описании команды PREPARE TRANSACTION).

pg_prepared_xacts содержит отдельную строку для каждой подготовленной транзакции. Запись удаляется при фиксации или откате транзакции.

Таблица: Столбцы pg_prepared_xacts

ИмяТипСсылкиОписание
transactionxidЧисловой идентификатор подготовленной транзакции
gidtextГлобальный идентификатор, присвоенный этой транзакции
preparedtimestamp with time zoneВремя, в которое эта транзакция была подготовлена к фиксации
ownernamepg_authid.rolnameИмя пользователя, выполнившего эту транзакцию
databasenamepg_database.datnameИмя базы данных, в которой была выполнена эта транзакция

При обращении к представлению pg_prepared_xacts внутренние структуры данных диспетчера транзакций на мгновение блокируются, а для отображения в представлении создается копия. Это гарантирует, что представление создает согласованный набор результатов, не блокируя при этом обычные операции дольше, чем это необходимо. Тем не менее, при частых обращениях к этому представлению это может некоторым образом сказаться на производительности базы данных.

pg_publication_tables

Представление pg_publication_tables выдает информацию о сопоставлении публикаций и таблиц, которые они содержат. В отличие от нижележащего каталога pg_publication_rel, это представление расширяет список публикаций, определенных как FOR ALL TABLES, поэтому для таких публикаций будет наличествовать строка для каждой соответствующей таблицы.

Таблица: Столбцы pg_publication_tables

ИмяТипСсылкиОписание
pubnamenamepg_publication.pubnameИмя публикации
schemanamenamepg_namespace.nspnameИмя схемы, содержащей таблицу
tablenamenamepg_class.relnameИмя таблицы

pg_replication_origin_status

В представлении pg_replication_origin_status содержится информация о прогрессе воспроизведения записей репликации, достигнутом для определенного источника.

Таблица: Столбцы pg_replication_origin_status

ИмяТипСсылкиОписание
local_idoidpg_replication_origin.roidentВнутренний идентификатор узла
external_idtextpg_replication_origin.ronameИдентификатор внешнего узла
remote_lsnpg_lsnLSN исходного узла, до которого были реплицированы данные.
local_lsnpg_lsnLSN этого узла, в котором был реплицирован remote_lsn. Используется при асинхронной фиксации для сброса записей фиксации на диск перед сохранением данных.

pg_replication_slots

Представление pg_replication_slots выдает список всех слотов репликации, которые в настоящее время существуют в кластере баз данных, а также их текущее состояние.

Таблица: Столбцы pg_replication_slots

ИмяТипСсылкиОписание
slot_namenameУникальный внутрикластерный идентификатор для слота репликации
pluginnameБазовое имя разделяемого объекта, содержащего модуль вывода, который использует этот логический слот, или NULL для физических слотов.
slot_typetextТип слота — physical (физический) или logical (логический)
datoidoidpg_database.oidOID базы данных, с которой связан этот слот, или NULL. Только логические слоты могут быть связаны с базой данных.
databasetextpg_database.datnameИмя базы данных, с которой связан этот слот, или NULL. Только логические слоты могут быть связаны с базой данных.
temporarybooleanTrue, если это слот временной репликации. Временные слоты не сохраняются на диске и автоматически удаляются при ошибке или по завершении сеанса.
activebooleanTrue, если этот слот в настоящий момент активно используется
active_pidintegerИдентификатор процесса сеанса, использующего этот слот, если тот в настоящий момент активно используется. NULL если слот не используется.
xminxidСтарейшая транзакция, которую этот слот должен сохранить в базе данных. Команда VACUUM не сможет удалить кортежи, удаленные любой более поздней транзакцией.
catalog_xminxidСтарейшая транзакция, влияющая на системные каталоги, которые этот слот должен сохранить в базе данных. Команда VACUUM не сможет удалить кортежи каталога, удаленные любой более поздней транзакцией.
restart_lsnpg_lsnАдрес (LSN) старейшей записи в WAL, которая все еще может понадобиться пользователю этого слота и поэтому не будет автоматически удалена во время контрольных точек. NULL, если LSN этого слота никогда не был зарезервирован.
confirmed_flush_lsnpg_lsnАдрес (LSN), до которого пользователь логического слота подтвердил получение данных. Данные старее этого LSN уже не доступны. NULL для физических слотов.

pg_roles

Представление pg_roles обеспечивает доступ к информации о ролях базы данных. Это просто доступное для всех представление pg_authid, которое скрывает поле пароля.

Таблица: Столбцы pg_roles

ИмяТипСсылкиОписание
rolnamenameИмя роли
rolsuperboolРоль имеет права суперпользователя
rolinheritboolРоль автоматически наследует права ролей, членом которых является
rolcreateroleboolРоль может создавать другие роли
rolcreatedbboolРоль может создавать базы данных
rolcanloginboolРоль может войти в систему. То есть эта роль может быть задана в качестве начального идентификатора авторизации сеанса
rolreplicationboolРоль является ролью репликации. Роль репликации может запускать соединения для репликации и создавать и удалять слоты репликации.
rolconnlimitint4Для ролей, которые могут войти в систему, задает максимальное число одновременных подключений, которые может создать эта роль. -1 означает отсутствие ограничений.
rolpasswordtextНе пароль (всегда читается как ********)
rolvaliduntiltimestamptzСрок действия пароля (используется только для аутентификации по паролю); NULL, если срок не ограничен
rolbypassrlsboolРоль обходит любую политику защиты уровня строки; дополнительную информацию см. в разделе Политики защиты строк.
rolconfigtext[]Заданные для роли значения по умолчанию переменных конфигурации времени выполнения
oidoidpg_authid.oidИдентификатор роли

pg_rules

Представление pg_rules обеспечивает доступ к полезной информации о правилах перезаписи запросов.

Таблица: Столбцы pg_rules

ИмяТипСсылкиОписание
schemanamenamepg_namespace.nspnameИмя схемы, содержащей таблицу
tablenamenamepg_class.relnameИмя таблицы, для которой используется это правило
rulenamenamepg_rewrite.rulenameИмя правила
definitiontextОпределение правила (реконструированная команда создания)

Из представления pg_rules исключены правила ON SELECT для представлений и материализованных представлений; их можно увидеть в pg_views и pg_matviews.

pg_seclabels

Представление pg_seclabels предоставляет информацию о метках безопасности. Это более простая для обращения версия каталога pg_seclabel.

Таблица: Столбцы pg_seclabels

ИмяТипСсылкиОписание
objoidoidOID любого столбцаOID объекта, к которому относится эта метка безопасности
classoidoidpg_class.oidOID системного каталога, в котором отображается этот объект
objsubidint4Для метки безопасности в столбце таблицы это номер столбца (objoid и classoid указывают на саму таблицу). Для всех других типов объектов этот столбец содержит нуль.
objtypetextТип объекта, к которому применяется эта метка, в текстовом виде.
objnamespaceoidpg_namespace.oidOID пространства имен для этого объекта, если применимо; иначе NULL.
objnametextИмя объекта, к которому применяется эта метка, в текстовом виде.
providertextpg_seclabel.providerПоставщик меток безопасности, связанный с этой меткой.
labeltextpg_seclabel.labelМетка безопасности, применяемая к этому объекту.

pg_sequences

Представление pg_sequences обеспечивает доступ к полезной информации о каждой последовательности в базе данных.

Таблица: Столбцы pg_sequences

ИмяТипСсылкиОписание
schemanamenamepg_namespace.nspnameИмя схемы, содержащей последовательность
sequencenamenamepg_class.relnameИмя последовательности
sequenceownernamepg_authid.rolnameИмя владельца последовательности
data_typeregtypepg_type.oidТип данных последовательности
start_valuebigintНачальное значение последовательности
min_valuebigintМинимальное значение последовательности
max_valuebigintМаксимальное значение последовательности
increment_bybigintЗначение приращения последовательности
cyclebooleanЗацикливается ли последовательность
cache_sizebigintРазмер кэша последовательности
last_valuebigintПоследнее значение последовательности, записанное на диск. Если используется кэширование, это значение может быть больше, чем последнее значение, полученное из последовательности. NULL, если последовательность еще не была прочитана. Также содержит NULL, если текущий пользователь не имеет для последовательности прав USAGE или SELECT.

pg_settings

Представление pg_setting обеспечивает доступ к параметрам времени выполнения сервера. В сущности это альтернативный интерфейс к командам SHOW и SET. Также оно обеспечивает доступ к некоторым фактам о каждом параметре, которые нельзя получить напрямую при помощи команды SHOW, например, минимальные и максимальные значения.

Таблица: Столбцы pg_settings

ИмяТипОписание
nametextИмя параметра конфигурации времени выполнения
settingtextТекущее значение параметра
unittextНеявно подразумеваемая единица измерения параметра
categorytextЛогическая группа параметра
short_desctextКраткое описание параметра
extra_desctextДополнительное, более детальное, описание параметра
contexttextКонтекст, необходимый для установки значения параметра (см. ниже)
vartypetextТип параметра (bool, enum, integer, real или string)
sourcetextИсточник текущего значения параметра
min_valtextМинимальное допустимое значение параметра (NULL для нечисловых значений)
max_valtextМаксимально допустимое значение параметра (NULL для нечисловых значений)
enumvalstext[]Допустимые значения параметра-перечисления (NULL для значений не перечислений)
boot_valtextЗначение параметра, принимаемое при запуске сервера, если параметр не задан иным образом
reset_valtextЗначение, к которое параметр будет сброшен командой RESET в текущем сеансе
sourcefiletextФайл конфигурации, в котором было задано текущее значение (NULL для значений, полученных не из файлов конфигурации, или при проверке пользователем, который не является ни суперпользователем, ни членом роли pg_read_all_settings); полезно при использовании указаний include в файлах конфигурации
sourcelineintegerНомер строки в файле конфигурации, в котором было задано текущее значение (NULL для значений, полученных не из файлов конфигурации, или при проверке пользователем, который не является ни суперпользователем, ни членом роли pg_read_all_settings).
pending_restartbooleanTrue, если значение было изменено в файле конфигурации, но требуется перезапуск; иначе — false.

Существует несколько возможных значений контекста. В порядке уменьшения сложности изменения параметров, ими являются:

internal

Эти параметры нельзя изменить непосредственно; они отражают значения, определенные внутри системы. Некоторые из них можно изменить, пересобрав сервер с другими параметрами конфигурации, или изменив параметры, передаваемые в qhb_bootstrap.

postmaster

Эти параметры можно применять только при запуске сервера, поэтому любое изменение требует его перезагрузки. Значения для этих параметров обычно хранятся в файле qhb.conf либо передаются в командной строке при запуске сервера. Разумеется, параметры любого из нижеследующих типов context также можно задать во время запуска сервера.

sighup

Изменения этих параметров можно вносить в qhb.conf без перезагрузки сервера. Если послать в qhbmaster (управляющий процесс) сигнал SIGHUP, он перечитает qhb.conf и применит изменения. Qhbmaster также перешлет сигнал SIGHUP своим дочерним процессам, чтобы все они приняли новое значение.

superuser-backend

Изменения этих параметров можно вносить в qhb.conf без перезагрузки сервера. Они также могут быть установлены для определенного сеанса в пакете запроса на подключение (например, через переменную окружения PGOPTIONS), но только если подключающийся пользователь является суперпользователем. Однако эти параметры никогда не изменяются в сеансе после его запуска. Если вы измените их внутри qhb.conf, отправьте сигнал SIGHUP в qhbmaster, чтобы тот перечитал qhb.conf. Новые значения будут влиять только на сеансы, запускаемые впоследствии.

backend

Изменения этих параметров можно вносить в qhb.conf без перезагрузки сервера. Они также могут быть установлены для определенного сеанса в пакете запроса на подключение (например, через переменную окружения PGOPTIONS); любой пользователь может внести такое изменение для своей сессии. Однако эти параметры никогда не изменяются в сеансе после его запуска. Если вы измените их внутри qhb.conf, отправьте сигнал SIGHUP в qhbmaster, чтобы тот перечитал qhb.conf. Новые значения будут влиять только на сеансы, запускаемые впоследствии.

superuser

Эти параметры можно задать из qhb.conf или в рамках сеанса с помощью команды SET, но только суперпользователи могут изменить их посредством SET. Изменения в qhb.conf будут влиять на существующие сеансы только в том случае, если в них командой SET не были заданы локальные в рамках сеанса значения.

user

Эти параметры можно задать из qhb.conf или в рамках сеанса с помощью команды SET. В рамках сеанса их локальное значение может изменить любой пользователь. Изменения в qhb.conf будут влиять на существующие сеансы только в том случае, если в них командой SET не были заданы локальные в рамках сеанса значения.

Более подробную информацию о различных способах изменения этих параметров см. в разделе Настройка параметров.

Представление pg_settings нельзя вставить или удалить, но его можно изменить. Команда UPDATE, примененная к pg_settings, равнозначна выполнению команды SET для этого конкретного параметра. Это изменение влияет только на значение, используемое в текущем сеансе. Если команда UPDATE выполняется в рамках транзакции, которая затем прерывается, эффекты UPDATE пропадают при откате транзакции. После фиксации окружающей транзакции эти эффекты сохранятся до конца сеанса, если только не будут переопределены другой командой UPDATE или SET.

pg_shadow

В представлении pg_shadow показаны свойства всех ролей, которые помечены как rolcanlogin в pg_authid.

Такое имя («тень») обусловлено тем фактом, что эта таблица не должна быть доступна для чтения любому пользователю, поскольку она содержит пароли. pg_user — это доступное всем представление для pg_shadow, в котором стерто поле пароля.

Таблица: Столбцы pg_shadow

ИмяТипСсылкиОписание
usenamenamepg_authid.rolnameИмя пользователя
usesysidoidpg_authid.oidИдентификатор этого пользователя
usecreatedbboolПользователь может создавать базы данных
usesuperboolПользователь является суперпользователем
usereplboolПользователь может инициировать потоковую репликацию и включать и выключать в системе режим резервного копирования.
usebypassrlsboolПользователь обходит любую политику защиты на уровне строк; дополнительную информацию см. в разделе Политики защиты строк.
passwdtextПароль (возможно зашифрованный); NULL, если пароля нет. Подробную информацию о том, как хранятся зашифрованные пароли, см. в описании каталога pg_authid.
valuntiltimestamptzСрок действия пароля (используется только для аутентификации по паролю)
useconfigtext[]Сеансовые значения по умолчанию для переменных конфигурации времени выполнения

pg_stats

Представление pg_stats обеспечивает доступ к информации, хранящейся в каталоге pg_statistic. Это представление позволяет получить доступ только к строкам pg_statistic, соответствующим таблицам, которые пользователь может читать; таким образом, можно без опасений разрешить публичный доступ для чтения к этому представлению.

pg_stats также предназначено для представления информации в более удобочитаемом формате, чем нижележащий каталог, — за счет того, что схему этого представления необходимо расширять всякий раз, когда для pg_statistic определяются новые типы слотов.

Таблица: Столбцы pg_stats

ИмяТипСсылкиОписание
schemanamenamepg_namespace.nspnameИмя схемы, содержащей таблицу
tablenamenamepg_class.relnameИмя таблицы
attnamenamepg_attribute.attnameИмя столбца, описываемого этой строкой
inheritedboolЕсли true, то данные этой строки включают значения в дочерних столбцах наследования, а не только в указанной таблице
null_fracrealДоля записей столбцов, имеющих значение NULL
avg_widthintegerСредняя ширина записей столбца в байтах
n_distinctrealЕсли больше нуля, то показывает примерное число различных значений в столбце. Если меньше нуля, то модуль числа показывает количество различных значений, разделенное на число строк. (Отрицательная форма используется, когда ANALYZE считает, что число различных значений, вероятно, будет увеличиваться по мере роста таблицы; положительная форма используется, когда считается, что столбец имеет фиксированное число возможных значений.) Например, значение -1 указывает на уникальный столбец, в котором число различных значений совпадает с числом строк.
most_common_valsanyarrayСписок наиболее распространенных значений в столбце. (NULL, если значения, встречающиеся чаще других, не обнаруживаются.)
most_common_freqsreal[]Список частот наиболее распространенных значений, т. е. количество вхождений каждого значения, деленное на общее количество строк. (NULL, если most_common_vals содержит NULL.)
histogram_boundsanyarrayСписок значений, разделяющих значения столбца на группы примерно одинаковой популяции. Значения most_common_vals, если они присутствует, исключаются из этого расчета гистограммы. (Этот столбец содержит NULL, если тип данных столбца не имеет оператора < или если список most_common_vals охватывает все популяции.)
correlationrealСтатистическая корреляция между физическим упорядочением строк и логическим упорядочением значений столбцов. Диапазон допустимых значений: от -1 до +1. Когда значение близко к -1 или +1, сканирование индекса по столбцу будет оценено как более дешевое, чем когда оно близко к нулю, вследствие уменьшения случайного доступа к диску. (Столбец имеет значение NULL, если тип данных столбца не имеет оператора <.)
most_common_elemsanyarrayСписок ненулевых значений элементов, наиболее часто появляющихся в пределах значений столбца. (NULL для скалярных типов.)
most_common_elem_freqsreal[]Список частот наиболее распространенных значений элементов, т. е. доля строк, содержащих хотя бы один экземпляр данного значения. За частотами каждого элемента следуют два или три дополнительных значения; это минимум и максимум предыдущих частот каждого элемента и (необязательно) частота элементов NULL. (NULL, когда most_common_elems содержит NULL.)
elem_count_histogramreal[]Гистограмма подсчетов различных значений элементов, отличных от NULL, в пределах значений столбца, за которой следует среднее количество различных элементов, отличных от NULL. (NULL для скалярных типов.)

Максимальным числом записей в полях массива можно управлять на уровне столбцов с помощью команды ALTER TABLE SET STATISTICS или глобально, задавая параметр времени выполнения default_statistics_target.

pg_stats_ext

Представление pg_stats_ext обеспечивает доступ к информации, хранящейся в каталогах pg_statistic_ext и pg_statistic_ext_data. Это представление дает доступ только к тем строкам pg_statistic_ext и pg_statistic_ext_data, которые соответствуют таблицам, которые пользователь может читать; таким образом, можно без опасений разрешить публичный доступ на чтение к этому представлению.

pg_stats_ext также предназначено для представления информации в более удобочитаемом формате, чем нижележащие каталоги, — за счет того, что схему этого представления необходимо расширять всякий раз, когда в pg_statistic_ext добавляются новые типы расширенной статистики.

Таблица: Столбцы pg_stats_ext

ИмяТипСсылкиОписание
schemanamenamepg_namespace.nspnameИмя схемы, содержащей таблицу
tablenamenamepg_class.relnameИмя таблицы
statistics_schemanamenamepg_namespace.nspnameИмя схемы, содержащей расширенную статистику
statistics_namenamepg_statistic_ext.stxnameИмя расширенной статистики
statistics_owneroidpg_authid.oidВладелец расширенной статистики
attnamesname[]pg_attribute.attnameИмена столбцов, для которых определена расширенная статистика
kindstext[]Типы расширенной статистики, включенные для этой записи
n_distinctpg_ndistinctКоличество различных комбинаций значений столбцов. Если больше нуля, то показывает примерное число различных значений в комбинации. Если меньше нуля, то модуль числа показывает количество различных значений, разделенное на число строк. (Отрицательная форма используется, когда ANALYZE считает, что число различных значений, вероятно, будет увеличиваться по мере роста таблицы; положительная форма используется, когда считается, что столбец имеет фиксированное число возможных значений.) Например, значение -1 указывает на уникальный столбец, в котором число различных значений совпадает с числом строк.
dependenciespg_dependenciesСтатистика для функциональной зависимости
most_common_valsanyarrayСписок наиболее распространенных комбинаций значений в столбцах. (NULL, если комбинации, встречающиеся чаще других, не обнаруживаются.)
most_common_val_nullsanyarrayСписок флагов NULL для наиболее распространенных комбинаций значений. (NULL, если most_common_vals содержит NULL)
most_common_freqsreal[]Список частот наиболее распространенных комбинаций, т. е. количество вхождений каждой, деленное на общее количество строк. (NULL, если most_common_vals содержит NULL)
most_common_base_freqsreal[]Список базовых частот наиболее распространенных комбинаций, т. е. произведение частот отдельных значений. (NULL, если most_common_vals содержит NULL)

Максимальным числом записей в полях массива можно управлять на уровне столбцов с помощью команды ALTER TABLE SET STATISTICS или глобально, задав параметр времени выполнения default_statistics_target.

pg_tables

Представление pg_tables обеспечивает доступ к полезной информации о каждой таблице в базе данных.

Таблица: Столбцы pg_tables

ИмяТипСсылкиОписание
schemanamenamepg_namespace.nspnameИмя схемы, содержащей таблицу
tablenamenamepg_class.relnameИмя таблицы
tableownernamepg_authid.rolnameИмя владельца таблицы
tablespacenamepg_tablespace.spcnameИмя табличного пространства, содержащего таблицу (NULL, если это пространство по умолчанию для базы данных)
hasindexesbooleanpg_class.relhasindexTrue, если таблица имеет (или недавно имела) какие-либо индексы
hasrulesbooleanpg_class.relhasrulesTrue, если таблица имеет (или когда-то имела) правила
hastriggersbooleanpg_class.реластриггерыTrue, если таблица имеет (или когда-то имела) триггеры
rowsecuritybooleanpg_class.relrowsecurityTrue, если в таблице включена защита уровня строк

pg_timezone_abbrevs

Представление pg_timezone_abbrevs содержит список сокращений часовых поясов, которые в настоящее время верно распознаются функциями ввода даты/времени. Содержание этого представления изменяется при изменении параметра времени выполнения timezone_abbreviations.

Таблица: Столбцы pg_timezone_abbrevs

ИмяТипОписание
abbrevtextАббревиатура часового пояса
utc_offsetintervalСмещение от UTC (положительное значение означает на восток от Гринвича)
is_dstbooleanTrue, если это аббревиатура задает летнее время

Хотя большинство сокращений часовых поясов представляют собой фиксированные смещения от UTC, в некоторых поясах значение смещения менялось в ходе истории. В таких случаях это представление содержит их текущее значение.

pg_timezone_names

Представление pg_timezone_names содержит список имен часовых поясов, которые распознаются командой SET TIMEZONE, а также связанные с ними сокращения, смещения UTC и статус летнего времени. (Технически QHB не использует UTC, потому что високосные секунды не обрабатываются). В отличие от сокращений, показанных в pg_timezone_abbrevs, многие из этих имен подразумевают набор правил перехода на летнее время. Поэтому связанная информация изменяется при пересечении локальных границ перехода на летнее время. Отображаемая информация вычисляется на основе текущего значения параметра CURRENT_TIMESTAMP.

Таблица: Столбцы pg_timezone_names

ИмяТипОписание
nametextНазвание часового пояса
abbrevtextАббревиатура часового пояса
utc_offsetинтервалСмещение от UTC (положительное значение означает восток от Гринвича)
is_dstbooleanTrue, если в данный момент установлено летнее время

pg_user

Представление pg_user обеспечивает доступ к информации о пользователях базы данных. Это просто общедоступное представление каталога pg_shadow, в котором скрыто поле пароля.

Таблица: Столбцы pg_user

ИмяТипОписание
usenamenameИмя пользователя
usesysidoidИдентификатор этого пользователя
usecreatedbboolПользователь может создавать базы данных
usesuperboolПользователь является суперпользователем
usereplboolПользователь может инициировать потоковую репликацию и включать и выключать режим резервного копирования в системе.
usebypassrlsboolПользователь обходит каждую политику защиты уровня строк; дополнительную информацию см. в разделе Политики защиты строк.
passwdtextНе пароль (всегда читается как ********)
valuntiltimestamptzСрок действия пароля (используется только для аутентификации по паролю)
useconfigtext[]Значения по умолчанию сеанса для переменных конфигурации времени выполнения

pg_user_mappings

Представление pg_user_mappings обеспечивает доступ к информации о сопоставлениях пользователей. По сути это общедоступное представление каталога pg_user_mapping, которое не показывает поле параметров, если у пользователя нет прав на его использование.

Таблица: Столбцы pg_user_mappings

ИмяТипСсылкиОписание
umidoidpg_user_mapping.oidOID сопоставления пользователей
srvidoidpg_foreign_server.oidOID стороннего сервера, содержащего это сопоставление
srvnamenamepg_foreign_server.srvnameИмя стороннего сервера
umuseroidpg_authid.oidOID сопоставляемой локальной роли; 0, если сопоставление пользователей задается для всех
usenamenameИмя локального пользователя для сопоставления
umoptionstext[]Специфические параметры сопоставления пользователей в виде строки «ключ=значение»

Чтобы защитить информацию о пароле, сохраненную в качестве параметра сопоставления пользователей, столбец umoptions будет считываться как NULL, если не применяется одно из следующих условий:

  • текущий пользователь является сопоставляемым пользователем, который владеет сервером или имеет для него право USAGE

  • текущий пользователь является владельцем сервера и прочитывается сопоставление для PUBLIC

  • текущий пользователь является суперпользователем

pg_views

Представление pg_views обеспечивает доступ к полезной информации о каждом представлении в базе данных.

Таблица: Столбцы pg_views

ИмяТипСсылкиОписание
schemanamenamepg_namespace.nspnameИмя схемы, содержащей представление
viewnamenamepg_class.relnameИмя представления
viewownernamepg_authid.rolnameИмя владельца представления
определениеtextОпределение представления (реконструированный запрос SELECT)