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

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



Обзор

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

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

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

Имя каталогаНазначение
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_parameter_aclпараметры конфигурации, для которых были предоставлены права
pg_partitioned_tableинформация о ключе партиционирования таблиц
pg_policyполитики защиты на уровне строк
pg_procфункции и процедуры
pg_publicationпубликации для логической репликации
pg_publication_namespaceсопоставление схем с публикациями
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сопоставления пользователей для сторонних серверов
qhb_auth_profileпрофили безопасности
qhb_auth_profile_authidсвязь пользователя с определенным профилем безопасности
qhb_user_lockoutзаблокированные пользователи


pg_aggregate

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

Таблица 2. Столбцы pg_aggregate

Столбец ТипОписание
aggfnoid regproc
(ссылается на pg_proc.oid)
OID агрегатной функции в каталоге pg_proc
aggkind charВид агрегата: n для обычного, o для сортирующего или h для гипотезирующего
aggnumdirectargs int2Количество непосредственных (неагрегированных) аргументов сортирующего или гипотезирующего агрегата, считая переменный массив аргументов за один аргумент. Если равняется pronargs, агрегат должен принимать переменный массив, и этот массив описывает как агрегированные аргументы, так и конечные непосредственные аргументы. Всегда равно нулю для обычных агрегатов.
aggtransfn regproc
(ссылается на pg_proc.oid)
Функция перехода
aggfinalfn regproc
(ссылается на pg_proc.oid)
Функция завершения (ноль, если ее нет)
aggcombinefn regproc
(ссылается на pg_proc.oid)
Функция совмещения (ноль, если ее нет)
aggserialfn regproc
(ссылается на pg_proc.oid)
Функция сериализации (ноль, если ее нет)
aggdeserialfn regproc
(ссылается на pg_proc.oid)
Функция десериализации (ноль, если ее нет)
aggmtransfn regproc
(ссылается на pg_proc.oid)
Функция прямого перехода для режима движущегося агрегата (ноль, если ее нет)
agminvtransfn regproc
(ссылается на pg_proc.oid)
Функция обратного перехода для режима движущегося агрегата (ноль, если ее нет)
aggmfinalfn regproc
(ссылается на pg_proc.oid)
Функция завершения для режима движущегося агрегата (ноль, если ее нет)
aggfinalextra boolПри значении true в aggfinalfn передаются дополнительные фиктивные аргументы
aggmfinalextra boolПри значении true в aggmfinalfn передаются дополнительные фиктивные аргументы
aggfinalmodify charИзменяет ли функция aggfinalfn значение состояния перехода: r, если состояние доступно только для чтения, s, если aggtransfn нельзя применять после aggfinalfn, или w, если состояние перезаписывается.
aggmfinalmodify charСхоже с aggfinalmodify, но для самой aggmfinalfn
aggsortop oid
(ссылается на pg_operator.oid)
Связанный оператор сортировки (ноль, если его нет)
aggtranstype oid
(ссылается на pg_type.oid)
Тип данных внутреннего перехода (состояния) агрегатной функции
aggtransspace int4Приблизительный средний размер (в байтах) данных о состоянии перехода или 0 для использования расчетного значения по умолчанию
aggmtranstype oid
(ссылается на pg_type.oid)
Тип данных внутреннего перехода (состояния) агрегатной функции для режима движущегося агрегата (ноль, если его нет)
aggmtransspace int4Приблизительный средний размер (в байтах) данных о состоянии перехода для режима движущегося агрегата или 0 для использования расчетного значения по умолчанию
agginitval textНачальное значение состояния перехода. Это текстовое поле, содержащее начальное значение во внешнем строковом представлении. Если это поле равно NULL, то значение состояния перехода начинается с NULL.
aggminitval textНачальное значение состояния перехода для режима движущегося агрегата. Это текстовое поле, содержащее начальное значение во внешнем строковом представлении. Если это поле равно NULL, то значение состояния перехода начинается с NULL.

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



pg_am

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

Таблица 3. Столбцы pg_am

Столбец ТипОписание
oid oidИдентификатор строки
amname nameИмя метода доступа
amhandler regproc
(ссылается на pg_proc.oid)
OID функции обработки, ответственной за предоставление информации о методе доступа
amtype chart = таблица (включая материализованные представления), i = индекс.

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



pg_amop

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

Таблица 4. Столбцы pg_amop

Столбец ТипОписание
oid oidИдентификатор строки
amopfamily oid
(ссылается на pg_opfamily.oid)
Семейство операторов, для которого сделана эта запись
amoplefttype oid
(ссылается на pg_type.oid)
Тип входных данных левого операнда оператора
amoprighttype oid
(ссылается на pg_type.oid)
Тип входных данных правого операнда оператора
amopstrategy int2Номер стратегии оператора
amoppurpose charНазначение оператора: s для поиска, о для упорядочивания
amopopr oid
(ссылается на pg_operator.oid)
OID оператора
amopmethod oid
(ссылается на pg_am.oid)
Индексный метод доступа, для которого предназначено семейство операторов
amopsortfamily oid
(ссылается на pg_opfamily.oid)
Семейство операторов B-дерева, в соответствии с которым данный оператор сортирует, если это оператор упорядочивания; ноль, если это оператор поиска

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

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

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

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



pg_amproc

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

Таблица 5. Столбцы pg_amproc

Столбец ТипОписание
oid oidИдентификатор строки
amprocfamily oid
(ссылается на pg_opfamily.oid)
Семейство операторов, для которого сделана эта запись
amproclefttype oid
(ссылается на pg_type.oid)
Тип входных данных левого операнда связанного оператора
amprocrighttype oid
(ссылается на pg_type.oid)
Тип входных данных правого операнда связанного оператора
amprocnum int2Номер вспомогательной функции
amproc regproc
(ссылается на pg_proc.oid)
OID этой функции

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



pg_attrdef

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

Таблица 6. Столбцы pg_attrdef

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


pg_attribute

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

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

Таблица 7. Столбцы pg_attribute

Столбец ТипОписание
adrelid oid
(ссылается на pg_class.oid)
Таблица, которой принадлежит этот столбец
attname nameИмя столбца
atttypid oid
(ссылается на pg_type.oid)
Тип данных этого столбца (ноль для удаленного столбца)
attlen int2Копия поля pg_type.typlen из записи типа этого столбца
attnum int2Номер столбца. Обычные столбцы нумеруются по возрастанию, начиная с 1. Системные столбцы, такие как ctid, имеют отрицательные номера (произвольные).
attcacheof int4Всегда -1 в хранилище, но при загрузке в дескриптор строки в памяти это поле может измениться, чтобы кешировать смещение атрибута в строке
atttypmod int4В поле atttypmod записываются специфичные для определенного типа данные, предоставляемые при создании таблицы (например максимальная длина столбца varchar). Эти данные передаются специфичным для типа функциям ввода и функциям ограничения длины. Для типов, которые не нуждаются в atttypmod, значение обычно будет равняться -1.
attndims int2Количество размерностей, если столбец имеет тип массива; в противном случае 0. (В настоящее время количество размерностей массива не регулируется, поэтому любое ненулевое значение в сущности означает «это массив».)
attbyval boolКопия поля pg_type.typbyval из записи типа этого столбца
attalign charКопия поля pg_type.typalign из записи типа этого столбца
attstorage charОбычно это копия поля pg_type.typstorage из записи типа этого столбца. Для типов данных, поддерживающих TOAST, после создания столбца этот атрибут можно изменить в целях управления политикой хранения.
attcompression charТекущий метод сжатия столбца. Обычно это '\0', указывающий использовать метод, установленный по умолчанию на данный момент (см. default_toast_compression). В ином случае при значении 'p' выбирается алгоритм сжатия pglz, тогда как при 'l' выбирается алгоритм LZ4. Однако если attstorage не допускает сжатие, это поле игнорируется.
attnotnull boolЭто поле представляет ограничение NOT NULL.
atthasdef boolЭтот столбец содержит выражение по умолчанию или генерирующее выражение; в этом случае в каталоге pg_attrdef, который фактически определяет данное выражение, появится соответствующая запись. (Определить, какое это выражение: по умолчанию или генерирующее, можно, проверив столбец attgenerated.)
atthasmissing boolЭтот столбец содержит значение, которое используется, когда столбец полностью отсутствует в строке (это происходит, когда столбец добавляется с неизменяющимся значением DEFAULT после создания строки). Используемое фактическое значение хранится в столбце attmissingval.
attidentity charПустой символ ('') указывает, что это не столбец идентификации. В ином случае a = значение генерируется всегда, d = значение генерируется по умолчанию.
attgenerated charПустой символ ('') указывает, что это не генерируемый столбец. В ином случае s = генерируемое значение хранится. (В будущем могут быть добавлены и другие значения.)
attisdropped boolЭтот столбец был удален и стал нерабочим. Удаленный столбец все еще физически присутствует в таблице, но игнорируется синтаксическим анализатором, и поэтому к нему нельзя обратиться через SQL.
attislocal boolЭтот столбец определяется локально в отношении. Обратите внимание, что столбец может одновременно быть локально определен и унаследован.
attinhcount int2Число прямых предков этого столбца. Столбец с ненулевым числом предков нельзя удалить или переименовать.
attstattarget int2Столбец attstattarget управляет уровнем детализации статистики, собираемой для данного столбца при помощи команды ANALYZE. Нулевое значение указывает на то, что статистика не должна собираться. Отрицательное значение указывает использовать системный целевой показатель статистики по умолчанию. Точное значение положительных значений зависит от типа данных. Для скалярных типов данных значение attstattarget является как целевым числом собираемых «наиболее распространенных значений», так и целевым числом создаваемых интервалов гистограммы.
attcollation oid
(ссылается на pg_collation.oid)
Определенные для столбца правила сортировки или ноль, если столбец имеет несортируемый тип данных.
attacl aclitem[]Права доступа на уровне столбца, если они были предоставлены специально для этого столбца
attoptions text[]Параметры уровня атрибута в виде строк «ключ=значение»
attfdwoptions text[]Параметры уровня атрибута для обертки сторонних данных в виде строк «ключ=значение»
attmissingval anyarrayЭтот столбец включает массив из одного элемента, содержащий значение, используемое, когда столбец полностью отсутствует в строке (это происходит, когда столбец добавляется с неизменяющимся значением DEFAULT после создания строки). Это значение используется, только если поле atthasmissing содержит true. Если значение отсутствует, данный столбец содержит NULL.

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



pg_authid

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

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

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

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

Таблица 8. Столбцы pg_authid

Столбец ТипОписание
oid oidИдентификатор строки
rolname nameИмя роли
rolsuper boolРоль обладает правами суперпользователя
rolinherit boolРоль автоматически наследует права ролей, членом которых является
rolcreaterole boolРоль может создавать другие роли
rolcreatedb boolРоль может создавать базы данных
rolcanlogin boolРоль может начинать сеанс. То есть эту роль можно задать в качестве начального идентификатора авторизации сеанса
rolreplication boolРоль является ролью репликации. Роль репликации может инициировать подключения репликации и создавать и удалять слоты репликации.
rolbypassrls boolРоль обходит политику защиты на уровне строк; подробную информацию см. в разделе Политики защиты строк.
rolconnlimit int4Для ролей, которые могут начинать сеанс, этот столбец устанавливает максимальное число одновременных подключений, которые может создать эта роль. -1 означает отсутствие ограничений.
rolpassword textЗашифрованный пароль; NULL, если его нет. Формат зависит от используемой формы шифрования.
rolvaliduntil timestamptzСрок действия пароля (используется только для аутентификации по паролю); 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 на кластер, а не отдельная для каждой базы данных.

