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

Системные каталоги — это место, где система управления реляционными базами данных хранит метаданные схемы, например сведения о таблицах и столбцах, а также информацию о внутреннем бухгалтерском учете. Системные каталоги 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_partitioned_tableинформация о ключе разбиения таблиц
pg_policyполитики защиты на уровне строк
pg_procфункции и процедуры
pg_publicationпубликации для логической репликации
pg_publication_relсопоставление отношений с публикациями
pg_rangeинформация о типах диапазонов
pg_replication_originзарегистрированные источники репликации
pg_rewriteправила переписывания запросов
pg_seclabelметки безопасности для объектов базы данных
pg_sequenceинформация о последовательностях
pg_shdependзависимости для разделяемых объектов
pg_shdescriptionкомментарии к разделяемым объектам
pg_shseclabelметки безопасности для разделяемых объектов базы данных
pg_statisticстатистика планировщика
pg_statistic_extрасширенная статистика планировщика (определение)
pg_statistic_ext_dataрасширенная статистика планировщика (собранная статистика)
pg_subscriptionподписки на логическую репликацию
pg_subscription_relсостояние отношений для подписок
pg_tablespaceтабличные пространства в этом кластере баз данных
pg_transformтрансформации (преобразования типа данных в процедурный язык)
pg_triggerтриггеры
pg_ts_configконфигурации текстового поиска
pg_ts_config_mapсопоставления синтаксических единиц конфигураций текстового поиска
pg_ts_dictсловари текстового поиска
pg_ts_parserсинтаксические анализаторы текстового поиска
pg_ts_templateшаблоны текстового поиска
pg_typeтипы данных
pg_user_mappingсопоставления пользователей для сторонних серверов

pg_aggregate

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

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

Столбец Тип
Описание
aggfnoid regproc (ссылается на pg_proc.oid)
OID агрегатной функции в каталоге pg_proc
aggkind char
Вид агрегата: n для обычного (normal), o для сортирующего (ordered-set) или h для гипотезирующего (hypothetical-set)
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, если состояние доступно только для чтения (read), s, если aggtransfn нельзя применять после aggfinalfn, или w, если состояние перезаписывается (write).
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 char
t = таблица (включая материализованные представления), 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-дерева, в соответствии с которым данный оператор сортирует, если это оператор упорядочивания; 0, если это оператор поиска

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

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

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

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


pg_amproc

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

Таблица 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.attnum)
Номер столбца
adbin pg_node_tree
Значение столбца по умолчанию в виде nodeToString(). Чтобы преобразовать его в выражение SQL, воспользуйтесь функцией pg_get_expr(adbin, adrelid).

pg_attribute

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

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

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

Столбец Тип
Описание
attrelid oid (ссылается на pg_class.oid)
Таблица, которой принадлежит этот столбец
attname name
Имя столбца
atttypid oid (ссылается на pg_type.oid)
Тип данных этого столбца (ноль для удаленного столбца)
attstattarget int4
Столбец attstattarget управляет уровнем детализации статистики, собираемой для данного столбца при помощи команды ANALYZE. Нулевое значение указывает на то, что статистика не должна собираться. Отрицательное значение указывает использовать системный целевой показатель статистики по умолчанию. Точное значение положительных значений зависит от типа данных. Для скалярных типов данных значение attstattarget является как целевым числом собираемых «наиболее распространенных значений», так и целевым числом создаваемых интервалов гистограммы.
attlen int2
Копия поля pg_type.typlen из записи типа этого столбца
attnum int2
Номер столбца. Обычные столбцы нумеруются по возрастанию, начиная с 1. Системные столбцы, такие как ctid, имеют отрицательные номера (произвольные).
attndims int4
Количество размерностей, если столбец имеет тип массива; в противном случае ноль. (В настоящее время количество размерностей массива не регулируется, поэтому любое ненулевое значение в сущности означает «это массив».)
attcacheof int4
Всегда -1 в хранилище, но при загрузке в дескриптор строки в памяти это поле может измениться, чтобы кэшировать смещение атрибута в строке
atttypmod int4
В поле atttypmod записываются специфичные для определенного типа данные, предоставляемые при создании таблицы (например максимальная длина столбца varchar). Эти данные передаются специфичным для типа функциям ввода и функциям ограничения длины. Для типов, которые не нуждаются в atttypmod, значение обычно будет равняться -1.
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 = значение генерируется всегда (always), d = значение генерируется по умолчанию (by default).
attgenerated char
Пустой символ ('') указывает, что это не генерируемый столбец. В ином случае s = генерируемое значение хранится (stored). (В будущем могут быть добавлены и другие значения.)
attisdropped bool
Этот столбец был удален и стал нерабочим. Удаленный столбец все еще физически присутствует в таблице, но игнорируется синтаксическим анализатором, и поэтому к нему нельзя обратиться через SQL.
attislocal bool
Этот столбец определяется локально в отношении. Обратите внимание, что столбец может одновременно быть локально определен и унаследован.
attinhcount int4
Число прямых предков этого столбца. Столбец с ненулевым числом предков нельзя удалить или переименовать.
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

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

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 означает только явное приведение (explicit) с использованием синтаксиса CAST или ::. а означает неявное присваивание целевому столбцу (assignment), а также явное приведение. i означает неявное приведение в выражениях (implicitly), а также все остальные случаи.
castmethod char
Указывает, как выполняется приведение. f означает, что используется функция (function), указанная в поле castfunc. i означает, что используются функции ввода/вывода (input/output). b означает, что типы являются двоично-совместимыми (binary-coercible), поэтому преобразование не требуется.

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

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

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


pg_class

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

