Системные каталоги
Системные каталоги — это место, где система управления реляционными базами
данных хранит метаданные схемы, например сведения о таблицах и столбцах, а также
внутреннюю служебную информацию. Системные каталоги QHB
— это обычные таблицы. Их можно удалить и пересоздать, добавить столбцы, вставить
и изменить значения — и тем самым сильно испортить свою систему. В большинстве
случаев не следует изменять системные каталоги вручную, для этого обычно существуют
команды SQL. (Например, команда CREATE DATABASE
добавляет строку в каталог
pg_database — и действительно создает базу данных на диске.) Есть некоторые
исключения для особенно сложных операций, но многие из них с течением времени
становятся доступны в виде команд SQL, и поэтому необходимость в прямом
манипулировании системными каталогами постоянно уменьшается.
Обзор
В Таблице 1 перечислены системные каталоги. Более подробная документация по каждому каталогу приводится ниже.
Большинство системных каталогов копируются из шаблона базы данных во время ее создания и затем зависят от конкретной базы данных. Несколько каталогов физически совместно используются во всех базах данных в кластере; они отмечаются в описаниях отдельных каталогов.
Таблица 1. Системные каталоги
Имя каталога | Назначение |
---|---|
pg_aggregate | агрегатные функции |
pg_am | методы доступа отношений |
pg_amop | операторы метода доступа |
pg_amproc | вспомогательные функции метода доступа |
pg_attrdef | значения столбцов по умолчанию |
pg_attribute | столбцы таблицы («атрибуты») |
pg_authid | идентификаторы авторизации (роли) |
pg_auth_members | отношения членства идентификаторов авторизации |
pg_cast | приведения (преобразования типов данных) |
pg_class | таблицы, индексы, последовательности, представления («отношения») |
pg_collation | правила сортировки (сведения о локали) |
pg_constraint | проверочные ограничения, ограничения уникальности, ограничения первичного ключа, ограничения внешнего ключа |
pg_conversion | информация о перекодировках |
pg_database | базы данных в этом кластере |
pg_db_role_setting | параметры на уровне ролей и баз данных |
pg_default_acl | права доступа по умолчанию для типов объектов |
pg_depend | зависимости между объектами базы данных |
pg_description | описания или комментарии для объектов базы данных |
pg_enum | определения перечислимых меток и значений |
pg_event_trigger | триггеры событий |
pg_extension | установленные расширения |
pg_foreign_data_wrapper | определения оберток сторонних данных |
pg_foreign_server | определения сторонних серверов |
pg_foreign_table | дополнительная информация по сторонним таблицам |
pg_index | дополнительная информация по индексам |
pg_inherits | иерархия наследования таблиц |
pg_init_privs | начальные права для объектов |
pg_language | языки для написания функций |
pg_largeobject | страницы данных для больших объектов |
pg_largeobject_metadata | метаданные для больших объектов |
pg_namespace | схемы |
pg_opclass | классы операторов методов доступа |
pg_operator | операторы |
pg_opfamily | семейства операторов методов доступа |
pg_parameter_acl | параметры конфигурации, для которых были предоставлены права |
pg_partitioned_table | информация о ключе разбиения таблиц |
pg_policy | политики защиты на уровне строк |
pg_proc | функции и процедуры |
pg_publication | публикации для логической репликации |
pg_publication_namespace | сопоставление схем с публикациями |
pg_publication_rel | сопоставление отношений с публикациями |
pg_range | информация о типах диапазонов |
pg_replication_origin | зарегистрированные источники репликации |
pg_rewrite | правила переписывания запросов |
pg_seclabel | метки безопасности для объектов базы данных |
pg_sequence | информация о последовательностях |
pg_shdepend | зависимости для разделяемых объектов |
pg_shdescription | комментарии к разделяемым объектам |
pg_shseclabel | метки безопасности для разделяемых объектов базы данных |
pg_statistic | статистика планировщика |
pg_statistic_ext | расширенная статистика планировщика (определение) |
pg_statistic_ext_data | расширенная статистика планировщика (собранная статистика) |
pg_subscription | подписки на логическую репликацию |
pg_subscription_rel | состояние отношений для подписок |
pg_tablespace | табличные пространства в этом кластере баз данных |
pg_transform | трансформации (преобразования типов данных для процедурных языков) |
pg_trigger | триггеры |
pg_ts_config | конфигурации текстового поиска |
pg_ts_config_map | сопоставления синтаксических единиц конфигураций текстового поиска |
pg_ts_dict | словари текстового поиска |
pg_ts_parser | синтаксические анализаторы текстового поиска |
pg_ts_template | шаблоны текстового поиска |
pg_type | типы данных |
pg_user_mapping | сопоставления пользователей для сторонних серверов |
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, указывая, что количество строк неизвестно. |
||
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 text | ||
LC_COLLATE для этого объекта правила сортировки | ||
collctype text | ||
LC_CTYPE для этого объекта правила сортировки | ||
colliculocale text | ||
Идентификатор локали ICU для этого объекта правила сортировки | ||
collversion text | ||
Версия правила сортировки, специфическая для поставщика данных. Записывается при создании правила сортировки, а затем проверяется при его использовании для обнаружения изменений в его определении, которые могут привести к повреждению данных. |
Обратите внимание, что уникальными ключами в этом каталоге являются (collname, collencoding, collnamespace), а не только (collname, collnamespace). QHB обычно игнорирует все правила сортировки, у которых поле collencoding не равно либо кодировке текущей базы данных, либо -1; кроме того, создание новых записей с тем же именем, что и запись с collencoding = -1, запрещено. Поэтому для обозначения правила сортировки достаточно использовать полное имя SQL (схема.имя), даже если оно не является уникальным согласно определению каталога. Такое определение каталога обусловлено тем, что во время инициализации кластера qhb_bootstrap (или initdb) заполняет его записями для всех доступных в системе локалей, поэтому каталог должен иметь возможность хранить записи для всех кодировок, которые могут когда-либо использоваться в кластере.
В базе данных template0 может быть полезно создать правила сортировки, кодировка которых не соответствует кодировке базы данных, так как они могут соответствовать кодировкам баз данных, впоследствии клонированных из template0. В настоящее время это придется сделать вручную.
pg_constraint
В каталоге pg_constraint хранятся проверочные и исключающие ограничения, ограничения уникальности, первичного и внешнего ключей для таблиц. (Ограничения столбцов не обрабатываются отдельно. Каждое ограничение столбца эквивалентно некоторому ограничению таблицы.) Ограничения NOT NULL представлены не здесь, а в каталоге pg_attribute.
Определяемые пользователем триггеры ограничений (созданные с помощью команды
CREATE CONSTRAINT TRIGGER
) тоже приводят к появлению записи в этой таблице.
Также здесь хранятся проверочные ограничения для доменов.
Таблица 13. Столбцы pg_constraint
Столбец Тип |
||
---|---|---|
Описание |
||
oid oid | ||
Идентификатор строки | ||
conname name | ||
Имя ограничения (необязательно уникальное!) | ||
connamespace oid (ссылается на pg_namespace.oid) | ||
OID пространства имен, содержащего это ограничение | ||
contype 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 | ||
confdelsetcols int2[] (ссылается на pg_attribute.attnum) | ||
Для внешнего ключа с указанием действия SET NULL или SET DEFAULT при удалении — столбцы, которые будут изменены. При значении NULL будут изменены все столбцы, на которые ссылается ключ. | ||
conexclop oid[] (ссылается на pg_operator.oid) | ||
Для исключающего ограничения — список операторов исключения по столбцам | ||
conbin pg_node_tree | ||
Для проверочного ограничения — внутреннее представление выражения. (Чтобы извлечь определение проверочного ограничения, рекомендуется использовать функцию pg_get_constraintdef().) |
В случае исключающего ограничения поле conkey полезно только для элементов ограничения, которые являются простыми ссылками на столбец. Для других случаев в conkey находится ноль, и чтобы обнаружить выражение, определяющее ограничение, необходимо просмотреть связанный индекс. (Следовательно, поле conkey имеет то же содержимое, что и поле pg_index.indkey для индекса.)
Примечание
Поле pg_class.relchecks необходимо согласовать с количеством записей проверочного ограничения, имеющихся в этой таблице для каждого отношения.
pg_conversion
В каталоге pg_conversion описываются функции преобразования кодировки.
Подробную информацию см. на справочной странице команды CREATE CONVERSION
.
Таблица 14. Столбцы pg_conversion
Столбец Тип |
||
---|---|---|
Описание |
||
oid oid | ||
Идентификатор строки | ||
conname name | ||
Имя преобразования (уникальное в пределах пространства имен) | ||
connamespace oid (ссылается на pg_namespace.oid) | ||
OID пространства имен, содержащего это преобразование | ||
conowner oid (ссылается на pg_authid.oid) | ||
Владелец преобразования | ||
conforencoding int4 | ||
Идентификатор исходной кодировки (функция pg_encoding_to_char() может преобразовать этот номер в имя кодировки) | ||
contoencoding int4 | ||
Идентификатор целевой кодировки (функция pg_encoding_to_char() может преобразовать этот номер в имя кодировки) | ||
conproc regproc (ссылается на pg_proc.oid) | ||
Функция преобразования | ||
condefault 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() может преобразовать этот номер в имя кодировки) | ||
datlocprovider char | ||
Провайдер локали для этой базы данных: c = libc, i = icu | ||
datistemplate bool | ||
Если true, то эту базу данных может клонировать любой пользователь, обладающий правом CREATEDB; если false, то клонировать ее могут только суперпользователи или владелец этой базы данных. | ||
datallowconn bool | ||
Если false, то никто не может подключиться к этой базе данных. Используется для защиты базы-шаблона template0 от изменений. | ||
datconnlimit int4 | ||
Устанавливает максимальное число одновременных подключений, которые могут быть выполнены к этой базе данных. -1 означает отсутствие ограничений. | ||
datfrozenxid xid | ||
В этой базе данных все идентификаторы транзакций, предшествующие данному, были заменены на постоянный («замороженный») идентификатор транзакции. Это используется для отслеживания того, нужно ли очистить таблицу для предотвращения зацикливания идентификаторов транзакций или уменьшения размера pg_xact. Это минимальные значения поля pg_class.relfrozenxid для всех таблиц. | ||
datminmxid xid | ||
В этой базе данных все идентификаторы мультитранзакций, предшествующие данному, были заменены на другой идентификатор транзакции. Это используется для отслеживания того, нужно ли очистить таблицу для предотвращения зацикливания идентификаторов мультитранзакций или уменьшения размера pg_multixact. Это минимальные значения поля pg_class.relminmxid для всех таблиц. | ||
dattablespace oid (ссылается на pg_tablespace.oid) | ||
Табличное пространство по умолчанию для этой базы данных. В пределах этой базы данных все таблицы, у которых поле pg_class.reltablespace равно нулю, будут храниться в этом табличном пространстве (в частности, там будут находиться все системные каталоги, кроме разделяемых). | ||
datcollate text | ||
LC_COLLATE для этой базы данных | ||
datctype text | ||
LC_CTYPE для этой базы данных | ||
daticulocale text | ||
Идентификатор локали ICU для этой базы данных | ||
datcollversion text | ||
Версия правила сортировки, специфическая для поставщика данных. Записывается при создании правила сортировки, а затем проверяется при его использовании для обнаружения изменений в его определении, которые могут привести к повреждению данных. | ||
datacl aclitem[] | ||
Права доступа; подробную информацию см. в разделе Права |
pg_db_role_setting
В каталоге pg_db_role_setting для каждой комбинации роли и базы данных записываются значения по умолчанию, заданные для переменных конфигурации времени выполнения.
В отличие от большинства системных каталогов, pg_db_role_setting совместно используется всеми базами данных кластера: существует только одна копия pg_db_role_setting на кластер, а не отдельная для каждой базы данных.
Таблица 16. Столбцы pg_db_role_setting
Столбец Тип |
||
---|---|---|
Описание |
||
setdatabase oid (ссылается на pg_database.oid) | ||
OID базы данных, к которой применяется эта настройка переменных, или ноль, если она не специфична для конкретной базы данных | ||
setrole oid (ссылается на pg_authid.oid) | ||
OID роли, к которой применяется эта настройка переменных, или ноль, если она не специфична для конкретной роли | ||
setconfig text[] | ||
Значения по умолчанию для переменных конфигурации времени выполнения |
pg_default_acl
В каталоге pg_default_acl хранятся права, изначально присваиваемые только что созданным объектам.
Таблица 17. Столбцы pg_default_acl
Столбец Тип |
||
---|---|---|
Описание |
||
oid oid | ||
Идентификатор строки | ||
defaclrole oid (ссылается на pg_authid.oid) | ||
OID роли, связанной с этой записью | ||
defaclnamespace oid (ссылается на pg_namespace.oid) | ||
OID пространства имен, связанного с этой записью, или ноль, если такового нет | ||
defaclobjtype char | ||
Тип объекта, для которого эта запись предназначена: r = отношение (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 системного каталога, в котором находится зависимый объект | ||
objid oid (ссылается на какой-либо столбец OID) | ||
OID конкретного зависимого объекта | ||
objsubid int4 | ||
Для столбца таблицы это номер столбца (поля objid и classid ссылаются на саму таблицу). Для всех остальных типов объектов этот столбец содержит ноль. | ||
refclassid oid (ссылается на pg_class.oid) | ||
OID системного каталога, в котором находится ссылочный объект | ||
refobjid oid (ссылается на какой-либо столбец OID) | ||
OID конкретного ссылочного объекта | ||
refobjsubid int4 | ||
Для столбца таблицы это номер столбца (поля refobjid и refclassid ссылаются на саму таблицу). Для всех остальных типов объектов этот столбец содержит ноль. | ||
deptype char | ||
Код, определяющий конкретную семантику этого отношения зависимости; см. текст ниже |
Во всех случаях запись в pg_depend указывает, что ссылочный объект нельзя удалить, не удалив зависимый объект. Тем не менее есть несколько подвидов зависимостей, задаваемых в поле deptype:
DEPENDENCY_NORMAL (n)
Обычное отношение между раздельно созданными объектами. Зависимый объект можно
удалить, не затрагивая ссылочный объект. Последний можно удалить только путем
указания CASCADE, и в этом случае зависимый объект также удаляется. Пример:
столбец таблицы имеет нормальную зависимость от своего типа данных.
DEPENDENCY_AUTO (a)
Зависимый объект можно быть удален отдельно от ссылочного и должен быть
автоматически удален (вне зависимости от режима RESTRICT или CASCADE) при
удалении ссылочного объекта. Пример: именованное ограничение для таблицы становится
автоматически зависимым от таблицы, поэтому если таблица будет удалена, оно исчезнет.
DEPENDENCY_INTERNAL (i)
Зависимый объект был создан как часть ссылочного и на самом деле является только
частью его внутренней реализации. Удаление такого зависимого объекта напрямую при
помощи DROP
будет сразу же запрещено (вместо этого пользователю будет выдано
сообщение о необходимости вызвать DROP
для ссылочного объекта). Удаление ссылочного
объекта приведет к автоматическому удалению зависимого объекта вне зависимости от
наличия указания CASCADE. Если зависимый объект нужно удалить из-за зависимости
от какого-либо другого удаляемого объекта, его удаление преобразуется в удаление
ссылочного объекта, поэтому зависимости NORMAL и AUTO зависимого объекта
ведут себя так же, как и зависимости ссылочного объекта. Пример: правило ON SELECT
для представления становится внутренне зависимым от этого представления, что
предотвращает удаление правила, пока существует представление. Зависимости для этого
правила (например таблицы, на которые оно ссылается) действуют так, как если бы они
были зависимостями представления.
DEPENDENCY_PARTITION_PRI (P)
DEPENDENCY_PARTITION_SEC (S)
Зависимый объект был создан как часть ссылочного и на самом деле является только
частью его внутренней реализации; однако, в отличие от INTERNAL, существует
более одного такого ссылочного объекта. Зависимый объект не должен удаляться, пока
не будет удален хотя бы один из этих объектов; если какой-либо из них удаляется,
зависимый объект должен удаляться вне зависимости от наличия указания CASCADE.
Также, в отличие от INTERNAL, удаление некоторого другого объекта, от которого
зависит объект, не приводит к автоматическому удалению какого-либо партиционно-
ссылочного объекта. Следовательно, если удаление каскадно не доходит хотя бы до
одного из этих объектов по какому-то другому пути, оно не произойдет. (В большинстве
случаев зависимый объект совместно использует все свои непартиционированные
зависимости, по крайней мере, с одним партиционно-ссылочным объектом, так что это
ограничение не приведет к блокированию каскадного удаления.) Первичные (PRI) и
вторичные (SEC) партиционные зависимости ведут себя одинаково, за исключением
того, что первичная зависимость предпочтительна для использования в сообщениях об
ошибках — следовательно, партиционно-зависимый объект должен иметь одну первичную
партиционную зависимость и одну или несколько вторичных. Обратите внимание, что
партиционные зависимости создаются в дополнение к любым зависимостям, которые обычно
имеются у объекта, а не вместо них. Это упрощает операции ATTACH/DETACH PARTITION
:
необходимо только добавить или удалить партиционные зависимости. Пример: дочерний
партиционированный индекс становится партиционно-зависимым как от своей
партиционированной таблицы, так и от родительского партиционированного индекса,
поэтому он будет удален при удалении любого из этих объектов, но не в других случаях.
Зависимость от родительского индекса является первичной, так что если пользователь
попытается удалить дочерний партиционированный индекс, в сообщении об ошибке будет
предложено вместо этого удалить родительский индекс (а не таблицу).
DEPENDENCY_EXTENSION (е)
Зависимый объект является элементом расширения, которое является его ссылочным
объектом (см. pg_extension). Зависимый объект можно удалить только с помощью
команды DROP EXTENSION
для ссылочного объекта. Функционально этот тип зависимости
действует так же, как и зависимость INTERNAL, но он хранится отдельно для
ясности и упрощения qhb_dump.
DEPENDENCY_AUTO_EXTENSION (x)
Зависимый объект не является элементом расширения, которое является его ссылочным
объектом (и поэтому не должен игнорироваться qhb_dump), но он не может
функционировать без расширения и должен автоматически удаляться при удалении
расширения. Кроме того, зависимый объект можно удалить сам по себе. Функционально
этот тип зависимости действует так же, как и зависимость AUTO, но он хранится
отдельно для ясности и упрощения qhb_dump.
В будущем могут понадобиться другие разновидности зависимости.
Обратите внимание, что два объекта вполне могут быть связаны более чем одной записью в pg_depend. Например, дочерний партиционированный индекс будет иметь зависимость партиционного типа от связанной партиционированной таблицы и автозависимость от каждого столбца той таблицы, которую он индексирует. Такая ситуация выражает объединение семантики множественной зависимости. Зависимый объект можно удалить без указания CASCADE, если какая-либо из его зависимостей удовлетворяет его условию автоматического удаления. И наоборот, должны быть выполнены все ограничения зависимостей, определяющие, какие объекты должны быть удалены вместе.
Большинство объектов, созданных во время qhb_bootstrap (или initdb), считаются «закрепленными», что означает, что сама система зависит от них. Поэтому их ни в коем случае нельзя удалять. Кроме того, зная, что закрепленные объекты не будут удалены, механизм зависимостей не утруждается созданием в pg_depend записей, показывающих зависимости от этих объектов. Таким образом, например, столб таблицы типа numeric номинально имеет зависимость NORMAL от типа данных numeric, но фактически такая запись в pg_depend не появляется.
pg_description
В каталоге pg_description хранятся дополнительные описания (комментарии)
для каждого объекта базы данных. Описания можно обрабатывать с помощью команды
COMMENT
и просматривать с помощью команд psql \d
. В начальном содержимом
pg_description представлены описания многих встроенных системных объектов.
См. также описание каталога pg_shdescription, который выполняет аналогичную функцию в отношении описаний разделяемых объектов в кластере баз данных.
Таблица 19. Столбцы pg_description
Столбец Тип |
||
---|---|---|
Описание |
||
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, то это уникальный индекс | ||
indnullsnotdistinct bool | ||
Это значение используется только для уникальных индексов. Если false, то этот уникальный индекс будет считать значения NULL различными (поэтому индекс сможет содержать в столбце несколько значений NULL; это поведение QHB по умолчанию). Если true, то уникальный индекс будет считать значения NULL одинаковыми (поэтому индекс сможет содержать в столбце только одно значение NULL). | ||
indisprimary bool | ||
Если true, то этот индекс представляет первичный ключ таблицы (в этом случае поле indisunique всегда должно иметь значение true) | ||
indisexclusion bool | ||
Если true, то этот индекс поддерживает исключающее ограничение | ||
indimmediate bool | ||
Если true, то проверка уникальности применяется сразу после вставки (неприменимо, если поле indisunique имеет значение false) | ||
indisclustered bool | ||
Если true, то последний раз данная таблица кластеризовалась по этому индексу | ||
indisvalid bool | ||
Если true, то индекс в настоящее время является допустимым для запросов. False означает, что индекс может быть неполным: он по-прежнему должен изменяться с помощью операций INSERT /UPDATE , но безопасно использовать его для запросов нельзя. Если индекс уникальный, свойство уникальности также не гарантируется. |
||
indcheckxmin bool | ||
Если true, запросы не должны использовать индекс до тех пор, пока поле xmin этой строки pg_index находится ниже их горизонта событий TransactionXmin, поскольку таблица может содержать разорванные цепочки HOT с видимыми для этих запросов несовместимыми строками | ||
indisready bool | ||
Если true, то индекс в настоящее время готов к вставкам. False означает, что индекс должен игнорироваться операциями INSERT /UPDATE . |
||
indislive bool | ||
Если false, индекс находится в процессе удаления и должен игнорироваться при любой попытке использования (включая решения о безопасности HOT) | ||
indisreplident bool | ||
Если true, то этот индекс был выбран в качестве «идентификатора реплики» с помощью команды ALTER TABLE ... REPLICA IDENTITY USING INDEX ... |
||
indkey int2vector (ссылается на pg_attribute.attnum) | ||
Это массив из значений indnatts, указывающий на столбцы таблицы, которые этот индекс обрабатывает. Например, значение 1 3 будет означать, что первый и третий столбцы таблицы составляют записи индекса. Ключевые столбцы предшествуют неключевым (включенным) столбцам. Ноль в этом массиве указывает, что соответствующий атрибут индекса является выражением по столбцам таблицы, а не просто ссылкой на столбец. | ||
indcollation oidvector (ссылается на pg_collation.oid) | ||
Для каждого столбца в ключе индекса (значения indnkeyatts) это поле содержит OID правила сортировки, используемого для индекса, или ноль, если столбец имеет несортируемый тип данных. | ||
indclass oidvector (ссылается на pg_opclass.oid) | ||
Для каждого столбца в ключе индекса (значения indnkeyatts) это поле содержит OID используемого класса операторов. Дополнительную информацию см. в описании каталога pg_opclass | ||
indoption int2vector | ||
Это массив из значений indnkeyatts, хранящих биты флагов для каждого столбца. Значение этих битов определяется индексным методом доступа. | ||
indexprs pg_node_tree | ||
Деревья выражений (в представлении nodeToString()) для атрибутов индекса, которые не являются простыми ссылками на столбец. Это список с одним элементом для каждой нулевой записи в поле indkey. NULL, если все атрибуты индекса являются простыми ссылками. | ||
indpred pg_node_tree | ||
Дерево выражений (в представлении nodeToString()) для предиката частичного индекса. NULL, если это не частичный индекс. |
pg_inherits
В каталог pg_inherits записывается информация об иерархиях наследования таблицы и индекса. Для каждой прямой связи «родитель-потомок» таблицы или индекса в базе данных существует одна запись. (Косвенное наследование можно определить, проследив цепочки записей.)
Таблица 27. Столбцы pg_inherits
Столбец Тип |
||
---|---|---|
Описание |
||
inhrelid oid (ссылается на pg_class.oid) | ||
OID дочерней таблицы или индекса | ||
inparent oid (ссылается на pg_class.oid) | ||
OID родительской таблицы или индекса | ||
inhseqno int4 | ||
Если у дочерней таблицы существует более одного прямого родителя (множественное наследование), это число указывает порядок, в котором должны располагаться наследуемые столбцы. Отсчет начинается с 1. У индексов не может быть множественного наследования, так как они могут наследоваться только при декларативном партиционировании. |
||
inhdetachpending 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_parameter_acl
В каталоге pg_parameter_acl записываются параметры конфигурации, для которых предоставлены права одной или нескольким ролям. Для параметров, для которых имеются права по умолчанию, записей не делается.
В отличие от большинства системных каталогов, pg_parameter_acl совместно используется всеми базами данных кластера: существует только одна копия pg_parameter_acl на кластер, а не отдельная для каждой базы данных.
Таблица 36. Столбцы pg_parameter_acl
Столбец Тип |
||
---|---|---|
Описание |
||
oid oid | ||
Идентификатор строки | ||
parname text | ||
Имя параметра конфигурации, для которого были предоставлены права | ||
paracl aclitem[] | ||
Права доступа; подробную информацию см. в разделе Права |
pg_partitioned_table
В каталоге pg_partitioned_table хранится информация о том, как партиционируются таблицы.
Таблица 37. Столбцы 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, если все столбцы ключа разбиения являются простыми ссылками. |
pg_policy
В каталоге pg_policy хранятся политики защиты на уровне строк для таблиц. Политика включает тип команды, к которой она применяется (возможно, это все команды), роли, к которым она применяется, выражение, вводимое в качестве требования барьера безопасности в запросы, включающие данную таблицу, и выражение, вводимое в качестве параметра WITH CHECK для запросов, которые пытаются добавить в таблицу новые записи.
Таблица 38. Столбцы pg_policy
Столбец Тип |
||
---|---|---|
Описание |
||
oid oid | ||
Идентификатор строки | ||
polname name | ||
Имя политики | ||
polrelid oid (ссылается на pg_class.oid) | ||
Таблица, к которой применяется политика | ||
polcmd char | ||
Тип команды, к которой применяется политика: r для SELECT , a для INSERT , w для UPDATE , d для DELETE или * для всех |
||
polpermissive bool | ||
Является ли эта политика разрешительной или ограничительной? | ||
polroles oid[] (ссылается на pg_authid.oid) | ||
Роли, к которым применяется политика; ноль означает PUBLIC (которая обычно является единственным элементом массива) | ||
polqual pg_node_tree | ||
Дерево выражений, добавляемое к требованиям барьеров безопасности для запросов, использующих данную таблицу | ||
polwithcheck pg_node_tree | ||
Дерево выражений, добавляемое к требованиям WITH CHECK для запросов, пытающихся добавить строки в таблицу |
Примечание
Политики, хранящиеся в каталоге pg_policy, применяются, только когда для их таблицы установлен признак pg_class.relrowsecurity.
pg_proc
В каталоге pg_proc хранится информация о простых функциях, процедурах,
агрегатных и оконных функциях (в совокупности также известных как подпрограммы).
Более подробную информацию см. на справочных страницах команд CREATE FUNCTION
и
CREATE PROCEDURE
и в разделе Пользовательские функции.
Если prokind указывает, что эта запись предназначена для агрегатной функции, в каталоге pg_aggregate должна иметься соответствующая строка.
Таблица 39. Столбцы pg_proc
Столбец Тип |
||
---|---|---|
Описание |
||
oid oid | ||
Идентификатор строки | ||
proname name | ||
Имя функции | ||
pronamespace oid (ссылается на pg_namespace.oid) | ||
OID пространства имен, содержащего эту функцию | ||
proowner oid (ссылается на pg_authid.oid) | ||
Владелец функции | ||
prolang oid (ссылается на pg_language.oid) | ||
Язык реализации или интерфейс вызова этой функции | ||
procost float4 | ||
Предполагаемая стоимость исполнения (в единицах cpu_operator_cost); если установлен признак proretset, это стоимость одной возвращенной строки | ||
prorows float4 | ||
Предполагаемое количество возвращаемых строк (ноль, если не установлен признак proretset) | ||
provariadic oid (ссылается на pg_type.oid) | ||
Тип данных элементов переменного массива параметров или ноль, если функция не принимает переменное количество параметров | ||
prosupport regproc (ссылается на pg_proc.oid) | ||
Вспомогательная функция планировщика для этой функции (см. раздел Информация по оптимизации функций) или ноль, если таковой нет | ||
prokind 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 содержатся все публикации, созданные в базе данных. Подробнее о публикациях можно узнать в разделе Публикация.
Таблица 40. Столбцы 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_namespace
В каталоге pg_publication_namespace содержатся сопоставления между схемами и публикациями в базе данных. Это сопоставления вида многие-ко-многим.
Таблица 41.Столбцы pg_publication_namespace
Столбец Тип |
||
---|---|---|
Описание |
||
oid oid | ||
Идентификатор строки | ||
pnpubid oid (ссылается на pg_publication.oid) | ||
Ссылка на публикацию | ||
pnnspid oid (ссылается на pg_namespace.oid) | ||
Ссылка на схему |
pg_publication_rel
В каталоге pg_publication_rel содержатся сопоставления между отношениями и публикациями в базе данных. Это сопоставления вида многие-ко-многим. В более понятном пользователю виде эта информация выводится в представлении pg_publication_tables.
Таблица 42. Столбцы pg_publication_rel
Столбец Тип |
||
---|---|---|
Описание |
||
oid oid | ||
Идентификатор строки | ||
prpubid oid (ссылается на pg_publication.oid) | ||
Ссылка на публикацию | ||
prrelid oid (ссылается на pg_class.oid) | ||
Ссылка на отношение | ||
prqual pg_node_tree | ||
Дерево выражений (в представлении nodeToString()) для квалифицирующего условия публикации отношения. NULL, если у публикации нет такого условия. | ||
prattrs int2vector (ссылается на pg_attribute.attnum) | ||
Это массив значений, показывающих, какие столбцы таблицы являются частью публикации. Например, значение 1 3 будет означать, что публикуются первый и третий столбцы таблицы. Значение NULL показывает, что публикуются все столбцы. |
pg_range
В каталоге pg_range хранится информация о диапазонных типах. Это дополнительная информация к записям типов в каталоге pg_type.
Таблица 43. Столбцы pg_range
Столбец Тип |
||
---|---|---|
Описание |
||
rngtypid oid (ссылается на pg_type.oid) | ||
OID диапазонного типа | ||
rngsubtype oid (ссылается на pg_type.oid) | ||
OID типа элемента (подтипа) этого диапазонного типа | ||
rngmultitypid oid (ссылается на pg_type.oid) | ||
OID мультидиапазонного типа для этого диапазонного типа | ||
rngcollation oid (ссылается на pg_collation.oid) | ||
OID правила сортировки, используемого для сравнения диапазонов, или ноль, если такового нет | ||
rngsubopc oid (ссылается на pg_opclass.oid) | ||
OID класса операторов подтипа, используемого для сравнения диапазонов | ||
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 на кластер, а не отдельная для каждой базы данных.
Таблица 44. Столбцы pg_replication_origin
Столбец Тип |
||
---|---|---|
Описание |
||
roident oid | ||
Уникальный в пределах кластера идентификатор источника репликации. Никогда не должен выходить за границы системы. | ||
roname text | ||
Определяемое пользователем внешнее имя источника репликации. |
pg_rewrite
В каталоге pg_rewrite хранятся правила перезаписи для таблиц и представлений.
Таблица 45. Столбцы pg_rewrite
Столбец Тип |
||
---|---|---|
Описание |
||
oid oid | ||
Идентификатор строки | ||
rulename name | ||
Имя правила | ||
ev_class oid (ссылается на pg_class.oid) | ||
Таблица, для которой предназначено это правило | ||
ev_type char | ||
Тип события, для которого используется это правило: 1 = SELECT , 2 = UPDATE , 3 = INSERT , 4 = DELETE |
||
ev_enabled char | ||
Задает режимы session_replication_role, при которых срабатывает это правило. О = правило срабатывает в режимах «origin» (источник) и «local» (локально), D = правило выключено (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, который выполняет ту же функцию для меток безопасности разделяемых объектов в кластере баз данных.
Таблица 46. Столбцы pg_seclabel
Столбец Тип |
||
---|---|---|
Описание |
||
objoid oid (ссылается на какой-либо столбец OID) | ||
OID объекта, к которому относится эта метка безопасности | ||
classoid oid (ссылается на pg_class.oid) | ||
OID системного каталога, в котором находится этот объект | ||
objsubid int4 | ||
Для метки безопасности по столбцу таблицы это номер столбца (поля objoid и classoid ссылаются на саму таблицу). Для всех остальных типов объектов этот столбец содержит ноль. | ||
provider text | ||
Поставщик меток безопасности, связанный с этой меткой. | ||
label text | ||
Метка безопасности, применяемая к этому объекту. |
pg_sequence
В каталоге pg_sequence содержится информация о последовательностях. Некоторые сведения о последовательностях, такие как имя и схема, находятся в каталоге pg_class.
Таблица 47. Столбцы pg_sequence
Столбец Тип |
||
---|---|---|
Описание |
||
seqrelid oid (ссылается на pg_class.oid) | ||
OID записи в каталоге pg_class для этой последовательности | ||
seqtypid oid (ссылается на pg_type.oid) | ||
Тип данных последовательности | ||
seqstart int8 | ||
Начальное значение последовательности | ||
seqincrement int8 | ||
Значение приращения последовательности | ||
seqmax int8 | ||
Максимальное значение последовательности | ||
seqmin int8 | ||
Минимальное значение последовательности | ||
seqcache int8 | ||
Размер кэша последовательности | ||
seqcycle bool | ||
Зацикливается ли последовательность |
pg_shdepend
В каталог pg_shdepend записываются отношения зависимости между объектами базы данных и разделяемыми объектами, например ролями. Эта информация позволяет QHB перед попыткой удаления этих объектов убедиться в том, что они не используются.
См. также описание каталога pg_depend, который выполняет ту же функцию для зависимостей объектов в пределах одной базы данных.
В отличие от большинства системных каталогов, pg_shdepend совместно используется всеми базами данных кластера: существует только одна копия pg_shdepend на кластер, а не отдельная для каждой базы данных.
Таблица 48. Столбцы pg_shdepend
Столбец Тип |
||
---|---|---|
Описание |
||
dbid oid (ссылается на pg_database.oid) | ||
OID базы данных, в которой находится зависимый объект, или ноль для разделяемого объекта | ||
classid oid (ссылается на pg_class.oid) | ||
OID системного каталога, в котором находится зависимый объект | ||
objid oid (ссылается на какой-либо столбец OID) | ||
OID конкретного зависимого объекта | ||
objsubid int4 | ||
Для столбца таблицы это номер столбца (поля objid и classid ссылаются на саму таблицу). Для всех остальных типов объектов этот столбец содержит ноль. | ||
refclassid oid (ссылается на pg_class.oid) | ||
OID системного каталога, в котором находится ссылочный объект (это должен быть разделяемый каталог) | ||
refobjid oid (ссылается на какой-либо столбец OID) | ||
OID конкретного ссылочного объекта | ||
deptype char | ||
Код, определяющий конкретную семантику этого отношения зависимости; см. текст ниже |
Во всех случаях запись в pg_shdepend показывает, что ссылочный объект нельзя удалить, не удалив также зависимый объект. Однако есть несколько подвидов зависимостей, которые задаются в поле deptype:
SHARED_DEPENDENCY_OWNER (о)
Ссылочный объект (который должен быть ролью) является владельцем зависимого
объекта.
SHARED_DEPENDENCY_ACL (a)
Ссылочный объект (который должен быть ролью) упоминается в списке ACL (список
управления доступом (access control list), т. е. список прав) зависимого объекта.
(Запись SHARED_DEPENDENCY_ACL не создается для владельца объекта, так как у
того в любом случае будет запись SHARED_DEPENDENCY_OWNER.)
SHARED_DEPENDENCY_POLICY (r)
Ссылочный объект (который должен быть ролью) является целью для объекта зависимой
политики.
SHARED_DEPENDENCY_TABLESPACE (t)
Ссылочный объект (который должен быть табличным пространством) является табличным
пространством для отношения, у которого нет хранилища.
В будущем могут потребоваться и другие подвиды зависимостей. В частности, обратите внимание, что текущее определение поддерживает в качестве ссылочных объектов только роли и табличные пространства.
Как и в каталоге pg_depend, большинство объектов, созданных во время qhb_bootstrap (или initdb) считаются «закрепленными». В pg_shdepend не создаются никакие записи, в которых закрепленный объект мог бы быть ссылочным или зависимым.
pg_shdescription
В каталоге pg_shdescription хранятся необязательные описания (комментарии)
для разделяемых объектов базы данных. Описаниями можно манипулировать с помощью
команды COMMENT
и просматривать с помощью команд psql \d
.
См. также описание каталога pg_description, который выполняет ту же функцию для описаний объектов в пределах одной базы данных.
В отличие от большинства системных каталогов, pg_shdescription совместно используется всеми базами данных кластера: существует только одна копия pg_shdescription на кластер, а не отдельная для каждой базы данных.
Таблица 49. Столбцы pg_shdescription
Столбец Тип |
||
---|---|---|
Описание |
||
objoid oid (ссылается на какой-либо столбец OID) | ||
OID объекта, к которому относится это описание | ||
classoid oid (ссылается на pg_class.oid) | ||
OID системного каталога, в котором находится этот объект | ||
description text | ||
Произвольный текст, который служит описанием этого объекта |
pg_shseclabel
В каталоге pg_shseclabel хранятся метки безопасности по разделяемым объектам
базы данных. Метками безопасности можно управлять с помощью команды
SECURITY LABEL
. Более простой способ просмотра меток безопасности см. в
описании представления pg_seclabels.
См. также описание каталога pg_seclabel, который выполняет ту же функцию для меток безопасности объектов в пределах одной базы данных.
В отличие от большинства системных каталогов, pg_shseclabel совместно используется всеми базами данных кластера: существует только одна копия pg_shseclabel на кластер, а не отдельная для каждой базы данных.
Таблица 50. Столбцы pg_shseclabel
Столбец Тип |
||
---|---|---|
Описание |
||
objoid oid (ссылается на какой-либо столбец OID) | ||
OID объекта, к которому относится эта метка безопасности | ||
classoid oid (ссылается на pg_class.oid) | ||
OID системного каталога, в котором находится этот объект | ||
provider text | ||
Поставщик меток безопасности, связанный с этой меткой | ||
label text | ||
Метка безопасности, применяемая к этому объекту |
pg_statistic
В каталоге pg_statistic хранятся статистические данные о содержимом базы
данных. Записи создаются при помощи команды ANALYZE
и впоследствии используются
планировщиком запросов. Обратите внимание, что все статистические данные по своей
сути приблизительны, даже если предполагается, что они актуальны.
Обычно для каждого столбца таблицы, который был проанализирован, есть одна запись
со значением stainherit = false. Если таблица имеет потомков в иерархии
наследования, то создается также вторая запись со значением stainherit = true.
Эта строка представляет статистику по столбцу по всему дереву наследования, т. е.
статистику по данным, которые выводятся с помощью команды SELECT столбец FROM таблица*
, в то время как строка stainherit = false представляет результаты
выполнения команды SELECT столбец FROM ONLY таблица
.
Также в каталоге pg_statistic хранятся статистические данные о значениях индексных выражений. Они описываются так, как если бы они были реальными столбцами данных; в частности, starelid ссылается на индекс. Однако для обычного столбца индекса, не содержащего выражения, запись не производится, поскольку она дублировала бы запись для нижележащего столбца таблицы. В настоящее время записи для индексных выражений всегда имеют значение stainherit = false.
Поскольку различные виды статистики подходят для различных видов данных, pg_statistic предназначен не для того, чтобы строить конкретные предположения о том, какая статистика в нем хранится. В отдельных столбцах pg_statistic приводятся только самые общие статистические данные (например процент значений NULL). Все остальное хранится в «слотах», представляющих собой группы связанных столбцов, содержимое которых определяется кодовым номером в одном из слотов.
Каталог pg_statistic не должен быть доступен для чтения всеми, поскольку даже статистическая информация о содержимом таблицы может считаться конфиденциальной. (Например, могут представлять интерес минимальные и максимальные значения столбца зарплаты.) Доступным для чтения всеми представлением каталога pg_statistic является pg_stats, которое выводит информацию только о тех таблицах, которые может читать текущий пользователь.
Таблица 51. Столбцы pg_statistic
Столбец Тип |
||
---|---|---|
Описание |
||
starelid oid (ссылается на pg_class.oid) | ||
Таблица или индекс, которому принадлежит описываемый столбец | ||
staattnum int2 (ссылается на pg_attribute.attnum) | ||
Номер описываемого столбца | ||
stainherit bool | ||
Если true, то в статистику включаются значения из дочерних таблиц иерархии наследования, а не только значения в указанном отношении | ||
stanullfrac float4 | ||
Доля записей столбца, которые содержат NULL | ||
stawidth int4 | ||
Средняя хранимая ширина записей, отличных от NULL, в байтах | ||
stadistinct float4 | ||
Количество уникальных значений данных, отличных от NULL, в столбце. Значение больше нуля — это фактическое количество уникальных значений. Значение меньше нуля — это множитель для количества строк в таблице, взятый с отрицательным знаком; например, столбец, в котором около 80% значений отличны от NULL и каждое такое значение появляется в среднем примерно два раза, может быть представлен как stadistinct = -0.4. Нулевое значение означает, что количество уникальных значений неизвестно. | ||
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
.
Таблица 52. Столбцы pg_statistic_ext
Столбец Тип |
||
---|---|---|
Описание |
||
oid oid | ||
Идентификатор строки | ||
stxrelid oid (ссылается на pg_class.oid) | ||
Таблица, содержащая столбцы, описываемые этим объектом | ||
stxname name | ||
Имя объекта статистики | ||
stxnamespace oid (ссылается на pg_namespace.oid) | ||
OID пространства имен, содержащего этот объект статистики | ||
stxowner oid (ссылается на pg_authid.oid) | ||
Владелец объекта статистики | ||
stxstattarget int4 | ||
Поле stxstattarget определяет уровень детализации статистики, собранной для данного объекта статистики командой ANALYZE . Нулевое значение показывает, что статистику собирать не нужно. Отрицательное значение указывает использовать максимум из ориентиров статистики для целевых столбцов, если таковые установлены, или системный ориентир статистики по умолчанию. Положительные значения stxstattarget определяют ориентировочное количество «наиболее распространенных значений», которое нужно собрать. |
||
stxkeys int2vector (ссылается на pg_attribute.attnum) | ||
Массив номеров атрибутов, показывающий, какие столбцы таблицы охвачены этим объектом статистики; например, значение 1 3 будет означать, что охвачены первый и третий столбцы таблицы | ||
stxkind char[] | ||
Массив, содержащий коды для включенных типов статистики; допустимыми значениями являются: d для статистики по количеству уникальных значений (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
.
Обычно для каждого проанализированного объекта статистики здесь имеется одна
запись со значением stxdinherit = false. Если у таблицы есть потомки в иерархии
наследования или партиции, также создается вторая запись со значением stxdinherit
= true. Эта строка представляет объект статистики по дереву наследования, т. е.
статистику для данных, которые можно увидеть, выполнив запрос SELECT * FROM таблица*
, тогда как строка stxdinherit = false представляет результаты запроса
SELECT * FROM ONLY таблица
.
Как и каталог pg_statistic, pg_statistic_ext_data не должен быть доступен для чтения всем, поскольку его содержимое может считаться конфиденциальным. (Пример: определенный интерес могут предоставлять наиболее распространенных комбинации значений в столбцах базы данных.) Доступным для всех представлением каталога pg_statistic_ext_data является pg_stats_ext (после соединения с каталогом pg_statistic_ext), которое предоставляет информацию только о тех таблицах и столбцах, которые может прочитать текущий пользователь.
Таблица 53. Столбцы pg_statistic_ext_data
Столбец Тип |
||
---|---|---|
Описание |
||
stxoid oid (ссылается на pg_statistic_ext.oid) | ||
Объект расширенной статистики, содержащий определение для этих данных | ||
stxdinherit bool | ||
Если true, то в статистику включаются значения из дочерних таблиц иерархии наследования, а не только значения в указанном отношении | ||
stxdndistinct pg_ndistinct | ||
Количество уникальных значений, сериализованное в виде типа pg_ndistinct | ||
stxddependencies pg_dependencies | ||
Статистика функциональных зависимостей, сериализованная в виде типа pg_dependencies | ||
stxdmcv pg_mcv_list | ||
Статистика списка MCV (most-common values, наиболее распространенных значений), сериализованная в виде типа pg_mcv_list | ||
stxdexpr pg_statistic[] | ||
Статистика по каждому выражению, сериализованная в виде массива типа pg_statistic |
pg_subscription
В каталоге pg_subscription содержатся все существующие подписки на логическую репликацию. Подробную информацию о логической репликации см. в главе Логическая репликация.
В отличие от большинства системных каталогов, pg_subscription совместно используется всеми базами данных кластера: существует только одна копия pg_subscription на кластер, а не отдельная для каждой базы данных.
Обычным пользователям запрещен доступ к столбцу subconninfo, поскольку он может содержать пароли в открытом виде.
Таблица 54. Столбцы pg_subscription
Столбец Тип |
||
---|---|---|
Описание |
||
oid oid | ||
Идентификатор строки | ||
subdbid oid (ссылается на pg_database.oid) | ||
OID базы данных, в которой находится подписка | ||
subskiplsn pg_lsn | ||
LSN конца транзакции, изменения которой должны быть пропущены, если это правильный LSN; в противном случае 0/0. | ||
subname name | ||
Имя подписки | ||
subowner oid (ссылается на pg_authid.oid) | ||
Владелец подписки | ||
subenabled bool | ||
Если true, то подписка включена и должна реплицироваться. | ||
subbinary bool | ||
Если true, то подписка будет запрашивать данные у публикующего сервера в двоичном формате | ||
substream bool | ||
Если true, то для подписки будет разрешена потоковая передача данных еще выполняющихся транзакций | ||
subtwophasestate char | ||
Коды состояния для двухфазного режима: d = выключен (disabled), p = ожидается включение (pending), e = включен (enabled) | ||
subdisableonerr 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
.
Таблица 55. Столбцы 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 на кластер, а не отдельная для каждой базы данных.
Таблица 56. Столбцы pg_tablespace
Столбец Тип |
||
---|---|---|
Описание |
||
oid oid | ||
Идентификатор строки | ||
spcname name | ||
Имя табличного пространства | ||
spcowner oid (ссылается на pg_authid.oid) | ||
Владелец табличного пространства (обычно это пользователь, который его создал) | ||
spcacl aclitem[] | ||
Права доступа; подробную информацию см. в разделе Права | ||
spcoptions text[] | ||
Параметры уровня табличного пространства в виде строк «ключ=значение» |
pg_transform
В каталоге pg_transform хранится информация о преобразованиях, которые
являются механизмом адаптации типов данных к процедурным языкам. Подробную
информацию см. на справочной странице команды CREATE TRANSFORM
.
Таблица 57. Столбцы pg_transform
Столбец Тип |
||
---|---|---|
Описание |
||
oid oid | ||
Идентификатор строки | ||
trftype oid (ссылается на pg_type.oid) | ||
OID типа данных, для которого предназначено это преобразование | ||
trflang oid (ссылается на pg_language.oid) | ||
OID языка, для которого предназначено это преобразование | ||
trffromsql regproc (ссылается на pg_proc.oid) | ||
OID функции, используемой при преобразовании типа данных для передачи в процедурный язык (например, параметры функции). Содержит ноль, если должно применяться поведение по умолчанию. | ||
trftosql regproc (ссылается на pg_proc.oid) | ||
OID функции, используемой при преобразовании значений, полученных из процедурного языка (например, возвращаемых значений), в тип данных. Содержит ноль, если должно применяться поведение по умолчанию. |
pg_trigger
В каталоге pg_trigger хранится информация о триггерах в таблицах и
представлениях. Дополнительную информацию см. на справочной странице команды
CREATE TRIGGER
.
Таблица 58. Столбцы pg_trigger
Столбец Тип |
||
---|---|---|
Описание |
||
oid oid | ||
Идентификатор строки | ||
tgrelid oid (ссылается на pg_class.oid) | ||
Таблица, на которую действует этот триггер | ||
tgparentid oid (ссылается на pg_trigger.oid) | ||
Родительский триггер, из которого клонируется данный (это происходит при создании партиций или присоединении их к партиционированной таблице); ноль, если данный триггер — не клон | ||
tgname name | ||
Имя триггера (должно быть уникальным среди триггеров одной таблицы) | ||
tgfoid oid (ссылается на pg_proc.oid) | ||
Вызываемая функция | ||
tgtype int2 | ||
Битовая маска, определяющая условия срабатывания триггера | ||
tgenabled char | ||
Задает режимы session_replication_role, при которых срабатывает триггер. О = триггер срабатывает в режимах «origin» (источник) и «local» (локально), D = триггер выключен (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 подробно описаны в главе Полнотекстовый поиск.
Таблица 59. Столбцы pg_ts_config
Столбец Тип |
||
---|---|---|
Описание |
||
oid oid | ||
Идентификатор строки | ||
cfgname name | ||
Имя конфигурации текстового поиска | ||
cfgnamespace oid (ссылается на pg_namespace.oid) | ||
OID пространства имен, содержащего эту конфигурацию | ||
cfgowner oid (ссылается на pg_authid.oid) | ||
Владелец конфигурации | ||
cfgparser oid (ссылается на pg_ts_parser.oid) | ||
OID синтаксического анализатора текстового поиска для этой конфигурации |
pg_ts_config_map
В каталоге pg_ts_config_map содержатся записи, показывающие, к каким словарям текстового поиска следует обращаться и в каком порядке, для каждого типа синтаксических единиц, выдаваемого каждым синтаксическим анализатором конфигурации текстового поиска.
Возможности текстового поиска QHB подробно описаны в главе Полнотекстовый поиск.
Таблица 60. Столбцы pg_ts_config_map
Столбец Тип |
||
---|---|---|
Описание |
||
mapcfg oid (ссылается на pg_ts_config.oid) | ||
OID записи в каталоге pg_ts_config, которой принадлежит эта запись сопоставления | ||
maptokentype int4 | ||
Тип синтаксических единиц, генерируемых синтаксическим анализатором конфигурации | ||
mapseqno int4 | ||
Порядок, в котором следует обращаться к этой записи (сначала меньшие mapseqno) | ||
mapdict oid (ссылается на pg_ts_dict.oid) | ||
OID словаря текстового поиска, к которому нужно обращаться |
pg_ts_dict
В каталоге pg_ts_dict содержатся записи, определяющие словари текстового поиска. Словарь зависит от шаблона текстового поиска, который задает все необходимые функции реализации; сам словарь предоставляет значения для настраиваемых пользователем параметров, поддерживаемых шаблоном. Такое разделение позволяет создавать словари пользователям без прав. Параметры задаются текстовой строкой dictinitoption, формат и значение которой различаются в зависимости от шаблона.
Возможности текстового поиска QHB подробно описаны в главе Полнотекстовый поиск.
Таблица 61. Столбцы pg_ts_dict
Столбец Тип |
||
---|---|---|
Описание |
||
oid oid | ||
Идентификатор строки | ||
dictname name | ||
Имя словаря текстового поиска | ||
dictnamespace oid (ссылается на pg_namespace.oid) | ||
OID пространства имен, содержащего этот словарь | ||
dictowner oid (ссылается на pg_authid.oid) | ||
Владелец словаря | ||
dicttemplate oid (ссылается на pg_ts_template.oid) | ||
OID шаблона текстового поиска для этого словаря | ||
dictinitoption text | ||
Строка параметров инициализации для этого шаблона |
pg_ts_parser
В каталоге pg_ts_parser содержатся записи, определяющие синтаксические анализаторы текстового поиска. Синтаксический анализатор отвечает за разбиение входного текста на лексемы и присвоение каждой лексеме типа синтаксической единицы. Поскольку синтаксический анализатор должен быть реализован с помощью функций на языке уровня C/RUST, создавать новые синтаксические анализаторы могут только суперпользователи базы данных.
Возможности текстового поиска QHB подробно описаны в главе Полнотекстовый поиск.
Таблица 62. Столбцы pg_ts_parser
Столбец Тип |
||
---|---|---|
Описание |
||
oid oid | ||
Идентификатор строки | ||
prsname name | ||
Имя синтаксического анализатора текстового поиска | ||
prsnamespace oid (ссылается на pg_namespace.oid) | ||
OID пространства имен, содержащего этот синтаксический анализатор | ||
prsstart regproc (ссылается на pg_proc.oid) | ||
OID функции запуска этого синтаксического анализатора | ||
prstoken regproc (ссылается на pg_proc.oid) | ||
OID функции этого синтаксического анализатора, выдающей следующую синтаксическую единицу | ||
prsend regproc (ссылается на pg_proc.oid) | ||
OID функции этого синтаксического анализатора, завершающей анализ | ||
prsheadline regproc (ссылается на pg_proc.oid) | ||
OID функции этого синтаксического анализатора, выдающей заголовки (ноль, если таковой нет) | ||
prslextype regproc (ссылается на pg_proc.oid) | ||
OID функции лексических типов этого синтаксического анализатора |
pg_ts_template
В каталоге pg_ts_template содержатся записи, определяющие шаблоны текстового поиска. Шаблон — это основа реализации для класса словарей текстового поиска. Поскольку шаблон должен быть реализован с помощью функций на языке уровня C/RUST, создавать новые шаблоны могут только суперпользователи базы данных.
Возможности текстового поиска QHB подробно описаны в главе Полнотекстовый поиск.
Таблица 63. Столбцы pg_ts_template
Столбец Тип |
||
---|---|---|
Описание |
||
oid oid | ||
Идентификатор строки | ||
tmplname name | ||
Имя шаблона текстового поиска | ||
tmplnamespace oid (ссылается на pg_namespace.oid) | ||
OID пространства имен, содержащего этот шаблон | ||
tmplinit regproc (ссылается на pg_proc.oid) | ||
OID функции инициализации этого шаблона (ноль, если таковой нет) | ||
tmpllexize regproc (ссылается на pg_proc.oid) | ||
OID функции выделения лексем этого шаблона |
pg_type
В каталоге pg_type хранится информация о типах данных. Базовые и
перечислимые (скалярные) типы создаются с помощью команды CREATE TYPE
, а
домены — с помощью CREATE DOMAIN
. Составной тип автоматически создается для
каждой таблицы в базе данных, чтобы представлять структуру строк таблицы. Кроме
того, составные типы можно создать с помощью команды CREATE TYPE AS
.
Таблица 64. Столбцы pg_type
Столбец Тип |
||
---|---|---|
Описание |
||
oid oid | ||
Идентификатор строки | ||
typname name | ||
Имя типа данных | ||
typnamespace oid (ссылается на pg_namespace.oid) | ||
OID пространства имен, содержащего этот тип | ||
typowner oid (ссылается на pg_authid.oid) | ||
Владелец типа | ||
typlen int2 | ||
Для типа фиксированного размера поле typlen содержит число байтов во внутреннем представлении типа. Но для типа переменной длины typlen будет отрицательным. -1 обозначает тип «varlena» (он содержит машинное слово, указывающее длину), -2 обозначает строку в стиле C/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 задается произвольная классификация типов данных, которая используется синтаксическим анализатором для определения того, какие неявные приведения должны быть «предпочтительными». См. Таблицу 65. | ||
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. Когда несколько значений хранятся последовательно, например, в представлении полной строки данных на диске, заполнение дополнительными байтами происходит перед значением этого типа, чтобы тот начинался на указанной границе. Ссылка на выравнивание является началом первого значения в последовательности. Возможные значения:
|
||
typstorage char | ||
Значение поля typstorage для типов varlena (т. е. с typlen = -1) сообщает, подготовлен ли тип для помещения в TOAST и какова должна быть стратегия по умолчанию для атрибутов этого типа. Возможные значения:
|
||
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, были согласованы с тем, как компилятор расположит этот столбец в структуре, представляющей строку таблицы.
В Таблице 65 перечислены определяемые системой значения typcategory. Любые будущие дополнения к этому списку также будут записаны прописными буквами ASCII. Все остальные символы ASCII зарезервированы для пользовательских категорий.
Таблица 65. Коды typcategory
Код | Категория |
---|---|
A | Типы массивов |
B | Логические типы |
C | Составные типы |
D | Типы даты/времени |
E | Перечислимые типы |
G | Геометрические типы |
I | Типы сетевых адресов |
N | Числовые типы |
P | Псевдотипы |
R | Диапазонные типы |
S | Строковые типы |
T | Интервальные типы |
U | Пользовательские типы |
V | Типы битовых строк |
X | Неизвестный тип (unknown) |
Z | Типы для внутреннего использования |
pg_user_mapping
В каталоге pg_user_mapping хранятся сопоставления локальных пользователей с удаленными. Обычные пользователи не имеют доступа к этому каталогу, вместо этого им следует использовать представление pg_user_mappings.
Таблица 66. Столбцы pg_user_mapping
Столбец Тип |
||
---|---|---|
Описание |
||
oid oid | ||
Идентификатор строки | ||
umuser oid (ссылается на pg_authid.oid) | ||
OID сопоставляемой локальной роли или ноль, если пользовательское сопоставление является общедоступным | ||
umserver oid (ссылается на pg_foreign_server.oid) | ||
OID стороннего сервера, содержащего это сопоставление | ||
umoptions text[] | ||
Специальные параметры сопоставления пользователей в виде строк «ключ=значение» |