Таблица 9. Столбцы pg_auth_members

Столбец ТипОписание
oid oidИдентификатор строки
roleid oid
(ссылается на pg_authid.oid)
Идентификатор роли, имеющей члена
member oid
(ссылается на pg_authid.oid)
Идентификатор роли, являющейся членом роли из roleid
grantor oid
(ссылается на pg_authid.oid)
Идентификатор роли, предоставившей это членство
admin_option boolTrue, если member может предоставлять членство в roleid другим ролям
inherit_option boolTrue, если член автоматически наследует права роли, предоставившей членство
set_option boolTrue, если член может выполнять SET ROLE для роли, предоставившей членство


pg_cast

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

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

Таблица 10. Столбцы pg_cast

Столбец ТипОписание
oid oidИдентификатор строки
castsource oid
(ссылается на pg_type.oid)
OID исходного типа данных
casttarget oid
(ссылается на pg_type.oid)
OID целевого типа данных
castfunc oid
(ссылается на pg_proc.oid)
OID функции, используемой для выполнения этого приведения. Ноль, если для данного метода приведения функция не требуется.
castcontext charУказывает, в каких контекстах можно вызвать приведение. e означает только явное приведение с использованием синтаксиса CAST или ::. а означает неявное присваивание целевому столбцу, а также явное приведение. i означает неявное приведение в выражениях, а также все остальные случаи.
castmethod charУказывает, как выполняется приведение. f означает, что используется функция, указанная в поле castfunc. i означает, что используются функции ввода/вывода. b означает, что типы являются двоично-совместимыми, поэтому преобразование не требуется.

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

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

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



pg_class

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

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

Столбец ТипОписание
oid oidИдентификатор строки
relname nameИмя таблицы, индекса, представления и т. д.
relnamespace oid
(ссылается на pg_namespace.oid)
OID пространства имен, содержащего это отношение
reltype oid
(ссылается на pg_type.oid)
OID типа данных, который соответствует типу строки этой таблицы, если таковой имеется; ноль для индексов, у которых нет записи в каталоге pg_type
reloftype oid
(ссылается на pg_type.oid)
OID нижележащего составного типа для типизированных таблиц; ноль для всех остальных отношений
relowner oid
(ссылается на pg_authid.oid)
Владелец отношения
relam oid
(ссылается на pg_am.oid)
Если это таблица или индекс, то используемый метод доступа (куча, B-дерево, хеш и т. д.); иначе ноль (ноль проставляется для последовательностей, а также для нехранимых отношений, например представлений)
relfilenode oidИмя файла на диске для этого отношения; ноль означает, что это «сопоставленное» отношение, для которого имя файла на диске определяется состоянием на нижнем уровне
reltablespace oid
(ссылается на pg_tablespace.oid)
Табличное пространство, в котором хранится это отношение. При нулевом значении подразумевается табличное пространство базы данных по умолчанию. (Не имеет смысла, если отношение не имеет файла на диске.)
relpages int4Размер представления этой таблицы на диске в страницах (в размере BLCKSZ). Это только расчетная оценка, используемая планировщиком. Она обновляется с помощью команд VACUUM, ANALYZE и нескольких команд DDL, таких как CREATE INDEX.
reltuples float4Количество активных строк в таблице. Это только расчетная оценка, используемая планировщиком. Она обновляется с помощью команд VACUUM, ANALYZE и нескольких команд DDL, таких как CREATE INDEX. Если таблица никогда не подвергалась очистке или анализу, поле reltuples содержит -1, показывая, что количество строк неизвестно.
relallvisible int4Количество страниц, отмеченных как полностью видимые на карте видимости таблицы. Это только расчетная оценка, используемая планировщиком. Она обновляется с помощью команд VACUUM, ANALYZE и нескольких команд DDL, таких как CREATE INDEX.
reltoastrelid oid
(ссылается на pg_class.oid)
OID таблицы TOAST, связанной с этой таблицей; ноль, если такой таблицы нет. Таблица TOAST хранит большие атрибуты «вынесенными» во вторичную таблицу.
relhasindex boolTrue, если это таблица и она имеет (или недавно имела) какие-либо индексы
relisshared boolTrue, если эта таблица совместно используется всеми базами данных в кластере. Совместно используются только определенные системные каталоги (например, pg_database).
relpersistence charp = постоянная таблица/последовательность, u = нежурналируемая таблица/последовательность, t = временная таблица/последовательность
relkind charr = Обычная таблица, i = индекс, s = последовательность, t = таблица TOAST, v = представление, m = материализованное представление, c = составной тип, f = сторонняя таблица, p = партиционированная таблица, I = партиционированный индекс
relnatts int2Количество пользовательских столбцов в отношении (системные столбцы не учитываются). В каталоге pg_attribute должно быть такое же количество соответствующих записей. См. также описание столбца pg_attribute.attnum.
relchecks int2Количество проверочных ограничений (CHECK) у таблицы; см. каталог pg_constraint
relhasrules boolTrue, если таблица имеет (или когда-то имела) правила; см. каталог pg_rewrite
relhastriggers boolTrue, если таблица имеет (или когда-то имела) триггеры; см. каталог pg_trigger
relhassubclass boolTrue, если таблица или индекс имеют (или когда-то имели) потомков в иерархии наследования либо партиции
relrowsecurity boolTrue, если в таблице включена защита на уровне строк; см. каталог pg_policy
relforcerowsecurity boolTrue, если защита уровня строк (если она включена) будет также применяться и к владельцу таблицы; см. каталог pg_policy
relispopulated boolTrue, если отношение заполнено (это справедливо для всех отношений, кроме некоторых материализованных представлений)
relreplident charСтолбцы, используемые для формирования «идентификатора реплики» для строк: d = по умолчанию (первичный ключ, если таковой имеется), n = ничего, f = все столбцы, i = индекс со свойством indisreplident (если ранее использовавшийся индекс был удален, действует так же, как n)
relispartition boolTrue, если таблица или индекс является партицией
relrewrite oid
(ссылается на pg_class.oid)
Для новых отношений, записываемых во время операции DDL, которая требует перезаписи таблицы, это поле содержит OID исходного отношения; в противном случае ноль. Это состояние видимо только внутри; данное поле всегда должно содержать 0 для видимого пользователю отношения.
relfrozenxid xidВ этой таблице все идентификаторы транзакций, предшествующие данному, были заменены на постоянный («замороженный») идентификатор транзакции. Это используется для отслеживания того, нужно ли очистить таблицу для предотвращения зацикливания идентификаторов транзакций или уменьшения размера pg_xact. Ноль (InvalidTransactionId), если данное отношение не является таблицей.
relminmxid xidВ этой таблице все идентификаторы мультитранзакций, предшествующие данному, были заменены на постоянный («замороженный») идентификатор транзакции. Это используется для отслеживания того, нужно ли очистить таблицу для предотвращения зацикливания идентификаторов мультитранзакций или уменьшения размера pg_multixact. Ноль (InvalidMultiXactId), если данное отношение не является таблицей.
relacl aclitem[]Права доступа; подробную информацию см. в разделе Права
reloptions text[]Параметры, специфичные для методов доступа, в виде строк «ключ=значение»
relpartbound pg_node_treeЕсли таблица является партицией (см. relispartition), внутреннее представление границ партиции

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



pg_collation

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

Таблица 12. Столбцы pg_collation

Столбец ТипОписание
oid oidИдентификатор строки
collname nameИмя правила сортировки (уникальное для каждого пространства имен и кодировки)
collnamespace oid
(ссылается на pg_namespace.oid)
OID пространства имен, содержащего это правило сортировки
collowner oid
(ссылается на pg_authid.oid)
Владелец правила сортировки
collprovider charПоставщик правила сортировки: d = установленный в базе данных по умолчанию, c = libc, i = icu
collisdeterministic boolЯвляется ли правило сортировки детерминированным?
collencoding int4Кодировка, в которой применимо правило сортировки, или -1, если оно работает для любой кодировки
collcollate textLC_COLLATE для этого объекта правила сортировки
collctype textLC_CTYPE для этого объекта правила сортировки
colliculocale textИдентификатор локали ICU для этого объекта правила сортировки
collicurules textПравила сортировки ICU для этого объекта правила сортировки
collversion textВерсия правила сортировки, специфическая для провайдера. Записывается при создании правила сортировки, а затем проверяется при его использовании для обнаружения изменений в его определении, которые могут привести к повреждению данных.

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

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



pg_constraint

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

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

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

Таблица 13. Столбцы pg_constraint

Столбец ТипОписание
oid oidИдентификатор строки
conname nameИмя ограничения (необязательно уникальное!)
connamespace oid
(ссылается на pg_namespace.oid)
OID пространства имен, содержащего это ограничение
contype charc = проверочное ограничение, f = ограничение внешнего ключа, p = ограничение первичного ключа, u = ограничение уникальности, t = триггер ограничения, x = исключающее ограничение
condeferrable boolЯвляется ли ограничение откладываемым?
condeferred boolЯвляется ли ограничение отложенным по умолчанию?
convalidated boolБыло ли это ограничение проверено? В настоящее время может иметь значение false только для внешних ключей и проверочных ограничений (CHECK)
conrelid oid
(ссылается на pg_class.oid)
Таблица, на которую наложено это ограничение; ноль, если это не ограничение таблицы
contypid oid
(ссылается на pg_type.oid)
Домен, на который наложено это ограничение; ноль, если это не ограничение домена
conindid oid
(ссылается на pg_class.oid)
Индекс, поддерживающий это ограничение, если это ограничение уникальности, первичного ключа, внешнего ключа или исключающее ограничение; в остальных случаях ноль
conparentid oid
(ссылается на pg_constraint.oid)
Соответствующее ограничение в родительской партиционированной таблице, если это ограничение для партиции; в остальных случаях ноль
confrelid oid
(ссылается на pg_class.oid)
Если это внешний ключ, то его ссылочная таблица; в остальных случаях ноль
confupdtype charКод действия при обновлении внешнего ключа: a = нет действия, r = ограничить, c = каскадное действие, n = установить NULL, d = поведение по умолчанию
confdeltype charКод действия при удалении внешнего ключа: a = нет действия, r = ограничить, c = каскадное действие, n = установить NULL, d = поведение по умолчанию
confmatchtype charТип сопоставления для внешнего ключа: f = полное, p = частичное, s = простое
conislocal boolЭто ограничение определяется локально для данного отношения. Обратите внимание, что ограничение может одновременно быть локально определено и унаследовано.
coninhcount int2Количество предков прямого наследования от ограничения. Ограничение с ненулевым количеством предков нельзя удалить или переименовать.
connoinherit boolЭто ограничение определено локально для данного отношения и является ненаследуемым.
conkey int2[]
(ссылается на pg_attribute.attnum)
Для ограничения таблицы (включая внешние ключи, но не триггеры ограничений) — список столбцов с ограничением
confkey int2[]
(ссылается на pg_attribute.attnum)
Для внешнего ключа — список ссылочных столбцов
conpfeqop oid
(ссылается на pg_operator.oid)
Для внешнего ключа — список операторов равенства для сравнений PK (первичный ключ) = FK (внешний ключ)
conppeqop oid
(ссылается на pg_operator.oid)
Для внешнего ключа — список операторов равенства для сравнений PK = PK
conffeqop oid[]
(ссылается на pg_operator.oid)
Для внешнего ключа — список операторов равенства для сравнений FK = FK
confdelsetcols int2[]
(ссылается на pg_attribute.attnum)
Для внешнего ключа с указанием действия SET NULL или SET DEFAULT при удалении — столбцы, которые будут изменены. При значении NULL будут изменены все столбцы, на которые ссылается ключ.
conexclop oid[]
(ссылается на pg_operator.oid)
Для исключающего ограничения — список операторов исключения по столбцам
conbin pg_node_treeДля проверочного ограничения — внутреннее представление выражения. (Чтобы извлечь определение проверочного ограничения, рекомендуется использовать функцию pg_get_constraintdef().)

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

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