Таблица 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, указывая, что количество строк неизвестно./td>
relallvisible int4
Количество страниц, отмеченных как полностью видимые на карте видимости таблицы. Это только расчетная оценка, используемая планировщиком. Она обновляется с помощью команд VACUUM, ANALYZE и нескольких команд DDL, таких как CREATE INDEX.
reltoastrelid oid (ссылается на pg_class.oid)
OID таблицы TOAST, связанной с этой таблицей; ноль, если такой таблицы нет. Таблица TOAST хранит большие атрибуты «вынесенными» во вторичную таблицу.
relhasindex bool
True, если это таблица и она имеет (или недавно имела) какие-либо индексы
relisshared bool
True, если эта таблица является разделяемой для всех баз данных в кластере. Разделяемыми являются только определенные системные каталоги (например pg_database).
relpersistence char
p = постоянная таблица (permanent), u = незарегистрированная таблица (unlogged), t = временная таблица (temporary)
relkind char
r = Обычная таблица (regular), i = индекс (index), s = последовательность (sequence), t = таблица TOAST, v = представление (view), m = материализованное представление (materialized), c = составной тип (composite), f = сторонняя таблица (foreign), p = партиционированная таблица (partitioned), I = партиционированный индекс (index)
relnatts int2
Количество пользовательских столбцов в отношении (системные столбцы не учитываются). В каталоге pg_attribute должно быть такое же количество соответствующих записей. См. также описание столбца pg_attribute.attnum.
relchecks int2
Количество проверочных ограничений (CHECK) у таблицы; см. каталог pg_constraint
relhasrules bool
True, если таблица имеет (или когда-то имела) правила; см. каталог pg_rewrite
relhastriggers bool
True, если таблица имеет (или когда-то имела) триггеры; см. каталог pg_trigger
relhassubclass bool
True, если таблица или индекс имеют (или когда-то имели) потомков в результате наследования
relrowsecurity bool
True, если в таблице включена защита на уровне строк; см. каталог pg_policy
relforcerowsecurity bool
True, если защита уровня строк (если она включена) будет также применяться и к владельцу таблицы; см. каталог pg_policy
relispopulated bool
True, если отношение заполнено (это справедливо для всех отношений, кроме некоторых материализованных представлений)
relreplident char
Столбцы, используемые для формирования «идентификационных характеристик реплики» для строк: d = по умолчанию (default) (первичный ключ, если таковой имеется), n = ничего (nothing), f = все столбцы, i = индекс со свойством indisreplident (если ранее использовавшийся индекс был удален, действует так же, как n)
relispartition bool
True, если таблица или индекс является партицией
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 = установленный в базе данных по умолчанию (default), c = libc, i = icu
collisdeterministic bool
Является ли правило сортировки детерминированным?
collencoding int4
Кодировка, в которой применимо правило сортировки, или -1, если оно работает для любой кодировки
collcollate name
LC_COLLATE для этого объекта правила сортировки
collctype name
LC_CTYPE для этого объекта правила сортировки
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 char
c = проверочное ограничение (check), f = ограничение внешнего ключа (foreign), p = ограничение первичного ключа (primary), u = ограничение уникальности (unique), t = триггер ограничения (trigger), x = исключающее ограничение (exclusion)
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 = нет действия (no action), r = ограничить (restrict), c = каскадное действие (cascade), n = установить NULL, d = поведение по умолчанию (default)
confdeltype char
Код действия при удалении внешнего ключа: a = нет действия, r = ограничить, c = каскадное действие, n = установить NULL, d = поведение по умолчанию
confmatchtype char
Тип сопоставления для внешнего ключа: f = полное (full), p = частичное (partial), s = простое (simple)
conislocal bool
Это ограничение определяется локально для данного отношения. Обратите внимание, что ограничение может одновременно быть локально определено и унаследовано.
coninhcount int4
Количество предков прямого наследования от ограничения. Ограничение с ненулевым количеством предков нельзя удалить или переименовать.
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
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
Идентификатор исходной кодировки
contoencoding int4
Идентификатор целевой кодировки
conproc regproc (ссылается на pg_proc.oid)
Функция преобразования
condefault bool
True, если это преобразование по умолчанию

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() может перевести этот номер в имя кодировки)
datcollate name
LC_COLLATE для этой базы данных
datctype name
LC_CTYPE для этой базы данных
datistemplate bool
Если true, то эту базу данных может клонировать любой пользователь, обладающий правом CREATEDB; если false, то клонировать ее могут только суперпользователи или владелец этой базы данных.
datallowconn bool
Если false, то никто не может подключиться к этой базе данных. Используется для защиты базы-шаблона template0 от изменений.
datconnlimit int4
Задает максимальное число одновременных подключений, которые могут быть выполнены к этой базе данных. -1 означает отсутствие ограничений.
datlastsysoid oid
Последний системный OID в базе данных; полезен, в частности, для qhb_dump
datfrozenxid xid
В этой базе данных все идентификаторы транзакций, предшествующие данному, были заменены на постоянный («замороженный») идентификатор транзакции. Это используется для отслеживания того, нужно ли очистить таблицу для предотвращения зацикливания идентификаторов транзакций или уменьшения размера pg_xact. Это минимальные значения поля pg_class.relfrozenxid для всех таблиц.
datminmxid xid
В этой базе данных все идентификаторы мультитранзакций, предшествующие данному, были заменены на другой идентификатор транзакции. Это используется для отслеживания того, нужно ли очистить таблицу для предотвращения зацикливания идентификаторов мультитранзакций или уменьшения размера pg_multixact. Это минимальные значения поля pg_class.relminmxid для всех таблиц.
dattablespace oid (ссылается на pg_tablespace.oid)
Табличное пространство по умолчанию для этой базы данных. В пределах этой базы данных все таблицы, у которых поле pg_class.reltablespace равно нулю, будут храниться в этом табличном пространстве (в частности, там будут находиться все системные каталоги, кроме разделяемых).
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 = отношение (relation) (таблица, представление), S = последовательность (sequence), f = функция (function), T = тип (type), 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 системного каталога, в котором находится зависимый объект, или ноль для записи DEPENDENCY_PIN
objid oid (ссылается на какой-либо столбец OID)
OID конкретного зависимого объекта, или ноль для записи DEPENDENCY_PIN
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.

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

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

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


pg_description

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

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

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

Столбец Тип
Описание
objoid 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 = триггер выключен (disabled), R = триггер срабатывает в режиме «replica» (реплика), A = триггер срабатывает всегда (always).
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 bool
True, если расширение можно переместить в другую схему
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, то это уникальный индекс
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 bool
true для партиции, находящейся в процессе отсоединения; иначе — false.

pg_init_privs

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

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

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