pg_conversion

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

Таблица 14. Столбцы pg_conversion

Столбец ТипОписание
oid oidИдентификатор строки
conname nameИмя преобразования (уникальное в пределах пространства имен)
connamespace oid
(ссылается на pg_namespace.oid)
OID пространства имен, содержащего это преобразование
conowner oid
(ссылается на pg_authid.oid)
Владелец преобразования
conforencoding int4Идентификатор исходной кодировки (функция pg_encoding_to_char() может преобразовать этот номер в имя кодировки)
contoencoding int4Идентификатор целевой кодировки (функция pg_encoding_to_char() может преобразовать этот номер в имя кодировки)
conproc regproc
(ссылается на pg_proc.oid)
Функция преобразования
condefault boolTrue, если это преобразование по умолчанию


pg_database

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

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

Таблица 15. Столбцы pg_database

Столбец ТипОписание
oid oidИдентификатор строки
datname nameИмя базы данных
datdba oid
(ссылается на pg_authid.oid)
Владелец базы данных (как правило, пользователь, который ее создал)
encoding int4Кодировка символов для этой базы данных (функция pg_encoding_to_char() может преобразовать этот номер в имя кодировки)
datlocprovider charПровайдер локали для этой базы данных: c = libc, i = icu
datistemplate boolЕсли true, то эту базу данных может клонировать любой пользователь, обладающий правом CREATEDB; если false, то клонировать ее могут только суперпользователи или владелец этой базы данных.
datallowconn boolЕсли false, то никто не может подключиться к этой базе данных. Используется для защиты базы-шаблона template0 от изменений.
datconnlimit int4Устанавливает максимальное число одновременных подключений, которые могут быть выполнены к этой базе данных. -1 означает отсутствие ограничений.
datfrozenxid xidВ этой базе данных все идентификаторы транзакций, предшествующие данному, были заменены на постоянный («замороженный») идентификатор транзакции. Это используется для отслеживания того, нужно ли очистить таблицу для предотвращения зацикливания идентификаторов транзакций или уменьшения размера pg_xact. Это минимальные значения поля pg_class.relfrozenxid для всех таблиц.
datminmxid xidВ этой базе данных все идентификаторы мультитранзакций, предшествующие данному, были заменены на другой идентификатор транзакции. Это используется для отслеживания того, нужно ли очистить таблицу для предотвращения зацикливания идентификаторов мультитранзакций или уменьшения размера pg_multixact. Это минимальные значения поля pg_class.relminmxid для всех таблиц.
dattablespace oid
(ссылается на pg_tablespace.oid)
Табличное пространство по умолчанию для этой базы данных. В пределах этой базы данных все таблицы, у которых поле pg_class.reltablespace равно нулю, будут храниться в этом табличном пространстве (в частности, там будут находиться все системные каталоги, кроме разделяемых).
datcollate textLC_COLLATE для этой базы данных
datctype textLC_CTYPE для этой базы данных
daticulocale textИдентификатор локали ICU для этой базы данных
daticurules textПравила сортировки ICU для этой базы данных
datcollversion textВерсия правила сортировки, специфическая для провайдера. Записывается при создании правила сортировки, а затем проверяется при его использовании для обнаружения изменений в его определении, которые могут привести к повреждению данных.
datacl aclitem[]Права доступа; подробную информацию см. в разделе Права


pg_db_role_setting

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

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

Таблица 16. Столбцы pg_db_role_setting

Столбец ТипОписание
setdatabase oid
(ссылается на pg_database.oid)
OID базы данных, к которой применяется эта настройка переменных, или ноль, если она не специфична для конкретной базы данных
setrole oid
(ссылается на pg_authid.oid)
OID роли, к которой применяется эта настройка переменных, или ноль, если она не специфична для конкретной роли
setconfig text[]Значения по умолчанию для переменных конфигурации времени выполнения


pg_default_acl

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

Таблица 17. Столбцы pg_default_acl

Столбец ТипОписание
oid oidИдентификатор строки
defaclrole oid
(ссылается на pg_authid.oid)
OID роли, связанной с этой записью
defaclnamespace oid
(ссылается на pg_namespace.oid)
OID пространства имен, связанного с этой записью, или ноль, если такового нет
defaclobjtype charТип объекта, для которого эта запись предназначена: r = отношение (таблица, представление), S = последовательность, f = функция, T = тип, n = схема
defaclacl aclitem[]Права доступа, которые этот тип объекта должен иметь при создании

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

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



pg_depend

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

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

Таблица 18. Столбцы pg_depend

Столбец ТипОписание
classid oid
(ссылается на pg_class.oid)
OID системного каталога, в котором находится зависимый объект
objid oid
(ссылается на какой-либо столбец OID)
OID конкретного зависимого объекта
objsubid int4Для столбца таблицы это номер столбца (поля objid и classid ссылаются на саму таблицу). Для всех остальных типов объектов этот столбец содержит ноль.
refclassid oid
(ссылается на pg_class.oid)
OID системного каталога, в котором находится ссылочный объект
refobjid oid
(ссылается на какой-либо столбец OID)
OID конкретного ссылочного объекта
refobjsubid int4Для столбца таблицы это номер столбца (поля refobjid и refclassid ссылаются на саму таблицу). Для всех остальных типов объектов этот столбец содержит ноль.
deptype charКод, определяющий конкретную семантику этого отношения зависимости; см. текст ниже

Во всех случаях запись в 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.

В будущем могут понадобиться другие разновидности зависимости.

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

Большинство объектов, созданных во время qhb_bootstrap (или initdb), считаются «закрепленными», что означает, что сама система зависит от них. Поэтому их ни в коем случае нельзя удалять. Кроме того, зная, что закрепленные объекты не будут удалены, механизм зависимостей не утруждается созданием в pg_depend записей, показывающих зависимости от этих объектов. Таким образом, например, столб таблицы типа numeric номинально имеет зависимость NORMAL от типа данных numeric, но фактически такая запись в pg_depend не появляется.



pg_description

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

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

Таблица 19. Столбцы pg_description

Столбец ТипОписание
objid oid
(ссылается на какой-либо столбец OID)
OID объекта, к которому относится данное описание
classoid oid
(ссылается на pg_class.oid)
OID системного каталога, в котором находится этот объект
objsubid int4Для комментария к столбцу таблицы это номер столбца (поля objoid и classoid ссылаются на саму таблицу). Для всех остальных типов объектов этот столбец содержит ноль.
description textПроизвольный текст, который служит описанием данного объекта


pg_enum

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

Таблица 20. Столбцы pg_enum

Столбец ТипОписание
oid oidИдентификатор строки
enumtypid oid
(ссылается на pg_type.oid)
OID записи в каталоге pg_type, содержащей это перечислимое значение
enumsortorder float4Позиция этого перечислимого значения по порядку сортировки внутри его перечислимого типа
enumlabel nameТекстовая метка для этого перечислимого значения

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

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



pg_event_trigger

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

Таблица 21. Столбцы pg_event_trigger

Столбец ТипОписание
oid oidИдентификатор строки
evtname nameИмя триггера (должно быть уникальным)
evtevent nameХарактеризует событие, для которого срабатывает этот триггер
evtowner oid
(ссылается на pg_authid.oid)
Владелец триггера события
evtfoid oid
(ссылается на pg_proc.oid)
Вызываемая функция
evtenabled charЗадает режимы session_replication_role, в которых срабатывает триггер события. О = триггер срабатывает в режимах «origin» (источник) и «local» (локально), D = триггер выключен, R = триггер срабатывает в режиме «replica» (реплика), A = триггер срабатывает всегда.
evttags text[]Теги команд, для которых этот триггер будет срабатывать. Если NULL, то срабатывание этого триггера не ограничено на основании тега команды.


pg_extension

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

Таблица 22. Столбцы pg_extension

Столбец ТипОписание
oid oidИдентификатор строки
extname nameИмя расширения
extowner oid
(ссылается на pg_authid.oid)
Владелец расширения
extnamespace oid
(ссылается на pg_namespace.oid)
Схема, содержащая экспортируемые объекты расширения
extrelocatable boolTrue, если расширение можно переместить в другую схему
extversion textИмя версии расширения
extconfig oid[]
(ссылается на pg_class.oid)
Массив с OID regclass для таблиц(ы) конфигурации расширения или NULL, если у расширения нет таких таблиц
extcondition text[]Массив с условиями фильтра предложения WHERE для таблиц(ы) конфигурации расширения или NULL, если условий нет

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



pg_foreign_data_wrapper

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

Таблица 23. Столбцы pg_foreign_data_wrapper

Столбец ТипОписание
oid oidИдентификатор строки
fdwname nameИмя обертки сторонних данных
fdwowner oid
(ссылается на pg_authid.oid)
Владелец обертки сторонних данных
fdwhandler oid
(ссылается на pg_proc.oid)
Ссылается на функцию обработки, которая отвечает за предоставление исполняемых подпрограмм для этой обертки сторонних данных. Ноль, если обработчик отсутствует
fdwvalidator oid
(ссылается на pg_proc.oid)
Ссылается на функцию-валидатор, которая отвечает за проверку допустимости параметров, заданных обертке сторонних данных, а также параметров для сторонних серверов и сопоставлений пользователей, использующих эту обертку. Ноль, если валидатор отсутствует
fdwacl aclitem[]Права доступа; подробную информацию см. в разделе Права
fdwoptions text[]Параметры, специфичные для обертки сторонних данных, в виде строк «ключ=значение»


pg_foreign_server

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

Таблица 24. Столбцы pg_foreign_server

Столбец ТипОписание
oid oidИдентификатор строки
srvname nameИмя стороннего сервера
srvowner oid
(ссылается на pg_authid.oid)
Владелец стороннего сервера
srvfdw oid
(ссылается на pg_foreign_data_wrapper.oid)
OID обертки сторонних данных этого стороннего сервера
srvtype textТип сервера (необязательно)
srvversion textВерсия сервера (необязательно)
srvacl aclitem[]Права доступа; подробную информацию см. в разделе Права
srvoptions text[]Параметры, специфичные для стороннего сервера, в виде строк «ключ=значение»


pg_foreign_table

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

Таблица 25. Столбцы pg_foreign_table

Столбец ТипОписание
ftrelid oid
(ссылается на pg_class.oid)
OID записи в каталоге pg_class для этой сторонней таблицы
ftserver oid
(ссылается на pg_foreign_server.oid)
OID стороннего сервера для этой сторонней таблицы
ftoptions text[]Параметры сторонней таблицы в виде строк «ключ=значение»


pg_index

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

Таблица 26. Столбцы pg_index

Столбец ТипОписание
indexrelid oid
(ссылается на pg_class.oid)
OID записи в каталоге pg_class для этого индекса
indrelid oid
(ссылается на pg_class.oid)
OID записи в каталоге pg_class для таблицы, к которой относится этот индекс
indnatts int2Общее количество столбцов в индексе (повторяет поле pg_class.relnatts); это число включает в себя как ключевые, так и включенные атрибуты
indnkeyatts int2Количество ключевых столбцов в индексе, не считая каких-либо включенных столбцов, которые просто хранятся и не участвуют в семантике индекса
indisunique boolЕсли true, то это уникальный индекс
indnullsnotdistinct boolЭто значение используется только для уникальных индексов. Если false, то этот уникальный индекс будет считать значения NULL различными (поэтому индекс сможет содержать в столбце несколько значений NULL; это поведение QHB по умолчанию). Если true, то уникальный индекс будет считать значения NULL одинаковыми (поэтому индекс сможет содержать в столбце только одно значение NULL).
indisprimary boolЕсли true, то этот индекс представляет первичный ключ таблицы (в этом случае поле indisunique всегда должно иметь значение true)
indisexclusion boolЕсли true, то этот индекс поддерживает исключающее ограничение
indimmediate boolЕсли true, то проверка уникальности применяется сразу после вставки (неприменимо, если поле indisunique имеет значение false)
indisclustered boolЕсли true, то последний раз данная таблица кластеризовалась по этому индексу
indisvalid boolЕсли true, то индекс в настоящее время является допустимым для запросов. False означает, что индекс может быть неполным: он по-прежнему должен изменяться с помощью операций INSERT/UPDATE, но безопасно использовать его для запросов нельзя. Если индекс уникальный, свойство уникальности также не гарантируется.
indcheckxmin boolЕсли true, запросы не должны использовать индекс до тех пор, пока поле xmin этой строки pg_index находится ниже их горизонта событий TransactionXmin, поскольку таблица может содержать разорванные цепочки HOT с видимыми для этих запросов несовместимыми строками
indisready boolЕсли true, то индекс в настоящее время готов к вставкам. False означает, что индекс должен игнорироваться операциями INSERT/UPDATE.
indislive boolЕсли false, индекс находится в процессе удаления и должен игнорироваться при любой попытке использования (включая решения о безопасности HOT)
indisreplident boolЕсли true, то этот индекс был выбран в качестве «идентификатора реплики» с помощью команды ALTER TABLE ... REPLICA IDENTITY USING INDEX ...
indkey int2vector
(ссылается на pg_attribute.attnum)
Это массив из значений indnatts, указывающий на столбцы таблицы, которые этот индекс обрабатывает. Например, значение 1 3 будет означать, что первый и третий столбцы таблицы составляют записи индекса. Ключевые столбцы предшествуют неключевым (включенным) столбцам. Ноль в этом массиве указывает, что соответствующий атрибут индекса является выражением по столбцам таблицы, а не просто ссылкой на столбец.
indcollation oidvector
(ссылается на pg_collation.oid)
Для каждого столбца в ключе индекса (значения indnkeyatts) это поле содержит OID правила сортировки, используемого для индекса, или ноль, если столбец имеет несортируемый тип данных.
indclass oidvector
(ссылается на pg_opclass.oid)
Для каждого столбца в ключе индекса (значения indnkeyatts) это поле содержит OID используемого класса операторов. Дополнительную информацию см. в описании каталога pg_opclass.
indoption int2vectorЭто массив из значений indnkeyatts, хранящих биты флагов для каждого столбца. Значение этих битов определяется индексным методом доступа.
indexprs pg_node_treeДеревья выражений (в представлении nodeToString()) для атрибутов индекса, которые не являются простыми ссылками на столбец. Это список с одним элементом для каждой нулевой записи в поле indkey. NULL, если все атрибуты индекса являются простыми ссылками.
indpred pg_node_treeДерево выражений (в представлении nodeToString()) для предиката частичного индекса. NULL, если это не частичный индекс.


pg_inherits

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

Таблица 27. Столбцы pg_inherits

Столбец ТипОписание
inhrelid oid
(ссылается на pg_class.oid)
OID дочерней таблицы или индекса
inparent oid
(ссылается на pg_class.oid)
OID родительской таблицы или индекса
inhseqno int4Если у дочерней таблицы существует более одного прямого родителя (множественное наследование), это число указывает порядок, в котором должны располагаться наследуемые столбцы. Отсчет начинается с 1.
У индексов не может быть множественного наследования, так как они могут наследоваться только при декларативном партиционировании.
inhdetachpending booltrue для партиции, находящейся в процессе отсоединения; иначе — false


pg_init_privs

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

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

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

Таблица 28. Столбцы pg_init_privs

Столбец ТипОписание
objoid oid
(ссылается на какой-либо столбец OID)
OID конкретного объекта
classoid oid
(ссылается на pg_class.oid)
OID системного каталога, в котором находится этот объект
objsubid int4Для столбца таблицы это номер столбца (поля objoid и classoid ссылаются на саму таблицу). Для всех остальных типов объектов этот столбец содержит ноль.
privtype charКод, определяющий тип начального права этого объекта; см. текст выше
initprivs aclitem[]Начальные права доступа; подробную информацию см. в разделе Права


pg_language

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

Таблица 29. Столбцы pg_language

Столбец ТипОписание
oid oidИдентификатор строки
lanname nameИмя языка
lanowner oid
(ссылается на pg_authid.oid)
Владелец языка
lanispl boolДля внутренних языков (таких как SQL) имеет значение false, для пользовательских — true. В настоящее время qhb_dump все еще использует это, чтобы определить, какие языки нужно выгружать в дамп, но в будущем этот механизм может быть заменен на другой.
lanplusted boolTrue, если это доверенный язык (это означает, что он предположительно не предоставляет доступ к чему-либо за пределами обычной среды выполнения SQL). Только суперпользователи могут создавать функции на недоверенных языках.
lanplcallfoid oid
(ссылается на pg_proc.oid)
Для не внутренних языков это ссылка на обработчик языка, то есть специальную функцию, отвечающую за выполнение всех функций, написанных конкретно на этом языке. Ноль для внутренних языков.
laninline oid
(ссылается на pg_proc.oid)
Ссылка на функцию, отвечающую за выполнение «подставляемых» анонимных блоков кода (блоков DO). Ноль, если подставляемые блоки не поддерживаются.
lanvalidator oid
(ссылается на pg_proc.oid)
Ссылка на функцию-валидатор языка, отвечающую за проверку синтаксиса и допустимости новых функций при их создании. Ноль, если валидатор отсутствует.
lanacl aclitem[]Права доступа; подробную информацию см. в разделе Права


pg_largeobject

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

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

Таблица 30. Столбцы pg_largeobject

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

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



pg_largeobject_metadata

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

Таблица 31. Столбцы pg_largeobject_metadata

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


pg_namespace

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

Таблица 32. Столбцы pg_namespace

Столбец ТипОписание
oid oidИдентификатор строки
nspname nameИмя пространства имен
nspowner oid
(ссылается на pg_authid.oid)
Владелец пространства имен
nspacl aclitem[]Права доступа; подробную информацию см. в разделе Права


pg_opclass

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

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

Таблица 33. Столбцы pg_opclass

Столбец ТипОписание
oid oidИдентификатор строки
opcmethod oid
(ссылается на pg_am.oid)
Индексный метод доступа, для которого предназначен этот класс операторов
opcname nameИмя этого класса операторов
opcnamespace oid
(ссылается на pg_namespace.oid)
Пространство имен этого класса операторов
opcowner oid
(ссылается на pg_authid.oid)
Владелец класса операторов
opcfamily oid
(ссылается на pg_opfamily.oid)
Семейство операторов, содержащее этот класс операторов
opcintype oid
(ссылается на pg_type.oid)
Тип данных, который индексируется этим классом операторов
opcdefault boolTrue, если этот класс операторов используется по умолчанию для opcintype
opckeytype oid
(ссылается на pg_type.oid)
Тип данных, хранящихся в индексе, или ноль, если он совпадает с opcintype

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



pg_operator

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

Таблица 34. Столбцы pg_operator

Столбец ТипОписание
oid oidИдентификатор строки
oprname nameИмя оператора
oprnamespace oid
(ссылается на pg_namespace.oid)
OID пространства имен, содержащего этот оператор
oprowner oid
(ссылается на pg_authid.oid)
Владелец оператора
oprkind charb = инфиксный оператор («both») или l = префиксный оператор («left»)
oprcanmerge boolЭтот оператор поддерживает соединения слиянием
oprcanhash boolЭтот оператор поддерживает хеш-соединения
oprleft oid
(ссылается на pg_type.oid)
Тип левого операнда (ноль для префиксного оператора)
oprright oid
(ссылается на pg_type.oid)
Тип правого операнда
oprresult oid
(ссылается на pg_type.oid)
Тип результата (ноль для еще не определенного «пустого» оператора)
oprcom oid
(ссылается на pg_operator.oid)
Коммутатор этого оператора (ноль, если такового нет)
oprnegate oid
(ссылается на pg_operator.oid)
Инвертор этого оператора (ноль, если такового нет)
oprcode regproc
(ссылается на pg_proc.oid)
Функция, реализующая этот оператор (ноль для еще не определенного «пустого» оператора)
oprrest regproc
(ссылается на pg_proc.oid)
Функция оценки избирательности ограничения для этого оператора (ноль, если таковой нет)
oprjoin regproc
(ссылается на pg_proc.oid)
Функция оценки избирательности соединения для этого оператора (ноль, если таковой нет))


pg_opfamily

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

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

Таблица 35. Столбцы pg_opfamily

Столбец ТипОписание
oid oidИдентификатор строки
opfmethod oid
(ссылается на pg_am.oid)
Индексный метод доступа, для которого предназначено это семейство операторов
opfname nameИмя этого семейства операторов
opfnamespace oid
(ссылается на pg_namespace.oid)
Пространство имен этого семейства операторов
opfowner oid
(ссылается на pg_authid.oid)
Владелец семейства операторов

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



pg_parameter_acl

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

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

Таблица 36. Столбцы pg_parameter_acl

Столбец ТипОписание
oid oidИдентификатор строки
parname nameИмя параметра конфигурации, для которого были предоставлены права
paracl aclitem[]Права доступа; подробную информацию см. в разделе Права


pg_partitioned_table

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

Таблица 37. Столбцы pg_partitioned_table

Столбец ТипОписание
partrelid oid
(ссылается на pg_class.oid)
OID записи в каталоге pg_class для этой партиционированной таблицы
partstrat charСтратегия партиционирования: h = по хешу, l = по списку, r = по диапазону
partnatts int2Количество столбцов в ключе партиционирования
partdefid oid
(ссылается на pg_class.oid)
OID записи в каталоге pg_class для партиции по умолчанию этой партиционированной таблицы или ноль, если эта партиционированная таблица не имеет партиции по умолчанию.
partattrs int2vector
(ссылается на pg_attribute.attnum)
Это массив из значений поля partnatts, обозначающих, какие столбцы таблицы являются частью ключа партиционирования. Например, значение 1 3 будет означать, что первый и третий столбцы таблицы составляют ключ партиционирования. Ноль в этом массиве означает, что соответствующий столбец ключа партиционирования является выражением, а не простой ссылкой на столбец.
partclass oidvector
(ссылается на pg_opclass.oid)
Для каждого столбца в ключе партиционирования это поле содержит OID используемых классов операторов. Подробную информацию см. в описании каталога pg_opclass.
partcollation oidvector
(ссылается на pg_collation.oid)
Для каждого столбца в ключе партиционирования это поле содержит OID правила сортировки, используемого для партиционирования, или ноль, если столбец не относится к сортируемому типу данных.
partexprs pg_node_treeДеревья выражений (в представлении nodeToString()) для столбцов ключа партиционирования, которые не являются простыми ссылками на столбцы. Это список с одним элементом для каждой нулевой записи в поле partattrs. NULL, если все столбцы ключа партиционирования являются простыми ссылками.


pg_policy

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

Таблица 38. Столбцы pg_policy