Таблица 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 bool
True, если это доверенный язык (это означает, что он предположительно не предоставляет доступ к чему-либо за пределами обычной среды выполнения 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 bool
True, если этот класс операторов используется по умолчанию для 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 char
b = инфиксный оператор («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_partitioned_table

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

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

Столбец Тип
Описание
partrelid oid (ссылается на pg_class.oid)
OID записи в каталоге pg_class для этой партиционированной таблицы
partstrat char
Стратегия партиционирования: h = по хэшу (hash), l = по списку (list), r = по диапазону (range)
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_opclass.oid)
Для каждого столбца в ключе разбиения это поле содержит OID правила сортировки, используемого для партиционирования, или ноль, если столбец не относится к сортируемому типу данных.
partexprs pg_node_tree
Деревья выражений (в представлении nodeToString()) для столбцов ключа разбиения, которые не являются простыми ссылками на столбцы. Это список с одним элементом для каждой нулевой записи в поле partattrs. NULL, если все столбцы ключа разбиения являются простыми ссылками.
opckeytype oid (ссылается на pg_type.oid)
Тип данных, хранящихся в индексе, или ноль, если он совпадает с opcintype

pg_policy

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

Таблица 37. Столбцы 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 должна иметься соответствующая строка.

Таблица 38. Столбцы 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 char
f для обычной функции (function), p для процедуры (procedure), a для агрегатной функции (aggregate) или w для оконной функции (window)
prosecdef bool
Функция является определителем контекста безопасности (т. е. функцией «setuid»)
proleakproof bool
Функция не имеет побочных эффектов. Никакая информация о ее аргументах не передается, иначе чем через возвращаемое значение. Любая функция, которая может вызвать ошибку, в зависимости от значений ее аргументов, не является герметичной.
proisstrict bool
Функция возвращает NULL, если любой аргумент вызова имеет значение NULL. В этом случае функция по факту не будет вызвана вообще. Функции, которые не являются «строгими», должны быть подготовлены для обработки входных значений NULL.
proretset bool
Функция возвращает множество (т. е. несколько значений указанного типа данных)
provolatile char
Поле provolatile показывает, зависит ли результат функции только от ее входных аргументов, или на него влияют внешние факторы. Для «неизменяемых» функций, которые всегда дают один и тот же результат для одних и тех же входных данных, устанавливается значение i (immutable). Для «стабильных» функций, результаты которых (для фиксированных входных аргументов) не изменяются в пределах сканирования, устанавливается значение s (stable). Для «изменчивых» функций, результаты которых могут измениться в любое время, устанавливается значение v (volatile). (Также v используется для функций с побочными эффектами, чтобы их вызовы нельзя было оптимизировать.)
proparallel char
Поле proparallel показывает, можно ли безопасно запускать функцию в параллельном режиме. Для функций, которые безопасно запускать в параллельном режиме без ограничений, устанавливается значение s (safe). Для функций, которые могут выполняться в параллельном режиме, но их выполнение ограничено ведущим процессом группы (параллельные рабочие процессы не могут вызывать эти функции), устанавливается значение r (restricted). Для функций, которые небезопасны в параллельном режиме (наличие такой функции заставляет оптимизатор строить план последовательного выполнения запроса), устанавливается значение u (unsafe).
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 содержатся все публикации, созданные в базе данных. Подробнее о публикациях можно узнать в разделе Публикация.

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

Столбец Тип
Описание
oid oid
Идентификатор строки
pubname name
Имя публикации
pubname 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_rel

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

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

Столбец Тип
Описание
oid oid
Идентификатор строки
prpubid oid (ссылается на pg_publication.oid)
Ссылка на публикацию
prrelid oid (ссылается на pg_class.oid)
Ссылка на отношение

pg_range

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

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

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

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

pg_rewrite

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

Таблица 43. Столбцы 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 = правило выключено (disabled), R = правило срабатывает в режиме «replica» (реплика), A = правило срабатывает всегда (always).
is_instead bool
True, если это правило 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, который выполняет ту же функцию для меток безопасности разделяемых объектов в кластере баз данных.

Таблица 44. Столбцы 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.

Таблица 45. Столбцы 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 на кластер, а не отдельная для каждой базы данных.

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

Столбец Тип
Описание
dbid oid (ссылается на pg_database.oid)
OID базы данных, в которой находится зависимый объект, или ноль для разделяемого объекта или записи SHARED_DEPENDENCY_PIN
classid oid (ссылается на pg_class.oid)
OID системного каталога, в котором находится зависимый объект, или ноль для записи SHARED_DEPENDENCY_PIN
objid oid (ссылается на какой-либо столбец OID)
OID конкретного зависимого объекта или ноль для записи SHARED_DEPENDENCY_PIN
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_PIN (p)
Зависимый объект отсутствует; этот тип записи служит сигналом, что сама система зависит от ссылочного объекта, и поэтому этот объект никогда не должен быть удален. Записи этого типа создаются только программой qhb_bootstrap. Столбцы для зависимого объекта у этой записи содержат нули.

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

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


pg_shdescription

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

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

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

Таблица 47. Столбцы 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 на кластер, а не отдельная для каждой базы данных.

Таблица 48. Столбцы 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, которое выводит информацию только о тех таблицах, которые может читать текущий пользователь.

Таблица 49. Столбцы 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. Нулевое значение означает, что количество уникальных значений неизвестно.
stakindN int2
Кодовый номер, указывающий вид статистики, хранящейся в N-м «слоте» строки каталога pg_statistic.
staopN oid (ссылается на pg_operator.oid)
Оператор, используемый для получения статистики, хранящейся в N-м «слоте». Например, для слота гистограммы это будет оператор <, определяющий порядок сортировки данных. Ноль, если для этого вида статистики не требуется оператор.
stacollN oid (ссылается на pg_collation.oid)
Правило сортировки, используемое для получения статистики, хранящейся в N-м «слоте». Например, слот гистограммы для сортируемого столбца будет отображать правило сортировки, определяющее порядок сортировки данных. Ноль для несортируемых данных.
stanumbersN float4[]
Числовая статистика соответствующего вида для N-го «слота» или NULL, если этот вид слота не содержит числовых значений
stavaluesN anyarray
Значения данных столбца соответствующего вида для N-го «слота» или NULL, если этот вид слота не хранит никаких значений данных. Значения каждого элемента массива фактически относятся к определенному типу данных столбца или связанному типу, например типу элемента массива, поэтому нет способа определить тип этих столбцов более конкретно, чем anyarray.

pg_statistic_ext

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

Таблица 50. Столбцы 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 для статистики по количеству уникальных значений (n-distinct), f для статистики функциональной зависимости (functional dependency), m для статистики списка наиболее распространенных значений (most common values, MCV) и e для статистики выражений (expression)
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.

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

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

Столбец Тип
Описание
stxoid oid (ссылается на pg_statistic_ext.oid)
Объект расширенной статистики, содержащий определение для этих данных
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, поскольку он может содержать пароли в открытом виде.

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

Столбец Тип
Описание
oid oid
Идентификатор строки
subdbid oid (ссылается на pg_database.oid)
OID базы данных, в которой находится подписка
subname name
Имя подписки
subowner oid (ссылается на pg_authid.oid)
Владелец подписки
subenabled bool
Если true, то подписка включена и должна реплицироваться.
subbinary bool
Если true, то подписка будет запрашивать данные у публикующего сервера в двоичном формате
substream bool
Если true, то для подписки будет разрешена потоковая передача данных еще выполняющихся транзакций
subconninfo text
Строка подключения к вышестоящей базе данных
subslotname name
Имя слота репликации в вышестоящей базе данных (также используется при локальной репликации имени источника); NULL представляет NONE.
subsynccommit text
Значение параметра synchronous_commit для рабочих процессов подписки
subpublications text[]
Массив имен публикаций, на которые оформлена подписка. Эти имена представляют публикации, определенные в вышестоящей базе данных. Подробнее публикации описаны в разделе Публикация.

pg_subscription_rel

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

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

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

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

pg_tablespace

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

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

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

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

pg_transform

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

Таблица 55. Столбцы 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.

Таблица 56. Столбцы 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 = триггер выключен (disabled), R = триггер срабатывает в режиме «replica» (реплика), A = триггер срабатывает всегда (always).
tgisinternal bool
True, если триггер генерируется внутренне (обычно для принудительного применения ограничения, определенного в поле tgconstraint)
tgconstrrelid oid (ссылается на pg_class.oid)
Таблица, на которую ссылается ограничение ссылочной целостности (ноль, если триггер предназначен не для реализации ограничения ссылочной целостности)
tgconstrindid oid (ссылается на pg_class.oid)
Индекс, поддерживающий ограничение уникальности, первичного ключа, ссылочной целостности или исключения (ноль, если триггер предназначен не для реализации этих типов ограничений)
tgconstraint oid (ссылается на pg_constraint.oid)
Связанная с триггером запись в каталоге pg_constraint (ноль, если триггер предназначен не для ограничения)
tgdeferrable bool
True, если триггер ограничения является откладываемым
tginitdeferred bool
True, если триггер ограничения изначально отложен
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 подробно описаны в главе Полнотекстовый поиск.

Таблица 57. Столбцы 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 подробно описаны в главе Полнотекстовый поиск.

Таблица 58. Столбцы 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 подробно описаны в главе Полнотекстовый поиск.

Таблица 59. Столбцы 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 подробно описаны в главе Полнотекстовый поиск.

Таблица 60. Столбцы 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 подробно описаны в главе Полнотекстовый поиск.

Таблица 61. Столбцы 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.

Таблица 62. Столбцы 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/RUST, завершающуюся значением NULL.
typbyval bool
Поле typbyval определяет, будут ли внутренние функции передавать значение этого типа по значению или по ссылке. typbyval предпочтительно иметь значение false, если typlen не равен 1, 2 или 4 (или 8 на 64-битных машинах). Типы переменной длины всегда передаются по ссылке. Обратите внимание, что typbyval может иметь значение false, даже если длина типа позволила бы передачу по значению.
typtype char
Поле typtype имеет значение b для базового типа (base), c для составного типа (composite) (например, типа строки таблицы), d для домена (domain), e для перечислимого типа (enum), p для псевдотипа (pseudo), r для диапазонного типа (range) или m для мультидиапазонного типа. См. также описания столбцов typrelid и typbasetype.
typcategory char
В поле typcategory задается произвольная классификация типов данных, которая используется синтаксическим анализатором для определения того, какие неявные приведения должны быть «предпочтительными». См. Таблицу 63.
typispreferred bool
True, если тип является предпочтительной целью приведения внутри своей категории (typcategory)
typisdefined bool
True, если тип определен, 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, были согласованы с тем, как компилятор расположит этот столбец в структуре, представляющей строку таблицы.

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

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

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

pg_user_mapping

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

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

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

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

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

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

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

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

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

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

pg_available_extensions

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

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

Столбец Тип
Описание
name name
Имя расширения
default_version text
Имя версии по умолчанию или NULL, если версия не указана
installed_version text
Версия расширения, установленная в настоящий момент, или NULL, если расширение не установлено
comment text
Строка комментария из управляющего файла расширения

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


pg_available_extension_versions

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

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

Столбец Тип
Описание
name name
Имя расширения
version text
Имя версии
installed bool
True, если эта версия данного расширения уже установлена
superuser bool
True, если это расширение разрешено устанавливать только суперпользователям (но см. trusted)
trusted bool
True, если это расширение могут устанавливать обычные пользователи с надлежащими правами
relocatable bool
True, если расширение можно переместить в другую схему
schema name
Имя схемы, в которую необходимо установить расширение, или NULL, если оно частично или полностью переместимо
requires name[]
Имена расширений, заранее необходимых для данного, или NULL, если таковых нет
comment text
Строка комментария из управляющего файла расширения

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


pg_backend_memory_contexts

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

Для каждого контекста памяти pg_backend_memory_contexts содержит одну строку.

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

Столбец Тип
Описание
name text
Имя контекста памяти
ident text
Идентификационная информация о контексте памяти. Размер этого поля ограничен 1024 байтами
parent text
Имя родителя этого контекста памяти
level int4
Расстояние от верхнего контекста памяти (TopMemoryContext) в дереве контекстов
total_bytes int8
Общее количество байтов, выделенных для этого контекста памяти
total_nblocks int8
Общее количество блоков памяти, выделенных для этого контекста памяти
free_bytes int8
Объем свободного пространства в байтах
free_chunks int8
Общее количество свободных участков памяти
used_bytes int8
Объем использованного пространства в байтах

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


pg_config

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

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

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

Столбец Тип
Описание
name text
Имя параметра
setting text
Значение параметра

pg_cursors

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

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

  • через сообщение Bind в клиент-серверном протоколе QHB, как описано в подразделе Расширенный запрос

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

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

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

Таблица 70. Столбцы pg_cursors

Столбец Тип
Описание
name text
Имя курсора
statement text
Дословная строка запроса, представившая объявление этого курсора
is_holdable bool
true, если курсор удерживаемый (т. е. может быть доступен после фиксации транзакции, в которой он был объявлен); иначе — false
is_binary bool
true, если курсор был объявлен с указанием BINARY; иначе — false
is_scrollable bool
true, если курсор прокручиваемый (т. е. позволяет извлекать строки непоследовательным образом); иначе — false
creation_time timestamptz
Время, когда был объявлен курсор

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


pg_file_settings

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

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

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

Таблица 71. Столбцы pg_file_settings

Столбец Тип
Описание
sourcefile text
Полный путь к файлу конфигурации
sourceline int4
Номер строки в файле конфигурации, где присутствует эта запись
seqno int4
Порядок, в котором обрабатываются записи (1..n)
name text
Имя параметра конфигурации
setting text
Значение, присваиваемое параметру
applied bool
True, если значение может быть применено успешно
error text
Сообщение об ошибке, указывающее, почему эта запись не может быть применена, или NULL

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

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


pg_group

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

Таблица 72. Столбцы pg_group

Столбец Тип
Описание
groname name (ссылается на pg_authid.rolname)
Имя группы
grosysid oid (ссылается на pg_authid.oid)
Идентификатор этой группы
grolist oid[] (ссылается на pg_authid.oid)
Массив, содержащий идентификаторы ролей в этой группе

pg_hba_file_rules

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

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

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

Таблица 73. Столбцы pg_hba_file_rules

Столбец Тип
Описание
line_number int4
Номер строки этого правила в qhb_hba.conf
type text
Тип соединения
database text[]
Список имен баз данных, к которым применяется это правило
user_name text[]
Список имен пользователей и групп, к которым применяется это правило
address text
Имя или IP-адрес хоста, либо одно из значений: all, samehost или samenet, либо NULL для локальных соединений
netmask text
Маска IP-адреса или NULL, если это неприменимо
auth_method text
Метод аутентификации
options text[]
Параметры, указанные для метода аутентификации, если таковые имеются
error text
Сообщение об ошибке, указывающее, почему эта строка не может быть обработана, или NULL

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

Более подробную информацию о конфигурации аутентификации клиентов см. в главе Аутентификация клиентского приложения.


pg_indexes

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

Таблица 74. Столбцы pg_indexes

Столбец Тип
Описание
schemaname name (ссылается на pg_namespace.nspname)
Имя схемы, содержащей таблицу и индекс
tablename name (ссылается на pg_class.relname)
Имя таблицы, для которой предназначен индекс
indexname name (ссылается на pg_class.relname)
Имя индекса
tablespace name (ссылается на pg_tablespace.spcname)
Имя табличного пространства, содержащего индекс (NULL, если это пространство по умолчанию для базы данных)
indexdef text
Определение индекса (реконструированная команда CREATE INDEX)

pg_locks

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

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

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

Таблица 75. Столбцы pg_locks

Столбец Тип
Описание
locktype text
Тип блокируемого объекта: relation (отношение), extend (расширение), page (страница), tuple (кортеж), transactionid (идентификатор транзакции), virtualxid (виртуальный идентификатор), spectoken (спекулятивный маркер), object (объект), userlock (пользовательская блокировка) или advisory (рекомендательная). (См. также таблицу Типы событий ожидания.)
database oid (ссылается на pg_database.oid)
OID базы данных, в которой существует цель блокировки, или ноль, если цель является разделяемым объектом, или NULL, если цель является идентификатором транзакции
relation oid (ссылается на pg_class.oid)
OID отношения, на которое нацелена блокировка, или NULL, если цель не является отношением или частью отношения
page int4
Номер страницы, на которую нацелена блокировка в пределах отношения, или NULL, если цель не является страницей или кортежем отношения
tuple int2
Номер кортежа, на который нацелена блокировка внутри страницы, или NULL, если цель не является кортежем
virtualxid text
Виртуальный идентификатор транзакции, на которую нацелена блокировка, или NULL, если цель не является виртуальным идентификатором транзакции
transactionid xid
Идентификатор транзакции, на которую нацелена блокировка, или NULL, если цель не является идентификатором транзакции
classid oid (ссылается на pg_class.oid)
OID системного каталога, содержащего цель блокировки, или NULL, если цель не является обычным объектом базы данных
objid oid (ссылается на какой-либо столбец OID)
OID цели блокировки в системном каталоге или NULL, если цель не является обычным объектом базы данных
objsubid int2
Номер столбца, на который нацелена блокировка (поля classid и objid ссылаются на саму таблицу), или ноль, если цель является каким-либо другим обычным объектом базы данных, или NULL, если цель не является обычным объектом базы данных
virtualtransaction text
Виртуальный идентификатор транзакции, которая удерживает или ожидает эту блокировку
pid int4
Идентификатор серверного процесса (PID), удерживающего или ожидающего эту блокировку, или NULL, если блокировка удерживается подготовленной транзакцией
mode text
Имя режима блокировки, удерживаемой или ожидаемой этим процессом (см. подразделы Блокировки на уровне таблицы и Уровень изоляции Serializable)
granted bool
True, если блокировка удерживается, false, если блокировка ожидается
fastpath bool
True, если блокировка была получена посредством быстрого пути, false, если она получена через главную таблицу блокировки
waitstart timestamptz
Время, когда серверный процесс начал ожидать эту блокировку, или NULL, если блокировка удерживается. Обратите внимание, что после начала ожидания в этом поле может кратковременно стоять NULL, несмотря на то, что в поле granted будет false.

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

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

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

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

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

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

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

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

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

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

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

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


pg_matviews

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

Таблица 76. Столбцы pg_matviews

Столбец Тип
Описание
schemaname name (ссылается на pg_namespace.nspname)
Имя схемы, содержащей материализованное представление
matviewname name (ссылается на pg_class.relname)
Имя материализованного представления
matviewowner name (ссылается на pg_authid.rolname)
Имя владельца материализованного представления
tablespace name (ссылается на pg_tablespace.spcname)
Имя табличного пространства, содержащего материализованное представление (NULL, если это табличное пространство по умолчанию для базы данных)
hasindexes bool
True, если материализованное представление имеет (или недавно имело) какие-либо индексы
ispopulated bool
True, если материализованное представление в настоящий момент заполнено
definition text
Определение материализованного представления (реконструированный запрос SELECT)

pg_policies

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

Таблица 77. Столбцы pg_policies

Столбец Тип
Описание
schemaname name (ссылается на pg_namespace.nspname)
Имя схемы, содержащей таблицу с этой политикой
tablename name (ссылается на pg_class.relname)
Имя таблицы с этой политикой
policyname name (ссылается на pg_policy.polname)
Имя политики
polpermissive text
Является ли эта политика разрешительной или ограничительной?
roles name[]
Роли, к которым применяется эта политика
cmd text
Тип команды, к которому применяется эта политика
qual text
Выражение, добавляемое к условиям барьера безопасности для запросов, к которым применяется эта политика
with_check text
Выражение, добавляемое к условиям WITH CHECK для запросов, которые пытаются добавить строки в эту таблицу

pg_prepared_statements

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

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

Таблица 78. Столбцы pg_prepared_statements

Столбец Тип
Описание
name text
Идентификатор подготовленного оператора
statement text
Строка запроса, отправленная клиентом для создания этого подготовленного оператора. Для подготовленных операторов, созданных посредством SQL, это команда PREPARE, инициализированная клиентом. Для подготовленных операторов, созданных посредством клиент-серверного протокола, это текст самого подготовленного оператора.
prepare_time timestamptz
Время, когда был создан подготовленный оператор
parameter_types regtype[]
Ожидаемые типы параметров для подготовленного оператора в виде массива regtype. OID, соответствующий элементу этого массива, можно получить путем приведения значения regtype к типу oid.
from_sql bool
true, если подготовленный оператор был создан посредством команды SQL PREPARE; false, если оператор был подготовлен посредством клиент-серверного протокола
generic_plans int8
Сколько раз был выбран типовой план
qual text
Выражение, добавляемое к условиям барьера безопасности для запросов, к которым применяется эта политика
custom_plans int8
Сколько раз был выбран пользовательский план

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


pg_prepared_xacts

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

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

Таблица 79. Столбцы pg_prepared_xacts

Столбец Тип
Описание
transaction xid
Числовой идентификатор подготовленной транзакции
gid text
Глобальный идентификатор транзакции, который был присвоен транзакции
prepared timestamptz
Время, когда транзакция была подготовлена к фиксации
owner name (ссылается на pg_authid.rolname)
Имя пользователя, выполнившего транзакцию
database name (ссылается на pg_database.datname)
Имя базы данных, в которой была выполнена транзакция

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


pg_publication_tables

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

Таблица 80. Столбцы pg_publication_tables

Столбец Тип
Описание
pubname name (ссылается на pg_publication.pubname)
Имя публикации
schemaname name (ссылается на pg_namespace.nspname)
Имя схемы, содержащей таблицу
tablename name (ссылается на pg_class.relname)
Имя таблицы

pg_replication_origin_status

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

Таблица 81. Столбцы pg_replication_origin_status

Столбец Тип
Описание
local_id oid (ссылается на pg_replication_origin.roident)
Внутренний идентификатор узла
external_id text (ссылается на pg_replication_origin.roname)
Внешний идентификатор узла
remote_lsn pg_lsn
LSN исходного узла, до которого были реплицированы данные.
local_lsn pg_lsn
LSN этого узла, в котором был реплицирован remote_lsn. Используется при асинхронной фиксации для сброса записей фиксации на диск перед сохранением данных.

pg_replication_slots

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

Подробную информацию о слотах репликации см. в подразделе Слоты репликации и главе Логическое декодирование.

Таблица 82. Столбцы pg_replication_slots

Столбец Тип
Описание
slot_name name
Уникальный на уровне кластера идентификатор для слота репликации
plugin name (ссылается на pg_database.oid)
Базовое имя разделяемого объекта, который содержит плагин вывода, используемого этим логическим слотом, или NULL для физических слотов.
slot_type text
Тип слота: physical (физический) или logical (логический)
datoid oid (ссылается на pg_database.oid)
OID базы данных, с которой связан этот слот, или NULL. Только логические слоты могут иметь связанную базу данных.
database text (ссылается на pg_database.datname)
Имя базы данных, с которой связан этот слот, или NULL. Только логические слоты могут иметь связанную базу данных.
virtualxid text
Виртуальный идентификатор транзакции, на которую нацелена блокировка, или NULL, если цель не является виртуальным идентификатором транзакции
temporary bool
True, если это слот временной репликации. Временные слоты не сохраняются на диске и автоматически удаляются при ошибке или по завершении сеанса.
active bool
True, если этот слот в настоящий момент активно используется
active_pid int4
Идентификатор процесса сеанса, использующего этот слот, если тот в настоящий момент активно используется. NULL, если слот неактивен.
xmin xid
Старейшая транзакция, которую должна сохранить база данных для этого слота. Команда VACUUM не может убрать кортежи, удаленные более поздними транзакциями.
catalog_xmin xid
Старейшая транзакция, влияющая на системные каталоги, которую должна сохранить база данных для этого слота. Команда VACUUM не сможет убрать кортежи каталогов, удаленные удаленные более поздними транзакциями.
restart_lsn pg_lsn
Адрес (LSN) старейшей записи в WAL, которая все еще может понадобиться пользователю этого слота и поэтому не будет автоматически удаляться во время контрольных точек, если только этот LSN не отстает более чем на max_slot_wal_keep_size от текущего. NULL, если LSN этого слота никогда не был зарезервирован.
confirmed_flush_lsn pg_lsn
Адрес (LSN), до которого потребитель логического слота подтвердил получение данных. Данные старше этого LSN уже не доступны. NULL для физических слотов.
wal_status text
Состояние файлов WAL, затребованных этим слотом. Возможные значения:
  • reserved (резерв) означает, что объем затребованных файлов не выходит за пределы max_wal_size.
  • extended (превышение) означает, что предел max_wal_size превышен, но файлы все еще сохраняются благодаря либо слоту репликации, либо тому, что не превышают wal_keep_size.
  • unreserved (нет резерва) означает, что слот больше не сохраняет требуемые файлы WAL и некоторые из них будут удалены при следующей контрольной точке. Это состояние может смениться на reserved или extended.
  • lost (потеря) означает, что какие-либо из требуемых файлов WAL были удалены и данный слот уже нельзя использовать.
Последние два значения можно увидеть только при неотрицательном значении max_slot_wal_keep_size. Если restart_lsn содержит NULL, это поле тоже содержит NULL.
safe_wal_size int8
Объем в байтах, который может быть записан в WAL, чтобы этому слоту не грозила опасность оказаться в состоянии «lost». Для потерянных слотов, а также при max_slot_wal_keep_size равном -1 это поле содержит NULL.
two_phase bool
True, если этот слот задействован в декодировании подготовленных транзакций. Всегда false для физических слотов.

pg_roles

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

Таблица 83. Столбцы pg_roles

Столбец Тип
Описание
rolname name
Имя роли
rolsuper bool
Роль обладает правами суперпользователя
rolinherit bool
Роль автоматически наследует права ролей, членом которых является
rolcreaterole bool
Роль может создавать другие роли
rolcreatedb bool
Роль может создавать базы данных
rolcanlogin bool
Роль может начинать сеанс. То есть эта роль может быть задана в качестве начального идентификатора авторизации сеанса
rolreplication bool
Роль является ролью репликации. Роль репликации может инициировать подключения репликации и создавать и удалять слоты репликации.
rolconnlimit int4
Для ролей, которые могут начинать сеанс, этот столбец устанавливает максимальное число одновременных подключений, которые может создать эта роль. -1 означает отсутствие ограничений.
rolpassword text
Не пароль (всегда читается как ********)
rolvaliduntil timestamptz
Срок действия пароля (используется только для аутентификации по паролю); NULL, если срок действия не ограничен
rolbypassrls bool
Роль обходит любую политику защиты на уровне строк; подробную информацию см. в разделе Политики защиты строк.
rolconfig text[]
Специфичные для роли значения по умолчанию переменных конфигурации времени выполнения
oid oid (ссылается на pg_authid.oid)
Идентификатор роли

pg_rules

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

Таблица 84. Столбцы pg_rules

Столбец Тип
Описание
schemaname name (ссылается на pg_namespace.nspname)
Имя схемы, содержащей таблицу
tablename name (ссылается на pg_class.relname)
Имя таблицы, для которой предназначено это правило
rulename name (ссылается на pg_rewrite.rulename)
Имя правила
definition text
Определение правила (реконструированная команда создания)

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

pg_seclabels

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

Таблица 85. Столбцы pg_seclabels

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

pg_sequences

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

Таблица 86. Столбцы pg_sequences

Столбец Тип
Описание
schemaname name (ссылается на pg_namespace.nspname)
Имя схемы, содержащей последовательность
sequencename name (ссылается на pg_class.relname)
Имя последовательности
sequenceowner name (ссылается на pg_authid.rolname)
Имя владельца последовательности
data_type regtype (ссылается на pg_type.oid)
Тип данных последовательности
start_value int8
Начальное значение последовательности
min_value int8
Минимальное значение последовательности
max_value int8
Максимальное значение последовательности
increment_by int8
Значение приращения последовательности
cycle bool
Зацикливается ли последовательность
cache_size int8
Размер кэша последовательности
last_value int8
Последнее значение последовательности, записанное на диск. Если используется кэширование, это значение может быть больше, чем последнее значение, полученное из последовательности. Содержит NULL, если последовательность еще не была прочитана. Кроме того, значением будет NULL, если текущий пользователь не имеет для последовательности прав USAGE или SELECT.

pg_settings

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

Таблица 87. Столбцы pg_settings

Столбец Тип
Описание
name text
Имя параметра конфигурации времени выполнения
setting text
Текущее значение параметра
unit text
Неявно подразумеваемая единица измерения параметра
category text
Логическая группа параметра
short_desc text
Краткое описание параметра
extra_desc text
Дополнительное, более детальное, описание параметра
context text
Контекст, необходимый для установки значения параметра (см. ниже)
vartype text
Тип параметра (bool, enum, integer, real или string)
source text
Источник текущего значения параметра
min_val text
Минимальное допустимое значение параметра (NULL для нечисловых значений)
max_val text
Максимально допустимое значение параметра (NULL для нечисловых значений)
enumvals text[]
Допустимые значения перечислимого параметра (NULL для неперечислимых значений)
boot_val text
Значение параметра, присваиваемое при запуске сервера, если параметр не задан иным образом
reset_val text
Значение, в которое параметр будет сброшен командой RESET в текущем сеансе
sourcefile text
Файл конфигурации, в котором было установлено текущее значение (NULL для значений, полученных не из файлов конфигурации, или при проверке пользователем, который не является ни суперпользователем, ни членом роли pg_read_all_settings); полезно при использовании предписаний include в файлах конфигурации
sourceline int4
Номер строки в файле конфигурации, в которой было задано текущее значение (NULL для значений, полученных не из файлов конфигурации, или при проверке пользователем, который не является ни суперпользователем, ни членом роли pg_read_all_settings).
pending_restart bool
true, если значение было изменено в файле конфигурации, но требуется перезапуск; иначе — false.

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

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

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

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

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

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

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

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

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

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

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


pg_shadow

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

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

Таблица 88. Столбцы pg_shadow

Столбец Тип
Описание
usename name (ссылается на pg_authid.rolname)
Имя пользователя
usesysid oid (ссылается на pg_authid.oid)
Идентификатор этого пользователя
usecreatedb bool
Пользователь может создавать базы данных
usesuper bool
Пользователь является суперпользователем
userepl bool
Пользователь может инициировать потоковую репликацию и включать и выключать в системе режим резервного копирования.
usebypassrls bool
Пользователь обходит любую политику защиты на уровне строк; подробную информацию см. в разделе Политики защиты строк.
passwd text
Пароль (возможно зашифрованный); NULL, если пароля нет. Подробную информацию о том, как хранятся зашифрованные пароли, см. в описании каталога pg_authid.
valuntil timestamptz
Срок действия пароля (используется только для аутентификации по паролю)
useconfig text[]
Сеансовые значения по умолчанию для переменных конфигурации времени выполнения

pg_shmem_allocations

В представлении pg_shmem_allocations отображаются блоки памяти, выделенные в основном сегменте разделяемой памяти сервера. Сюда входят блоки, выделенные с использованием описанных в подразделе Разделяемая память и легкие блокировки механизмов как для самого процесса qhb, так и для расширений.

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

Таблица 89. Столбцы pg_shmem_allocations

Столбец Тип
Описание
name text
Имя блока в разделяемой памяти. NULL для неиспользуемых блоков памяти и <anonymous> для анонимных блоков.
off int8
Смещение, с которого начинается выделенный блок. NULL для анонимных блоков, так как дополнительные сведения о них неизвестны.
size int8
Размер блока
allocated_size int8
Размер блока, включая выравнивающее дополнение. Для анонимных блоков информация о дополнении недоступна, поэтому значения в столбцах size и allocated_size всегда равны. Для свободной памяти объем дополнения не имеет смысла, так что в этом случае столбцы тоже будут содержать одинаковые значения.

Анонимными считаются блоки, выделенные непосредственно функцией ShmemAlloc(), а не функцией ShmemInitStruct() или ShmemInitHash().

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


pg_stats

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

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

Таблица 90. Столбцы pg_stats

Столбец Тип
Описание
schemaname name (ссылается на pg_namespace.nspname)
Имя схемы, содержащей таблицу
tablename name (ссылается на pg_class.relname)
Имя таблицы
attname name (ссылается на pg_attribute.attname)
Имя столбца, описываемого этой строкой
inherited bool
Если true, то эта строка включает дочерние столбцы наследования, а не только значения в указанной таблице
null_frac float4
Доля записей столбца, имеющих значение NULL
avg_width int4
Средняя ширина записей столбца в байтах
n_distinct float4
Если больше нуля, то показывает примерное количество уникальных значений в столбце. Если меньше нуля, то модуль числа показывает количество уникальных значений, разделенное на количество строк. (Отрицательная форма используется, когда команда ANALYZE считает, что количество уникальных значений, вероятно, будет увеличиваться по мере роста таблицы; положительная форма используется, когда считается, что столбец имеет фиксированное количество возможных значений.) Например, значение -1 указывает на уникальный столбец, в котором количество уникальных значений совпадает с количеством строк.
most_common_vals anyarray
Список наиболее распространенных значений в столбце. (NULL, если значения, встречающиеся чаще других, не обнаруживаются.)
most_common_freqs float4[]
Список частот наиболее распространенных значений, т. е. количество вхождений каждого значения, деленное на общее количество строк. (NULL, если поле most_common_vals содержит NULL.)
histogram_bounds anyarray
Список значений, разделяющих значения столбца на группы примерно одинаковой популяции. Значения поля most_common_vals, если они присутствуют, исключаются из этого расчета гистограммы. (Этот столбец содержит NULL, если тип данных столбца не имеет оператора < или если список most_common_vals охватывает всю популяцию.)
correlation float4
Статистическая корреляция между физическим порядком строк и логическим порядком значений столбцов. Диапазон допустимых значений: от -1 до +1. Когда значение близко к -1 или +1, сканирование индекса по столбцу будет считаться дешевле, чем когда оно близко к нулю, вследствие уменьшения случайного обращения к диску. (Столбец имеет значение NULL, если тип данных столбца не имеет оператора <.)
most_common_elems anyarray
Список ненулевых значений элементов, наиболее часто встречающихся в пределах значений столбца. (NULL для скалярных типов.)
most_common_elem_freqs float4[]
Список частот наиболее распространенных значений элементов, т. е. доля строк, содержащих хотя бы один экземпляр данного значения. За частотами каждого элемента следуют два или три дополнительных значения; это минимум и максимум предыдущих частот каждого элемента и (необязательно) частота элементов NULL. (NULL, если поле most_common_elems содержит NULL.)
elem_count_histogram float4[]
Гистограмма количеств уникальных значений элементов, отличных от NULL, в пределах значений столбца, за которой следует среднее количество различных элементов, отличных от NULL. (NULL для скалярных типов.)

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


pg_stats_ext

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

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

Таблица 91. Столбцы pg_stats_ext

Столбец Тип
Описание
schemaname name (ссылается на pg_namespace.nspname)
Имя схемы, содержащей таблицу
tablename name (ссылается на pg_class.relname)
Имя таблицы
statistics_schemaname name (ссылается на pg_namespace.nspname)
Имя схемы, содержащей объект расширенной статистики
statistics_name name (ссылается на pg_statistic_ext.stxname)
Имя объекта расширенной статистики
statistics_owner oid (ссылается на pg_authid.oid)
Владелец объекта расширенной статистики
attnames name[] (ссылается на pg_attribute.attname)
Имена столбцов, включенных в объект расширенной статистики
exprs text[]
Выражения, включенные в объект расширенной статистики
kinds text[]
Типы объектов расширенной статистики, включенные для этой записи
n_distinct pg_ndistinct
Количество различных комбинаций значений столбцов. Если больше нуля, то показывает примерное число уникальных значений в комбинации. Если меньше нуля, то модуль числа показывает количество уникальных значений, разделенное на число строк. (Отрицательная форма используется, когда команда ANALYZE считает, что количество уникальных значений, вероятно, будет увеличиваться по мере роста таблицы; положительная форма используется, когда считается, что столбец имеет фиксированное количество возможных значений.) Например, значение -1 указывает на уникальный столбец, в котором количество уникальных значений совпадает с количество строк.
dependencies pg_dependencies
Статистика для функциональной зависимости
most_common_vals text[]
Список наиболее распространенных комбинаций значений в столбцах. (NULL, если комбинации, встречающиеся чаще других, не обнаруживаются.)
most_common_val_nulls bool[]
Список флагов NULL для наиболее распространенных комбинаций значений. (NULL, если поле most_common_vals содержит NULL)
most_common_freqs float8[]
Список частот наиболее распространенных комбинаций, т. е. количество вхождений каждой, деленное на общее количество строк. (NULL, если поле most_common_vals содержит NULL)
most_common_base_freqs float8[]
Список базовых частот наиболее распространенных комбинаций, т. е. произведение частот отдельных значений. (NULL, если поле most_common_vals содержит NULL)

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


pg_stats_ext_exprs

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

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

Таблица 92. Столбцы pg_stats_ext_exprs

Столбец Тип
Описание
schemaname name (ссылается на pg_namespace.nspname)
Имя схемы, содержащей таблицу
tablename name (ссылается на pg_class.relname)
Имя таблицы, для которой определен объект статистики
statistics_schemaname name (ссылается на pg_namespace.nspname)
Имя схемы, содержащей объект расширенной статистики
statistics_name name (ссылается на pg_statistic_ext.stxname)
Имя объекта расширенной статистики
statistics_owner oid (ссылается на pg_authid.oid)
Владелец объекта расширенной статистики
expr text
Выражение, включенное в объект расширенной статистики
null_frac float4
Доля записей выражения, содержащих NULL
avg_width int4
Средний размер записей выражения в байтах
n_distinct float4
Если больше нуля, то показывает примерное число уникальных значений в выражении. Если меньше нуля, то модуль числа показывает количество уникальных значений, разделенное на число строк. (Отрицательная форма используется, когда команда ANALYZE считает, что количество уникальных значений, вероятно, будет увеличиваться по мере роста таблицы; положительная форма используется, когда считается, что выражение имеет фиксированное количество возможных значений.) Например, значение -1 указывает на уникальное выражение, в котором количество уникальных значений совпадает с количество строк.
most_common_vals anyarray
Список наиболее распространенных значений в выражении. (NULL, если значения, встречающиеся чаще других, не обнаруживаются.)
most_common_freqs float4[]
Список частот наиболее распространенных значений, т. е. число их вхождений, разделенное на общее число строк. (NULL, если поле most_common_vals содержит NULL)
histogram_bounds anyarray
Список значений, разделяющих значения выражения на группы примерно одинаковой популяции. Значения поля most_common_vals, если они присутствуют, исключаются из этого расчета гистограммы. (Этот столбец содержит NULL, если тип данных выражения не имеет оператора < или если список most_common_vals охватывает всю популяцию.)
correlation float4
Статистическая корреляция между физическим порядком строк и логическим порядком значений выражения. Диапазон допустимых значений: от -1 до +1. Когда значение близко к -1 или +1, сканирование индекса по выражению будет считаться дешевле, чем когда это значение близко к нулю, вследствие уменьшения случайного обращения к диску. (Это выражение содержит NULL, если если тип данных выражения не имеет оператора <.)
most_common_elems anyarray
Список элементов, отличных от NULL, наиболее часто встречающихся в значениях выражения. (NULL для скалярных типов.)
most_common_elem_freqs float4[]
Список частот наиболее распространенных элементов, т. е. доля строк, содержащих как минимум одно вхождение данного значения. За частотами по элементам следуют два или три дополнительных значения: минимум и максимум предшествующих частот по элементам и, при необходимости, частота элементов NULL. (NULL, если поле most_common_elems содержит NULL.)
elem_count_histogram float4[]
Гистограмма количеств различных элементов, отличных от NULL, в значениях выражения, за которой следует среднее количество элементов, отличных от NULL. (NULL для скалярных типов.)

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


pg_tables

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

Таблица 93. Столбцы pg_tables

Столбец Тип
Описание
schemaname name (ссылается на pg_namespace.nspname)
Имя схемы, содержащей таблицу
tablename name (ссылается на pg_class.relname)
Имя таблицы
tableowner name (ссылается на pg_authid.rolname)
Имя владельца таблицы
tablespace name[] (ссылается на pg_tablespace.spcname)
Имя табличного пространства, содержащего таблицу (NULL, если это табличное пространство по умолчанию для базы данных)
hasindexes bool (ссылается на pg_class.relhasindex)
True, если таблица имеет (или недавно имела) какие-либо индексы
hasrules bool (ссылается на pg_class.relhasrules)
True, если таблица имеет (или когда-то имела) правила
hastriggers bool (ссылается на pg_class.relhastriggers)
True, если таблица имеет (или когда-то имела) триггеры
rowsecurity bool (ссылается на pg_class.relrowsecurity)
True, если в таблице включена защита на уровне строк

pg_timezone_abbrevs

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

Таблица 94. Столбцы pg_timezone_abbrevs

Столбец Тип
Описание
abbrev text
Аббревиатура часового пояса
utc_offset interval
Смещение от UTC (положительное значение означает к востоку от Гринвича)
is_dst bool
True, если это аббревиатура летнего времени

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


pg_timezone_names

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

Таблица 95. Столбцы pg_timezone_names

Столбец Тип
Описание
name text
Название часового пояса
abbrev text
Аббревиатура часового пояса
utc_offset interval
Смещение от UTC (положительное значение означает к востоку от Гринвича)
is_dst bool
True, если в данный момент установлено летнее время

pg_user

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

Таблица 96. Столбцы pg_user

Столбец Тип
Описание
usename name
Имя пользователя
usesysid oid
Идентификатор этого пользователя
usecreatedb bool
Пользователь может создавать базы данных
usesuper bool
Пользователь является суперпользователем
userepl bool
Пользователь может инициировать потоковую репликацию и включать и выключать режим резервного копирования в системе.
usebypassrls bool
Пользователь обходит каждую политику защиты на уровне строк; подробную информацию см. в разделе Политики защиты строк.
passwd text
Не пароль (всегда читается как ********)
valuntil timestamptz
Срок действия пароля (используется только при аутентификации по паролю)
useconfig text[]
Сеансовые значения по умолчанию для переменных конфигурации времени выполнения

pg_user_mappings

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

Таблица 97. Столбцы pg_user_mappings

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

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

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

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

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


pg_views

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

Таблица 98. Столбцы pg_views

Столбец Тип
Описание
schemaname name (ссылается на pg_namespace.nspname)
Имя схемы, содержащей представление
viewname name (ссылается на pg_class.relname)
Имя представления
viewowner name (ссылается на pg_authid.rolname)
Имя владельца представления
definition text
Определение представления (реконструированный запрос SELECT)