Столбец ТипОписание
oid oidИдентификатор строки
polname nameИмя политики
polrelid oid
(ссылается на pg_class.oid)
Таблица, к которой применяется политика
polcmd charТип команды, к которой применяется политика: r для SELECT, a для INSERT, w для UPDATE, d для DELETE или * для всех
polpermissive boolЯвляется ли эта политика разрешительной или ограничительной?
polroles oid[]
(ссылается на pg_authid.oid)
Роли, к которым применяется политика; ноль означает PUBLIC (которая обычно является единственным элементом массива)
polqual pg_node_treeДерево выражений, добавляемое к требованиям барьеров безопасности для запросов, использующих данную таблицу
polwithcheck pg_node_treeДерево выражений, добавляемое к требованиям WITH CHECK для запросов, пытающихся добавить строки в таблицу

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



pg_proc

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

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

Таблица 39. Столбцы pg_proc

Столбец ТипОписание
oid oidИдентификатор строки
proname nameИмя функции
pronamespace oid
(ссылается на pg_namespace.oid)
OID пространства имен, содержащего эту функцию
proowner oid
(ссылается на pg_authid.oid)
Владелец функции
prolang oid
(ссылается на pg_language.oid)
Язык реализации или интерфейс вызова этой функции
procost float4Предполагаемая стоимость исполнения (в единицах cpu_operator_cost); если установлен признак proretset, это стоимость одной возвращенной строки
prorows float4Предполагаемое количество возвращаемых строк (ноль, если не установлен признак proretset)
provariadic oid
(ссылается на pg_type.oid)
Тип данных элементов переменного массива параметров или ноль, если функция не принимает переменное количество параметров
prosupport regproc
(ссылается на pg_proc.oid)
Вспомогательная функция планировщика для этой функции (см. раздел Информация по оптимизации функций) или ноль, если таковой нет
prokind charf для обычной функции, p для процедуры, a для агрегатной функции или w для оконной функции
prosecdef boolФункция является определителем контекста безопасности (т. е. функцией «setuid»)
proleakproof boolФункция не имеет побочных эффектов. Никакая информация о ее аргументах не передается иначе, чем через возвращаемое значение. Любая функция, которая может вызвать ошибку, в зависимости от значений ее аргументов, не является герметичной.
proisstrict boolФункция возвращает NULL, если любой аргумент вызова имеет значение NULL. В этом случае функция по факту не будет вызвана вообще. Функции, которые не являются «строгими», должны быть подготовлены для обработки входных значений NULL.
proretset boolФункция возвращает множество (т. е. несколько значений указанного типа данных)
provolatile charПоле provolatile показывает, зависит ли результат функции только от ее входных аргументов, или на него влияют внешние факторы. Для «неизменяемых» функций, которые всегда дают один и тот же результат для одних и тех же входных данных, устанавливается значение i. Для «стабильных» функций, результаты которых (для фиксированных входных аргументов) не изменяются в пределах сканирования, устанавливается значение s. Для «изменчивых» функций, результаты которых могут измениться в любое время, устанавливается значение v. (Также v используется для функций с побочными эффектами, чтобы их вызовы нельзя было оптимизировать.)
proparallel charПоле proparallel показывает, можно ли безопасно запускать функцию в параллельном режиме. Для функций, которые безопасно запускать в параллельном режиме без ограничений, устанавливается значение s. Для функций, которые могут выполняться в параллельном режиме, но их выполнение ограничено ведущим процессом группы (параллельные рабочие процессы не могут вызывать эти функции), устанавливается значение r. Для функций, которые небезопасны в параллельном режиме (наличие такой функции заставляет оптимизатор строить план последовательного выполнения запроса), устанавливается значение u.
pronargs int2Количество входных аргументов
pronargdefaults int2Количество аргументов, имеющих значения по умолчанию
prorettype oid
(ссылается на pg_type.oid)
Тип данных возвращаемого значения
proargtypes oidvector
(ссылается на pg_type.oid)
Массив с типами данных аргументов функции. Включает только входные аргументы (в том числе аргументы INOUT и VARIADIC) и тем самым представляет сигнатуру вызова функции.
proallargtypes oid[]
(ссылается на pg_type.oid)
Массив с типами данных аргументов функции. Включает в себя все аргументы (в том числе аргументы OUT и INOUT), однако если все аргументы являются IN, это поле будет иметь значение NULL. Обратите внимание, что индексы массивов обычно начинаются с 1, тогда как по историческим причинам proargtypes индексируются, начиная с 0.
proargmodes char[]Массив с режимами аргументов функции, закодированными как i для аргументов IN, о для аргументов OUT, b для аргументов INOUT, v для аргументов VARIADIC, t для аргументов TABLE. Если все аргументы являются IN, это поле будет иметь значение NULL. Обратите внимание, что индексы массива соответствуют позициям в proallargtypes, а не в proargtypes.
proargnames text[]Массив с именами аргументов функции. Аргументы без имени устанавливаются в массиве как пустые строки. Если ни один из аргументов не имеет имени, это поле будет иметь значение NULL. Обратите внимание, что индексы массива соответствуют позициям в proallargtypes, а не в proargtypes.
proargdefaults pg_node_treeДеревья выражений (в представлении nodeToString()) для значений по умолчанию. Это список, содержащий pronargdefaults элементов, соответствующих последним N входным аргументам (т. е. последним N позициям в поле proargtypes). Если ни один из аргументов не имеет значения по умолчанию, это поле будет иметь значение NULL.
protrftypes oid[]
(ссылается на pg_type.oid)
Массив типов данных аргументов/результатов, к которым необходимо применить преобразования (из предложения TRANSFORM объявления функции). NULL, если таковых нет.
prosrc textЭто значение говорит обработчику функции, как ее вызвать. Это может быть фактический исходный код функции для интерпретируемых языков, символ ссылки, имя файла или что-нибудь еще, в зависимости от языка реализации/соглашения о вызовах.
probin textДополнительная информация о том, как вызвать эту функцию. Интерпретация этого значения тоже зависит от языка.
prosqlbody pg_node_treeПредварительно проанализированное тело функции SQL. Используется для функций на языке SQL, когда тело функции задается в виде стандартной нотации SQL, а не строкового литерала. В остальных случаях — NULL.
proconfig text[]Локальные настройки переменных конфигурации времени выполнения, действующие для функции
proacl aclitem[]Права доступа; подробную информацию см. в разделе Права

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



pg_publication

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

Таблица 40. Столбцы pg_publication

Столбец ТипОписание
oid oidИдентификатор строки
pubname nameИмя публикации
pubowner oid
(ссылается на pg_authid.oid)
Владелец публикации
puballtables boolЕсли true, эта публикация автоматически включает все таблицы в базе данных, в том числе те, что будут созданы в будущем.
pubinsert boolЕсли true, операции INSERT реплицируются для таблиц в публикации.
pubupdate boolЕсли true, операции UPDATE реплицируются для таблиц в публикации.
pubdelete boolЕсли true, операции DELETE реплицируются для таблиц в публикации.
pubtruncate boolЕсли true, операции TRUNCATE реплицируются для таблиц в публикации.
pubviaroot boolЕсли true, операции с листовой партицией реплицируются с использованием идентификатора и схемы включенной в данную публикацию партиционированной таблицы-родителя самого верхнего уровня, а не ее собственных.


pg_publication_namespace

В каталоге pg_publication_namespace содержатся сопоставления между схемами и публикациями в базе данных. Это сопоставления вида многие-ко-многим.

Таблица 41.Столбцы pg_publication_namespace

Столбец ТипОписание
oid oidИдентификатор строки
pnpubid oid
(ссылается на pg_publication.oid)
Ссылка на публикацию
pnnspid oid
(ссылается на pg_namespace.oid)
Ссылка на схему


pg_publication_rel

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

Таблица 42. Столбцы pg_publication_rel

Столбец ТипОписание
oid oidИдентификатор строки
prpubid oid
(ссылается на pg_publication.oid)
Ссылка на публикацию
prrelid oid
(ссылается на pg_class.oid)
Ссылка на отношение
prqual pg_node_treeДерево выражений (в представлении nodeToString()) для квалифицирующего условия публикации отношения. NULL, если у публикации нет такого условия.
prattrs int2vector
(ссылается на pg_attribute.attnum)
Это массив значений, показывающих, какие столбцы таблицы являются частью публикации. Например, значение 1 3 будет означать, что публикуются первый и третий столбцы таблицы. Значение NULL показывает, что публикуются все столбцы.


pg_range

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

Таблица 43. Столбцы pg_range

Столбец ТипОписание
rngtypid oid
(ссылается на pg_type.oid)
OID диапазонного типа
rngsubtype oid
(ссылается на pg_type.oid)
OID типа элемента (подтипа) этого диапазонного типа
rngmultitypid oid
(ссылается на pg_type.oid)
OID мультидиапазонного типа для этого диапазонного типа
rngcollation oid
(ссылается на pg_collation.oid)
OID правила сортировки, используемого для сравнения диапазонов, или ноль, если такового нет
rngsubopc oid
(ссылается на pg_opclass.oid)
OID класса операторов подтипа, используемого для сравнений диапазонов
rngcanonical regproc
(ссылается на pg_proc.oid)
OID функции, преобразующей значение диапазона в каноничную форму, или ноль, если таковой нет
rngsubdiff regproc
(ссылается на pg_proc.oid)
OID функции, возвращающей разницу между значениями двух элементов в виде значения double precision, или ноль, если таковой нет

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



pg_replication_origin

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

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

Таблица 44. Столбцы pg_replication_origin

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


pg_rewrite

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

Таблица 45. Столбцы pg_rewrite

Столбец ТипОписание
oid oidИдентификатор строки
rulename nameИмя правила
ev_class oid
(ссылается на pg_class.oid)
Таблица, для которой предназначено это правило
ev_type charТип события, для которого используется это правило: 1 = SELECT, 2 = UPDATE, 3 = INSERT, 4 = DELETE
ev_enabled charЗадает режимы session_replication_role, при которых срабатывает это правило. О = правило срабатывает в режимах «origin» (источник) и «local» (локально), D = правило выключено, R = правило срабатывает в режиме «replica» (реплика), A = правило срабатывает всегда.
is_instead boolTrue, если это правило INSTEAD
ev_qual pg_node_treeДерево выражений (в представлении nodeToString()) для условия применения правила
ev_action pg_node_treeДерево запросов (в форме представления nodeToString()) для действия правила

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



pg_seclabel

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

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

Таблица 46. Столбцы pg_seclabel

Столбец ТипОписание
objoid oid
(ссылается на какой-либо столбец OID)
OID объекта, к которому относится эта метка безопасности
classoid oid
(ссылается на pg_class.oid)
OID системного каталога, в котором находится этот объект
objsubid int4Для метки безопасности по столбцу таблицы это номер столбца (поля objoid и classoid ссылаются на саму таблицу). Для всех остальных типов объектов этот столбец содержит ноль.
provider textПоставщик меток безопасности, связанный с этой меткой.
label textМетка безопасности, применяемая к этому объекту.


pg_sequence

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

Таблица 47. Столбцы pg_sequence

Столбец ТипОписание
seqrelid oid
(ссылается на pg_class.oid)
OID записи в каталоге pg_class для этой последовательности
seqtypid oid
(ссылается на pg_type.oid)
Тип данных последовательности
seqstart int8Начальное значение последовательности
seqincrement int8Значение приращения последовательности
seqmax int8Максимальное значение последовательности
seqmin int8Минимальное значение последовательности
seqcache int8Размер кеша последовательности
seqcycle boolЗацикливается ли последовательность


pg_shdepend

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

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

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

Таблица 48. Столбцы pg_shdepend

Столбец ТипОписание
dbid oid
(ссылается на pg_database.oid)
OID базы данных, в которой находится зависимый объект, или ноль для разделяемого объекта
classid oid
(ссылается на pg_class.oid)
OID системного каталога, в котором находится зависимый объект
objid oid
(ссылается на какой-либо столбец OID)
OID конкретного зависимого объекта
objsubid int4Для столбца таблицы это номер столбца (поля objid и classid ссылаются на саму таблицу). Для всех остальных типов объектов этот столбец содержит ноль.
refclassid oid
(ссылается на pg_class.oid)
OID системного каталога, в котором находится ссылочный объект (это должен быть разделяемый каталог)
refobjid oid
(ссылается на какой-либо столбец OID)
OID конкретного ссылочного объекта
deptype charКод, определяющий конкретную семантику этого отношения зависимости; см. текст ниже

Во всех случаях запись в 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_TABLESPACE (t)
Ссылочный объект (который должен быть табличным пространством) является табличным пространством для отношения, у которого нет хранилища.

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

Как и в каталоге pg_depend, большинство объектов, созданных во время qhb_bootstrap (или initdb) считаются «закрепленными». В pg_shdepend не создаются никакие записи, в которых закрепленный объект мог бы быть ссылочным или зависимым.



pg_shdescription

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

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

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

Таблица 49. Столбцы pg_shdescription

Столбец ТипОписание
objoid oid
(ссылается на какой-либо столбец OID)
OID объекта, к которому относится это описание
classoid oid
(ссылается на pg_class.oid)
OID системного каталога, в котором находится этот объект
description textПроизвольный текст, который служит описанием этого объекта


pg_shseclabel

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

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

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

Таблица 50. Столбцы pg_shseclabel

Столбец ТипОписание
objoid oid
(ссылается на какой-либо столбец OID)
OID объекта, к которому относится эта метка безопасности
classoid oid
(ссылается на pg_class.oid)
OID системного каталога, в котором находится этот объект
provider textПоставщик меток безопасности, связанный с этой меткой
label textМетка безопасности, применяемая к этому объекту


pg_statistic

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

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

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

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

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

Таблица 51. Столбцы pg_statistic

Столбец ТипОписание
starelid oid
(ссылается на pg_class.oid)
Таблица или индекс, которому принадлежит описываемый столбец
staattnum int2
(ссылается на pg_attribute.attnum)
Номер описываемого столбца
stainherit boolЕсли true, то в статистику включаются значения из дочерних таблиц иерархии наследования, а не только значения в указанном отношении
stanullfrac float4Доля записей столбца, которые равны NULL
stawidth int4Средняя ширина хранимых записей, отличных от NULL, в байтах
stadistinct float4Количество уникальных значений данных, отличных от NULL, в столбце. Значение больше нуля — это фактическое количество уникальных значений. Значение меньше нуля — это множитель для количества строк в таблице, взятый с отрицательным знаком; например, столбец, в котором около 80% значений отличны от NULL и каждое такое значение появляется в среднем примерно два раза, может быть представлен как stadistinct = -0.4. Нулевое значение означает, что количество уникальных значений неизвестно.
stakind_N_ int2Кодовый номер, указывающий вид статистики, хранящейся в N-м «слоте» строки каталога pg_statistic.
staop_N_ oid
(ссылается на pg_operator.oid)
Оператор, используемый для получения статистики, хранящейся в N-м «слоте». Например, для слота гистограммы это будет оператор <, определяющий порядок сортировки данных. Ноль, если для этого вида статистики не требуется оператор.
stacoll_N_ oid
(ссылается на pg_collation.oid)
Правило сортировки, используемое для получения статистики, хранящейся в N-м «слоте». Например, для слота гистограммы для сортируемого столбца это будет правило сортировки, определяющее порядок сортировки данных. Ноль для несортируемых данных.
stanumbers_N_ float4[]Числовая статистика соответствующего вида для N-го «слота» или NULL, если этот вид слота не содержит числовых значений
stavalues_N_ anyarrayЗначения данных столбца соответствующего вида для N-го «слота» или NULL, если этот вид слота не хранит никаких значений данных. Значения каждого элемента массива фактически относятся к определенному типу данных столбца или связанному типу, например типу элемента массива, поэтому нет способа определить тип этих столбцов более конкретно, чем anyarray.

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

В столбце stadistinct указывается (примерное) количество различных значений данных не NULL в столбце. Цифры интерпретируются следующим образом: 0 — неизвестно или не вычислено, > 0 — фактическое количество различных значений, < 0 — множитель количества строк со знаком минус. Вариант с отрицательными числами позволят обращаться с уникальными (stadistinct = -1) или близкими к этому столбцами (например, столбец, в котором значения не NULL встречаются в среднем примерно в два раза чаще, чем в среднем, может быть представлен как stadistinct = -0.5, если значений NULL нет, или -0.4, если значений NULL в столбце 20%). Поскольку статистика по количеству строк в каталоге pg_class может обновляться чаще, чем обновляется каталог pg_statistic, важно иметь возможность описать подобную ситуацию как произведение количества строк, а не фиксированное число различных значений. Но в других случаях фиксированное число будет верным (например, для столбца с логическими значениями).

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

  • kind — целочисленный код, идентифицирующий вид данных (см. ниже)
  • op — OID связанного оператора (при необходимости)
  • coll — OID связанного правила сортировки или 0, если такового нет
  • numbers — массив типа float4 (для статистических значений)
  • valuesanyarray (для представлений значений данных) Поля идентификатора, оператора и правила сортировки никогда не равны NULL; в неиспользуемом слоте они равны нулю. Поля numbers и values равны NULL в неиспользуемом слоте и могут быть также равны NULL в используемом слоте, если вид слота в каком-либо из них (или в обоих) не нуждается.

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

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

Примечание
Представление pg_stats нужно изменять каждый раз, когда в ядро добавляется новый вид слота.

В настоящее время для кодов «видов» выделены следующие диапазоны:

  • 1-99 зарезервированы для назначения проектом ядра QHB (значения в этом диапазоне будут документироваться в этом разделе)
  • 100-199 зарезервированы для назначения проектом PostGIS (значения будут вноситься в документацию PostGIS)
  • 200-299 зарезервированы для назначения проектом ESRI ST_Geometry (значения будут вноситься в документацию ESRI ST_Geometry)
  • 300-9999 зарезервированы для будущих общедоступных назначений

Для личного использования можно выбрать любой код «вида» в диапазоне 10000-30000.

STATISTIC_KIND_MCV
В слоте «наиболее распространенные значения» (most common values, MCV), поле staop — это OID оператора =, используемого для того, чтобы определить, являются ли значения одинаковыми или нет, а поле stacoll — это используемое правило сортировки (совпадает с правилом сортировки столбца). Поле stavalues содержит K наиболее распространенных значений не NULL, находящихся в столбце, а поле stanumbers — их встречаемость (проценты от общего числа строк). Эти значения будут выстроены в порядке уменьшения встречаемости. Обратите внимание, что поскольку массивы являются типом переменного размера, K можно выбрать во время выполнения команды ANALYZE. Значения должны находиться в слоте MCV, только если у них было обнаружено более одного вхождения; у уникального столбца слота MCV не будет.

STATISTIC_KIND_HISTOGRAM
В слоте «гистограмма» описывается распределение скалярных данных. Поле staop — это OID оператора <, описывающего сортирующее упорядочивание, а поле stacoll — это связанное правило сортировки. (В теории здесь может находиться более одной гистограммы, если у типа данных имеется более одного полезного оператора сортировки или нас интересует более одного правила сортировки. В настоящее время это всегда будет правило сортировки нижележащего столбца.) Поле stavalues содержит M (>=2) значений не NULL, делящих отличные от NULL значения данных столбца на M-1 столбиков примерно одинаковой популяции. Первый элемент поля stavalues является минимальным значением (MIN), а последний — максимальным (MAX). Поле stanumbers не используется и должно равняться NULL. Важный момент: если предоставляется также слот MCV, то эта гистограмма описывает распределение данных после удаления значений, перечисленных в MCV (таким образом, говоря технически, это «сжатая гистограмма»). Это позволяет отобразить более точное представление распределения в столбце с некоторыми очень распространенными значениями. В столбце с небольшим количеством различных значений есть вероятность того, что список MCV описывает всю популяцию данных; в этом случае эта гистограмма становится пустой и должна быть опущена.

STATISTIC_KIND_CORRELATION
В слоте «корреляция» описывается корреляция между физическим порядком кортежей таблицы и упорядочиванием значений данных этого столбца, с точки зрения оператора <, определенного в поле staop, и с правилом сортировки, определенным в поле stacoll. (Как и в случае гистограммы, теоретически здесь может быть более одной записи.) Поле stavalues не используется и должно равняться NULL. В поле stanumbers содержится одна запись — коэффициент корреляции между последовательностью значений данных и последовательностью их фактических позиций в кортеже. Коэффициент колеблется в диапазоне от +1 до -1.

STATISTIC_KIND_MCELEM
Слот «наиболее распространенные элементы» похож на слот «наиболее распространенные значения» за исключением того, что в нем хранятся наиболее распространенные элементы значений столбца, отличные от NULL. Это полезно, когда типом данных столбца является массив или какой-либо другой тип с идентифицируемыми элементами (например, tsvector). В поле staop содержится оператор равенства, подходящий для типа элементов, а в поле stacoll — правило сортировки для работы с ним. В поле stavalues содержатся наиболее распространенные значения элементов, а в поле stanumbers — их встречаемость. В отличие от слотов MCV, встречаемость измеряется как доля строк не NULL, в которых фигурирует значение элемента, а не как встречаемость всех строк. Также в отличие от слотов MCV, значения сортируются в порядке по умолчанию для типа элементов (чтобы поддержать двоичный поиск для конкретного значения). Поскольку из-за этого минимальная и максимальная встречаемости в поле stanumbers оказываются в непредсказуемых точках, в поле stanumbers имеются два дополнительных члена, содержащих копии минимальной и максимальной встречаемостей. При необходимость может появиться третий дополнительный член, содержащий встречаемость элементов NULL (выраженный в тех же терминах: доля строк не NULL, содержащих как минимум один элемент NULL). Если этот член опущен, предполагается, что элементы NULL в столбце отсутствуют.

Примечание
При текущем применении столбцов tsvector элементы stavalues имеют тип text, даже несмотря на то, что их представление внутри tsvector не совсем текстовое.

STATISTIC_KIND_DECHIST
В слоте «гистограмма количества различных элементов» описывается распределение количества значений различных элементов, присутствующих в каждой строке столбца типа массива. Рассматриваются только строки и элементы, отличные от NULL. В поле staop содержится оператор равенства, подходящий для типа элемента, а в поле stacoll — правило сортировки для работы с ним. Поле stavalues не используется и должно равняться NULL. Последним членом поля stanumbers является среднее количество различных значений элементов по всем строкам не NULL. Предшествующие ему M (>=2) членов формируют гистограмму, делящую популяцию количеств различных элементов на M-1 столбиков примерно одинаковой популяции. Первый из них является минимальным наблюдаемым количеством, а последний — максимальным.

STATISTIC_KIND_RANGE_LENGTH_HISTOGRAM
В слоте «гистограммы длины» описывается распределение длин диапазонов в строках столбца диапазонного типа. В поле stanumbers содержится одна запись — доля пустых диапазонов. Поле stavalues — это гистограмма непустых длин в формате, схожем с STATISTIC_KIND_HISTOGRAM: в нем содержится M (>=2) значений диапазонов, делящих значения данных столбца на M-1 столбиков примерно одинаковой популяции. Длины хранятся в типе float8, измеренные функцией subdiff для диапазонного типа. Рассматриваются только непустые строки не NULL.

STATISTIC_KIND_BOUNDS_HISTOGRAM
Слот «гистограмма связей» похож на STATISTIC_KIND_HISTOGRAM, но только для столбца диапазонного типа. В слоте stavalues содержится M (>=2) значений диапазонов, делящих значения данных столбца на M-1 столбиков примерно одинаковой популяции. В отличие от обычной скалярной гистограммы, это на самом деле две гистограммы, объединенные в один массив, где нижние границы каждого значения формируют гистограмму нижних границ, а верхние границы — гистограмму верхних границ. Включаются только непустые диапазоны не NULL.



pg_statistic_ext

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

Таблица 52. Столбцы pg_statistic_ext

Столбец ТипОписание
oid oidИдентификатор строки
stxrelid oid
(ссылается на pg_class.oid)
Таблица, содержащая столбцы, описываемые этим объектом
stxname nameИмя объекта статистики
stxnamespace oid
(ссылается на pg_namespace.oid)
OID пространства имен, содержащего этот объект статистики
stxowner oid
(ссылается на pg_authid.oid)
Владелец объекта статистики
stxstattarget int4Поле stxstattarget определяет уровень детализации статистики, собранной для данного объекта статистики командой ANALYZE. Нулевое значение показывает, что статистику собирать не нужно. Отрицательное значение указывает использовать максимум из ориентиров статистики для целевых столбцов, если таковые установлены, или системный ориентир статистики по умолчанию. Положительные значения stxstattarget определяют ориентировочное количество «наиболее распространенных значений», которое нужно собрать.
stxkeys int2vector
(ссылается на pg_attribute.attnum)
Массив номеров атрибутов, показывающий, какие столбцы таблицы охвачены этим объектом статистики; например, значение 1 3 будет означать, что охвачены первый и третий столбцы таблицы
stxkind char[]Массив, содержащий коды для включенных типов статистики; допустимыми значениями являются: d для статистики по количеству уникальных значений, f для статистики функциональной зависимости, m для статистики списка наиболее распространенных значений и e для статистики выражений
stxexprs pg_node_treeДеревья выражений (в представлении nodeToString()) для атрибутов объекта статистики, которые не являются простыми ссылками на столбец. Это список с одним элементом для каждого выражения. NULL, если все атрибуты объекта статистики являются простыми ссылками.

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



pg_statistic_ext_data

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

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

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

Таблица 53. Столбцы pg_statistic_ext_data

Столбец ТипОписание
stxoid oid
(ссылается на pg_statistic_ext.oid)
Объект расширенной статистики, содержащий определение для этих данных
stxdinherit boolЕсли true, то в статистику включаются значения из дочерних таблиц иерархии наследования, а не только значения в указанном отношении
stxdndistinct pg_ndistinctКоличество уникальных значений, сериализованное в виде типа pg_ndistinct
stxddependencies pg_dependenciesСтатистика функциональных зависимостей, сериализованная в виде типа pg_dependencies
stxdmcv pg_mcv_listСтатистика списка MCV (most-common values, наиболее распространенных значений), сериализованная в виде типа pg_mcv_list
stxdexpr pg_statistic[]Статистика по каждому выражению, сериализованная в виде массива типа pg_statistic


pg_subscription

В каталоге pg_subscription содержатся все существующие подписки на логическую репликацию. Подробную информацию о логической репликации см. в главе Логическая репликация.

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

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

Таблица 54. Столбцы pg_subscription

Столбец ТипОписание
oid oidИдентификатор строки
subdbid oid
(ссылается на pg_database.oid)
OID базы данных, в которой находится подписка
subskiplsn pg_lsnLSN конца транзакции, изменения которой должны быть пропущены, если это правильный LSN; в противном случае 0/0.
subname nameИмя подписки
subowner oid
(ссылается на pg_authid.oid)
Владелец подписки
subenabled boolЕсли true, то подписка включена и должна реплицироваться.
subbinary boolЕсли true, то подписка будет запрашивать данные у публикатора в двоичном формате
substream charУправляет обращением с потоковой передачей выполняющихся транзакций: f = запретить потоковую передачу выполняющихся транзакций, t = вытеснить изменения выполняющихся транзакций на диск и применить сразу после того, как транзакция зафиксируется на публикаторе и будет получена подписчиком, p = применить изменения напрямую, используя параллельный рабочий процесс, если он доступен (то же, что и 't', если рабочий процесс недоступен)
subtwophasestate charКоды состояния для двухфазного режима: d = выключен, p = ожидается включение, e = включен
subdisableonerr boolЕсли true, подписка будет выключена, если один из ее рабочих процессов обнаружит ошибку
subpasswordrequired boolЕсли true, подписке потребуется указывать пароль для аутентификации
subrunasowner boolЕсли true, подписка будет выполняться с правами владельца этой подписки
subconninfo textСтрока подключения к вышестоящей базе данных
subslotname nameИмя слота репликации в вышестоящей базе данных (также используется в качестве локального имени источника репликации); NULL представляет NONE.
subsynccommit textЗначение параметра synchronous_commit для рабочих процессов подписки
subpublications text[]Массив имен публикаций, на которые оформлена подписка. Эти имена представляют публикации, определенные в вышестоящей базе данных. Подробнее публикации описаны в разделе Публикация.
suborigin textЗначение источника должно быть none или any. Значение по умолчанию — any. При значении none подписка будет запрашивать у публикатора передачу только тех изменений, которые не имеют источника. При значении any публикатор передает изменения независимо от их источника.


pg_subscription_rel

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

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

Таблица 55. Столбцы pg_subscription_rel

Столбец ТипОписание
srsubid oid
(ссылается на pg_subscription.oid)
Ссылка на подписку
srrelid oid
(ссылается на pg_class.oid)
Ссылка на отношение
srsubstate charКод состояния: i = инициализация, d = копирование данных, f = копирование таблицы завершено, s = синхронизация выполнена, r = готовность (нормальная репликация)
srsublsn pg_lsnLSN изменения состояния на удаленной стороне, используемый для координации синхронизации при состояниях s или r; в иных случаях NULL


pg_tablespace

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

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

Таблица 56. Столбцы pg_tablespace

Столбец ТипОписание
oid oidИдентификатор строки
spcname nameИмя табличного пространства
spcowner oid
(ссылается на pg_authid.oid)
Владелец табличного пространства (обычно это пользователь, который его создал)
spcacl aclitem[]Права доступа; подробную информацию см. в разделе Права
spcoptions text[]Параметры уровня табличного пространства в виде строк «ключ=значение»


pg_transform

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

Таблица 57. Столбцы pg_transform

Столбец ТипОписание
oid oidИдентификатор строки
trftype oid
(ссылается на pg_type.oid)
OID типа данных, для которого предназначено это преобразование
trflang oid
(ссылается на pg_language.oid)
OID языка, для которого предназначено это преобразование
trffromsql regproc
(ссылается на pg_proc.oid)
OID функции, используемой при преобразовании типа данных для передачи в процедурный язык (например, параметры функции). Содержит ноль, если должно применяться поведение по умолчанию.
trftosql regproc
(ссылается на pg_proc.oid)
OID функции, используемой при преобразовании значений, полученных из процедурного языка (например, возвращаемых значений), в тип данных. Содержит ноль, если должно применяться поведение по умолчанию.


pg_trigger

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

Таблица 58. Столбцы pg_trigger

Столбец ТипОписание
oid oidИдентификатор строки
tgrelid oid
(ссылается на pg_class.oid)
Таблица, на которую действует этот триггер
tgparentid oid
(ссылается на pg_trigger.oid)
Родительский триггер, из которого клонируется данный (это происходит при создании партиций или присоединении их к партиционированной таблице); ноль, если данный триггер — не клон
tgname nameИмя триггера (должно быть уникальным среди триггеров одной таблицы)
tgfoid oid
(ссылается на pg_proc.oid)
Вызываемая функция
tgtype int2Битовая маска, определяющая условия срабатывания триггера
tgenabled charЗадает режимы session_replication_role, при которых срабатывает триггер. О = триггер срабатывает в режимах «origin» (источник) и «local» (локально), D = триггер выключен, R = триггер срабатывает в режиме «replica» (реплика), A = триггер срабатывает всегда.
tgisinternal boolTrue, если триггер генерируется внутренне (обычно для принудительного применения ограничения, определенного в поле tgconstraint)
tgconstrrelid oid
(ссылается на pg_class.oid)
Таблица, на которую ссылается ограничение ссылочной целостности (ноль, если триггер предназначен не для реализации ограничения ссылочной целостности)
tgconstrindid oid
(ссылается на pg_class.oid)
Индекс, поддерживающий ограничение уникальности, первичного ключа, ссылочной целостности или исключения (ноль, если триггер предназначен не для реализации этих типов ограничений)
tgconstraint oid
(ссылается на pg_constraint.oid)
Связанная с триггером запись в каталоге pg_constraint (ноль, если триггер предназначен не для ограничения)
tgdeferrable boolTrue, если триггер ограничения является откладываемым
tginitdeferred boolTrue, если триггер ограничения изначально отложен
tgnargs int2Количество строк аргументов, переданных в триггерную функцию
tgattr int2vector
(ссылается на pg_attribute.attnum)
Номера столбцов, если триггер является специфичным для столбцов; в противном случае пустой массив
tgargs byteaСтроки аргументов для передачи триггеру, каждая завершается NULL
tgqual pg_node_treeДерево выражений (в представлении nodeToString()) для условия триггера WHEN или NULL, если такового нет
tgoldtable nameИмя предложения REFERENCING для OLD TABLE или NULL, если такового нет
tgnewtable nameИмя предложения 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.

Возможности текстового поиска QHB подробно описаны в главе Полнотекстовый поиск.

Таблица 59. Столбцы pg_ts_config

Столбец ТипОписание
oid oidИдентификатор строки
cfgname nameИмя конфигурации текстового поиска
cfgnamespace oid
(ссылается на pg_namespace.oid)
OID пространства имен, содержащего эту конфигурацию
cfgowner oid
(ссылается на pg_authid.oid)
Владелец конфигурации
cfgparser oid
(ссылается на pg_ts_parser.oid)
OID синтаксического анализатора текстового поиска для этой конфигурации


pg_ts_config_map

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

Возможности текстового поиска QHB подробно описаны в главе Полнотекстовый поиск.

Таблица 60. Столбцы pg_ts_config_map

Столбец ТипОписание
mapcfg oid
(ссылается на pg_ts_config.oid)
OID записи в каталоге pg_ts_config, которой принадлежит эта запись сопоставления
maptokentype int4Тип синтаксических единиц, генерируемых синтаксическим анализатором конфигурации
mapseqno int4Порядок, в котором следует обращаться к этой записи (сначала меньшие mapseqno)
mapdict oid
(ссылается на pg_ts_dict.oid)
OID словаря текстового поиска, к которому нужно обращаться


pg_ts_dict

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

Возможности текстового поиска QHB подробно описаны в главе Полнотекстовый поиск.

Таблица 61. Столбцы pg_ts_dict

Столбец ТипОписание
oid oidИдентификатор строки
dictname nameИмя словаря текстового поиска
dictnamespace oid
(ссылается на pg_namespace.oid)
OID пространства имен, содержащего этот словарь
dictowner oid
(ссылается на pg_authid.oid)
Владелец словаря
dicttemplate oid
(ссылается на pg_ts_template.oid)
OID шаблона текстового поиска для этого словаря
dictinitoption textСтрока параметров инициализации для этого шаблона


pg_ts_parser

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

Возможности текстового поиска QHB подробно описаны в главе Полнотекстовый поиск.

Таблица 62. Столбцы pg_ts_parser

Столбец ТипОписание
oid oidИдентификатор строки
prsname nameИмя синтаксического анализатора текстового поиска
prsnamespace oid
(ссылается на pg_namespace.oid)
OID пространства имен, содержащего этот синтаксический анализатор
prsstart regproc
(ссылается на pg_proc.oid)
OID функции запуска этого синтаксического анализатора
prstoken regproc
(ссылается на pg_proc.oid)
OID функции этого синтаксического анализатора, выдающей следующую синтаксическую единицу
prsend regproc
(ссылается на pg_proc.oid)
OID функции этого синтаксического анализатора, завершающей анализ
prsheadline regproc
(ссылается на pg_proc.oid)
OID функции этого синтаксического анализатора, выдающей заголовки (ноль, если таковой нет)
prslextype regproc
(ссылается на pg_proc.oid)
OID функции лексических типов этого синтаксического анализатора


pg_ts_template

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

Возможности текстового поиска QHB подробно описаны в главе Полнотекстовый поиск.

Таблица 63. Столбцы pg_ts_template

Столбец ТипОписание
oid oidИдентификатор строки
tmplname nameИмя шаблона текстового поиска
tmplnamespace oid
(ссылается на pg_namespace.oid)
OID пространства имен, содержащего этот шаблон
tmplinit regproc
(ссылается на pg_proc.oid)
OID функции инициализации этого шаблона (ноль, если таковой нет)
tmpllexize regproc
(ссылается на pg_proc.oid)
OID функции выделения лексем этого шаблона


pg_type

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

Таблица 64. Столбцы pg_type

Столбец ТипОписание
oid oidИдентификатор строки
typname nameИмя типа данных
typnamespace oid
(ссылается на pg_namespace.oid)
OID пространства имен, содержащего этот тип
typowner oid
(ссылается на pg_authid.oid)
Владелец типа
typlen int2Для типа фиксированного размера поле typlen содержит число байтов во внутреннем представлении типа. Но для типа переменной длины typlen будет отрицательным. -1 обозначает тип «varlena» (он содержит машинное слово, указывающее длину), -2 обозначает строку в стиле C, завершающуюся значением NULL.
typbyval boolПоле typbyval определяет, будут ли внутренние подпрограммы передавать значение этого типа по значению или по ссылке. typbyval предпочтительно иметь значение false, если typlen не равно 1, 2 или 4 (или 8 на 64-битных машинах). Типы переменной длины всегда передаются по ссылке. Обратите внимание, что typbyval может иметь значение false, даже если длина типа позволила бы передачу по значению.
typtype charПоле typtype имеет значение b для базового типа, c для составного типа (например, типа строки таблицы), d для домена, e для перечислимого типа, p для псевдотипа, r для диапазонного типа или m для мультидиапазонного типа. См. также описания столбцов typrelid и typbasetype.
typcategory charВ поле typcategory задается произвольная классификация типов данных, которая используется синтаксическим анализатором для определения того, какие неявные приведения должны быть «предпочтительными». См. таблицу Коды typcategory.
typispreferred boolTrue, если тип является предпочтительной целью приведения внутри своей категории (typcategory)
typisdefined boolTrue, если тип определен, false, если это запись-«заглушка» для еще не определенного типа. Когда поле typisdefined имеет значение false, ни на что, кроме имени типа, пространства имен и OID, полагаться нельзя.
typdelim charСимвол, который разделяет два значения этого типа при синтаксическом анализе вводимого массива. Обратите внимание, что разделитель связан с типом данных элемента массива, а не с типом самого массива.
typrelid oid
(ссылается на pg_class.oid)
Если это составной тип (см. typtype), то данный столбец указывает на запись в каталоге pg_class, которая определяет соответствующую таблицу. (Для отдельно стоящего составного типа запись в pg_class на самом деле не представляет таблицу, но она все равно необходима для записей типа в каталоге pg_attribute, чтобы сослаться на них.) Для несоставных типов столбец содержит ноль.
typsubscript regproc
(ссылается на pg_proc.oid)
OID функции обработки индексации или ноль, если этот тип не поддерживает индексацию. Для «настоящих» типов массивов typsubscript = array_subscript_handler, но у других типов могут быть и другие функции обработки для реализации особого способа индексации.
typelem oid
(ссылается на pg_type.oid)
Если поле typelem не содержит ноль, то оно указывает на другую строку в каталоге pg_type, определяя тип, возвращаемый при индексации. Если поле typsubscript содержит ноль, то и в этом столбце должен быть ноль. Однако typelem может содержать ноль и когда значение typsubscript ненулевое, если при определении типа результата индексации обработчику не нужен typelem. Обратите внимание, что зависимость typelem подразумевает физическое включение типа элемента в этот тип, поэтому изменения DDL типа элемента могут быть ограничены присутствием этого типа.
typarray oid
(ссылается на pg_type.oid)
Если поле typarray не содержит 0, то оно ссылается на другую строку в каталоге pg_type, описывающую «настоящий» тип массива, где этот тип является элементом
typinput regproc
(ссылается на pg_proc.oid)
Функция преобразования ввода (из текстового формата)
typoutput regproc
(ссылается на pg_proc.oid)
Функция преобразования вывода (в текстовый формат)
typreceive regproc
(ссылается на pg_proc.oid)
Функция преобразования ввода (из двоичного формата) или 0, если такой функции нет
typsend regproc
(ссылается на pg_proc.oid)
Функция преобразования вывода (в двоичный формат) или 0, если такой функции нет
typmodin regproc
(ссылается на pg_proc.oid)
Функция ввода модификатора типа или 0, если тип не поддерживает модификаторы
typmodout regproc
(ссылается на pg_proc.oid)
Функция вывода модификатора типа или 0 для использования стандартного формата
typanalyze regproc
(ссылается на pg_proc.oid)
Пользовательская функция команды ANALYZE или 0 для использования стандартной функции
typalign charПоле typalign определяет выравнивание, необходимое при хранении значения этого типа. Это относится к хранилищу на диске, а также к большинству представлений значения внутри QHB. Когда несколько значений хранятся последовательно, например, в представлении полной строки данных на диске, заполнение дополнительными байтами происходит перед значением этого типа, чтобы тот начинался на указанной границе. Ссылка на выравнивание является началом первого значения в последовательности. Возможные значения:
- c = выравнивание по символам (char), т. е. выравнивание не требуется.
- s = выравнивание по границе слова (short) (2 байта на большинстве процессоров).
- i = выравнивание по границе целого (int) (4 байта на большинстве процессоров).
- d = выравнивание по границе двойного слова (double) (8 байт на многих процессорах, но далеко не на всех).
typstorage charЗначение поля typstorage для типов varlena (т. е. с typlen = -1) сообщает, подготовлен ли тип для помещения в TOAST и какова должна быть стратегия по умолчанию для атрибутов этого типа. Возможные значения:
- p (plain, простое): Значения всегда должны храниться простым образом (этот вариант используется для всех типов постоянной длины).
- e (external, внешнее): Значения могут храниться во вторичном отношении «TOAST» (если в отношении это значение есть, см. pg_class.reltoastrelid).
- m (main, основное): Значения могут быть сжаты и храниться внутристрочно.
- x (extended, расширенное): Значения могут быть сжаты и/или перемещены во вторичное отношение.
Для типов, которые могут быть помещены в TOAST, обычно применяется стратегия x. Обратите внимание, что значения m также можно переместить во вторичное хранилище, но только в крайнем случае (значения e и x перемещаются первыми).
typnotnull boolПоле typnotnull представляет собой ограничение NOT NULL для типа. Используется только для доменов.
typbasetype oid
(ссылается на pg_type.oid)
Если это домен (см. typtype), то поле typbasetype определяет тип, на котором он основан. Ноль, если этот тип не является доменом.
typtypmod int4Домены используют поле typtypmod, чтобы записать модификатор typmod, применяемый к их базовому типу (-1, если базовый тип не использует typtypmod). -1, если этот тип не является доменом.
typndims int4Значение поля typndims представляет собой число размерностей массива для домена, определенного поверх массива (т. е. когда typbasetype является типом массива). Ноль для типов, отличных от доменов поверх типов массивов.
typcollation oid
(ссылается на pg_collation.oid)
Поле typcollation задает правило сортировки типа. Если тип не поддерживает правила сортировки, столбец содержит ноль. Базовый тип, который поддерживает правила сортировки, здесь будет иметь ненулевое значение, как правило, DEFAULT_COLLATION_OID. Домен поверх сортируемого типа может иметь OID правила сортировки, отличающийся от такового его базового типа, если он был указан для домена.
typdefaultbin pg_node_treeЕсли поле typdefaultbin содержит не NULL, то это представление nodeToString() выражения по умолчанию для данного типа. Используется только для доменов.
typdefault textПоле typdefault содержит NULL, если с типом не связано значение по умолчанию. Если поле typdefaultbin содержит не NULL, то поле typdefault должно содержать понятную человеку версию выражения по умолчанию, представленного в typdefaultbin. Если поле typdefaultbin содержит NULL, а typdefault — нет, значит, в typdefault находится внешнее представление значения по умолчанию этого типа, которое можно передать в принадлежащую типу функцию преобразования ввода для получения константы.
typacl aclitem[]Права доступа; подробную информацию см. в разделе Права

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

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

Таблица 65. Коды typcategory

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


pg_user_mapping

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

Таблица 66. Столбцы pg_user_mapping

Столбец ТипОписание
oid oidИдентификатор строки
umuser oid
(ссылается на pg_authid.oid)
OID сопоставляемой локальной роли или ноль, если пользовательское сопоставление является общедоступным
umserver oid
(ссылается на pg_foreign_server.oid)
OID стороннего сервера, содержащего это сопоставление
umoptions text[]Специфичные для сопоставления пользователей параметры в виде строк «ключ=значение»


qhb_auth_profile

В каталоге qhb_auth_profile хранятся профили безопасности. По умолчанию доступен один начальный профиль безопасности (единственная запись в qhb_auth_profile) с OID равным 9352. Удаление этого профиля может повредить стабильности работы системы, так как он используется для всех пользователей, которым администратором СУБД еще не был назначен выделенный профиль.

Таблица 67. Столбцы qhb_auth_profile

Столбец ТипОписание
oid oidИдентификатор строки
max_failed_attempts int4Разрешенное данным профилем число ошибочных попыток ввода пароля
auto_unlock boolПризнак автоматической разблокировки пользователей данного профиля безопасности
lockout_duration_sec int4Длительность блокировки (в секундах) при включенной автоматической разблокировке
inactivity_lockout_sec int4Таймаут неактивности пользователей данного профиля, после которого происходит их блокировка, в секундах
password_check boolПризнак проверки задаваемых паролей на соответствие политикам безопасности профиля
password_len int4Минимальная длина пароля, в символах
alphabet_size int4Минимальная мощность алфавита пароля, в символах
name textИмя данного профиля безопасности


qhb_auth_profile_authid

В каталоге qhb_auth_profile_authid хранится связь пользователя с определенным профилем безопасности

Таблица 68. Столбцы qhb_auth_profile_authid

Столбец ТипОписание
role_id oid
(ссылается на pg_authid.oid)
Идентификатор пользователя
profile_id oid
(ссылается на qhb_auth_profile.oid)
Идентификатор профиля


qhb_user_lockout

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

Таблица 69. Столбцы qhb_user_lockout

Столбец ТипОписание
oid oidИдентификатор строки
role_id oid
(ссылается на pg_authid.oid)
Идентификатор пользователя
invalid_attempts int4Счетчик ошибочных попыток ввода пароля, необходим для своевременной блокировки
locked boolПризнак блокировки пользователя role_id
locked_since timestampДата и время начала блокировки
last_activity timestampДата и время последнего захода в СУБД