Системные каталоги
Системные каталоги — это место, где система управления реляционными
базами данных хранит метаданные схемы, такие как сведения о таблицах и
столбцах, а также информацию о внутреннем бухгалтерском учете. Системные
каталоги QHB — это обычные таблицы. Вы можете удалить и
пересоздать их, добавить столбцы, вставить и обновить значения
— и тем самым сильно испортить свою систему. В большинстве случаев не следует
изменять системные каталоги вручную, для этого обычно существуют команды
SQL. (Например, CREATE DATABASE
вставляет строку в каталог pg_database
и фактически создает базу данных на диске.) Есть некоторые
исключения для особенно сложных операций, но многие из них с течением времени становятся доступны в виде команд SQL, и поэтому
необходимость в прямом манипулировании системными каталогами постоянно
уменьшается.
- Обзор
- pg_aggregate
- pg_am
- pg_amop
- pg_amproc
- pg_attrdef
- pg_attribute
- pg_authid
- pg_auth_members
- pg_cast
- pg_class
- pg_collation
- pg_constraint
- pg_conversion
- pg_database
- pg_db_role_setting
- pg_default_acl
- pg_depend
- pg_description
- pg_enum
- pg_event_trigger
- pg_extension
- pg_foreign_data_wrapper
- pg_foreign_server
- pg_foreign_table
- pg_index
- pg_inherits
- pg_init_privs
- pg_language
- pg_largeobject
- pg_largeobject_metadata
- pg_namespace
- pg_opclass
- pg_operator
- pg_opfamily
- pg_partitioned_table
- pg_policy
- pg_proc
- pg_publication
- pg_publication_rel
- pg_range
- pg_replication_origin
- pg_rewrite
- pg_seclabel
- pg_sequence
- pg_shdepend
- pg_shdescription
- pg_shseclabel
- pg_statistic
- pg_statistic_ext
- pg_statistic_ext_data
- pg_subscription
- pg_subscription_rel
- pg_tablespace
- pg_transform
- pg_trigger
- pg_ts_config
- pg_ts_config_map
- pg_ts_dict
- pg_ts_parser
- pg_ts_template
- pg_type
- pg_user_mapping
- Системные представления
- pg_available_extensions
- pg_available_extension_versions
- pg_config
- pg_cursors
- pg_file_settings
- pg_group
- pg_hba_file_rules
- pg_indexes
- pg_locks
- pg_matviews
- pg_policies
- pg_prepared_statements
- pg_prepared_xacts
- pg_publication_tables
- pg_replication_origin_status
- pg_replication_slots
- pg_roles
- pg_rules
- pg_seclabels
- pg_sequences
- pg_settings
- pg_shadow
- pg_stats
- pg_stats_ext
- pg_tables
- pg_timezone_abbrevs
- pg_timezone_names
- pg_user
- pg_user_mappings
- pg_views
Обзор
В таблице Системные каталоги перечислены системные каталоги. Более подробная документация по каждому каталогу приводится ниже.
Большинство системных каталогов копируются из шаблона базы данных во время ее создания и затем зависят от конкретной базы данных. Несколько каталогов физически совместно используются во всех базах данных в кластере — они отмечаются в описаниях отдельных каталогов.
Таблица: Системные каталоги
имя каталога | Цель |
---|---|
pg_aggregate | агрегатные функции |
pg_am | методы доступа отношений |
pg_amop | операторы метода доступа |
pg_amproc | функции поддержки метода доступа |
pg_attrdef | значения столбца по умолчанию |
pg_attribute | столбцы таблицы («атрибуты») |
pg_authid | идентификаторы авторизации (роли) |
pg_auth_members | отношения членства идентификатора авторизации |
pg_cast | приведения (преобразования типов данных) |
pg_class | таблицы, индексы, последовательности, представления («отношения») |
pg_collation | параметры сортировки (сведения о локали) |
pg_constraint | проверочные ограничения, ограничения уникальности, ограничения первичного ключа, ограничения внешнего ключа |
pg_conversion | кодирование информация о преобразовании |
pg_database | базы данных в этом кластере |
pg_db_role_setting | параметры для каждой роли и базы данных |
pg_default_acl | права доступа по умолчанию для типов объектов |
pg_depend | зависимости между объектами базы данных |
pg_description | описания или комментарии объектов базы данных |
pg_enum | определения меток и значений перечислений |
pg_event_trigger | триггеры событий |
pg_extension | установленные расширения |
pg_foreign_data_wrapper | определения оберток сторонних данных |
pg_foreign_server | определения сторонних серверов |
pg_foreign_table | дополнительная информация по сторонней таблице |
pg_index | дополнительная информация по индексам |
pg_inherits | иерархия наследования таблиц |
pg_init_privs | начальные права объекта |
pg_language | языки для написания функций |
pg_largeobject | страницы данных для больших объектов |
pg_largeobject_metadata | метаданные для больших объектов |
pg_namespace | схемы |
pg_opclass | классы операторов метода доступа |
pg_operator | операторы |
pg_opfamily | семейства операторов метода доступа |
pg_partitioned_table | информация о ключе разбиения таблиц |
pg_policy | политики защиты строк |
pg_proc | функции и процедуры |
pg_publication | публикации для логической репликации |
pg_publication_rel | сопоставление отношения с публикацией |
pg_range | информация о типах диапазонов |
pg_replication_origin | зарегистрированные источники репликации |
pg_rewrite | правила перезаписи запроса |
pg_seclabel | метки безопасности для объектов базы данных |
pg_sequence | информация о последовательностях |
pg_shdepend | зависимости от общих объектов |
pg_shdescription | комментарии к общим объектам |
pg_shseclabel | метки безопасности для общих объектов базы данных |
pg_statistic | статистика планировщика |
pg_statistic_ext | расширенная статистика планировщика (определение) |
pg_statistic_ext_data | расширенная статистика планировщика (собранная статистика) |
pg_subscription | подписки на логическую репликацию |
pg_subscription_rel | состояние связи для подписок |
pg_tablespace | табличные пространства в кластере базы данных |
pg_transform | преобразования (преобразование типа данных в процедурный язык) |
pg_trigger | триггеры |
pg_ts_config | конфигурации текстового поиска |
pg_ts_config_map | сопоставления маркеров конфигураций текстового поиска |
pg_ts_dict | словари текстового поиска |
pg_ts_parser | синтаксические анализаторы текстового поиска |
pg_ts_template | шаблоны текстового поиска |
pg_type | типы данных |
pg_user_mapping | сопоставления пользователей для сторонних серверов |
pg_aggregate
В каталоге pg_aggregate хранится информация об агрегатных функциях. Агрегатная функция — это функция, которая работает с набором значений (как правило, с одним столбцом из каждой строки, которая соответствует условию запроса) и возвращает одно значение, вычисленное из всех этих значений. Типичными агрегатными функциями являются sum, count и max. Каждая запись внутри pg_aggregate представляет собой расширение записи в pg_proc. Запись в pg_proc содержит имя агрегата, типы входных и выходных данных, а также другую информацию, аналогичную имеющейся у обычных функций.
Таблица: Столбцы pg_aggregate
Имя | Тип | Ссылки | Описание |
---|---|---|---|
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. | |
agginitval | text | Начальное значение переходного состояния для режима движущегося агрегата. Это текстовое поле, содержащее начальное значение во внешнем строковом представлении. Если это поле имеет значение NULL, то значение состояния перехода начнется с NULL. |
Новые агрегатные функции регистрируются с помощью команды CREATE AGGREGATE. Дополнительную информацию о написании агрегатных функций и значении функций перехода см. в разделе Пользовательские агрегаты.
pg_am
В каталоге pg_am хранится информация о методах доступа к отношениям. Для каждого метода доступа, поддерживаемого системой, существует одна строка. В настоящее время только таблицы и индексы имеют методы доступа. Требования к методам доступа к таблицам и индексам подробно рассматриваются в главах Интерфейс доступа к таблице и Интерфейс доступа индекса соответственно.
Таблица: Столбцы pg_am
Имя | Тип | Ссылки | Описание |
---|---|---|---|
oid | oid | Идентификатор строки | |
amname | name | Имя метода доступа | |
amhandler | regproc | pg_proc.oid | OID функции обработчика, ответственного за предоставление информации о методе доступа |
amtype | char | t = таблица (включая материализованные представления) (table), i = индекс (index). |
Примечание
Данные о свойствах индексных методов доступа напрямую видны только на уровне кода С. Однако запросы SQL могут проверять эти свойства с помощью pg_index_column_has_property() и связанных функций.
pg_amop
В каталоге pg_amop хранится информация об операторах, связанных с семействами операторов метода доступа. Для каждого оператора, который является членом семейства операторов, существует одна строка. Членом семейства может быть либо оператор поиска, либо оператор упорядочивания. Оператор может принадлежать нескольким семействам, но в пределах одного семейства не может находиться более чем в одной позиции поиска или позиции упорядочивания. (Допустимо, хотя и маловероятно, что оператор будет использоваться как для поиска, так и для сравнения.)
Таблица: Столбцы pg_amop
Имя | Тип | Ссылки | Описание |
---|---|---|---|
oid | oid | Идентификатор строки | |
amopfamily | oid | pg_opfamily.oid | Семейство операторов, для которых эта запись предназначена |
amoplefttype | oid | pg_type.oid | Тип данных левого операнда оператора |
amoprighttype | oid | pg_type.oid | Тип данных правого операнда оператора |
amopstrategy | int2 | Номер стратегии оператора | |
amoppurpose | char | Назначение оператора: s для поиска (search), о для упорядочивания (order by) | |
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 хранится информация о функциях, поддерживаемых оператором и связанных с семействами операторов метода доступа. Для каждой вспомогательной функции, принадлежащей семейству операторов, существует одна строка.
Таблица: Столбцы 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. В этом каталоге хранятся только те столбцы, для которых было явно установлено значение по умолчанию.
Таблица: Столбцы 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).
Термин «атрибут» равнозначен столбцу и используется по историческим причинам.
Таблица: Столбцы 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 типа этого столбца | |
attstorage | char | Обычно это копия pg_type.typsize типа этого столбца. Для типов данных, поддерживающих TOAST, этот атрибут можно изменить после создания столбца в целях управления политикой хранения. | |
attalign | char | Копия pg_type.typalign типа этого столбца | |
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_roles — это публично доступное представление на базе pg_authid, которое скрывает поле пароля.
В главе Роли в базе данных содержатся подробные сведения об управлении пользователями и их правами.
Поскольку аутентификация пользователей проводится для всего кластера, pg_authid является общим каталогом для всех баз данных кластера: существует только одна копия pg_authid на кластер, а не собственная для каждой базы данных.
Таблица: Столбцы 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 на кластер, а не для каждой базы данных.
Таблица: Столбцы 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 или других строковых типов собственные функции ввода-вывода типа данных.
Таблица: Столбцы 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). Ниже, подразумевая все эти виды объектов, мы говорим об «отношениях». Не все столбцы в каталоге значимы для всех типов отношений.
Таблица: Столбцы 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 базового составного типа для типизированных таблиц или 0 для всех остальных отношений |
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 . | |
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 = партиционированный индекс | |
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 = по умолчанию (первичный ключ, если есть), n = ничего, 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 и категориями локали операционной системы. Дополнительную информацию см. в разделе Поддержка правил сортировки.
Таблица: Столбцы pg_collation
Имя | Тип | Ссылки | Описание |
---|---|---|---|
oid | oid | Идентификатор строки | |
collname | name | Имя правила сортировки (уникальное для каждого пространства имен и кодировки) | |
collnamespace | oid | pg_namespace.oid | OID пространства имен, содержащего это правило сортировки |
collowner | oid | pg_authid.oid | Владелец правила сортировки |
collprovider | char | Поставщик правила сортировки: d = установленный в базе данных по умолчанию (default), c = libc, i = icu | |
collisdeterministic | bool | Является ли правило сортировки детерминированным? | |
collencoding | int4 | Кодировка, в которой применимо правило сортировки, или -1, если оно работает для любой кодировки | |
collcollate | name | LC_COLLATE для этого объекта сортировки | |
collctype | name | LC_CTYPE для этого объекта сортировки | |
collversion | text | Версия правила сортировки для конкретного поставщика. Записывается при создании правила сортировки, а затем проверяется при его использовании для обнаружения изменений в его определении, которые могут привести к повреждению данных. |
Обратите внимание, что уникальными ключами в этом каталоге являются (collname, collencoding, collnamespace), а не только (collname, collnamespace). QHB обычно игнорирует все правила сортировки, которые не имеют collencoding равным либо кодировке текущей базы данных, либо -1; кроме того, создание новых записей с тем же именем, что и запись с collencoding = -1, запрещено. Поэтому для определения правила сортировки достаточно использовать полное имя SQL (schema.name), даже если оно не является уникальным в соответствии с определением каталога. Такое определение каталога обусловлено тем, что во время инициализации кластера qhb_bootstrap заполняет его записями для всех доступных в системе локалей, поэтому каталог должен иметь возможность хранить записи для всех кодировок, которые могут когда-либо использоваться в кластере.
В базе данных template0 может быть полезно создать правила сортировки, кодировка которых не соответствует кодировке базы данных, так как они могут соответствовать кодировкам баз данных, впоследствии клонированных из template0. В настоящее время это придется сделать вручную.
pg_constraint
В каталоге pg_constraint хранятся проверочные и исключающие ограничения, ограничения уникальности, первичного и внешнего ключей для таблиц. (Ограничения столбцов не обрабатываются отдельно. Каждое ограничение столбца эквивалентно некоторому ограничению таблицы.) Ограничения NOT NULL представлены не здесь, а в каталоге pg_attribute.
Определяемые пользователем триггеры ограничений (созданные с помощью
команды CREATE CONSTRAINT TRIGGER
) также приводят к появлению записи в этой
таблице.
Также здесь хранятся проверочные ограничения для доменов.
Таблица: Столбцы 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 = нет действия (action), r = ограничить (restrict), c = каскадное действие (cascade), n = установить значение NULL, d = поведение по умолчанию (default) | |
confdeltype | char | Код действия при удалении внешнего ключа: a = нет действия, r = ограничить, c = каскадное действие, n = установить значение NULL, d = поведение по умолчанию | |
confmatchtype | char | Тип соответствия для внешнего ключа: f = полный (full), p = частичный (partial), s = простой (simple) | |
conislocal | bool | Это ограничение определяется локально для данного отношения. Обратите внимание, что ограничение может быть локально определено и унаследовано одновременно. | |
coninhcount | int4 | Число предков прямого наследования от ограничения. Ограничение с ненулевым числом предков не может быть удалено или переименовано. | |
connoinherit | bool | Ограничение определено локально для данного отношения и является ненаследуемым. | |
conkey | int2[] | pg_attribute.attnum | Для ограничения таблицы (включая внешние ключи, но не триггеры ограничений) — список столбцов с ограничением |
confkey | int2[] | pg_attribute.attnum | Для внешнего ключа — список ссылочных столбцов |
conpfeqop | oid[] | pg_operator.oid | Для внешнего ключа — список операторов равенства для сравнений PK = FK |
conppeqop | oid[] | pg_operator.oid | Для внешнего ключа — список операторов равенства для сравнений PK = PK |
conffeqop | oid[] | pg_operator.oid | Для внешнего ключа — список операторов равенства для сравнений FK = FK |
conexclop | oid[] | pg_operator.oid | Для исключающего ограничения — список операторов исключения для каждого столбца |
conbin | pg_node_tree | Для проверочного ограничения — внутреннее представление выражения. (Чтобы извлечь определение проверочного ограничения, рекомендуется использовать pg_get_constraintdef().) |
В случае исключающего ограничения столбец conkey полезен только для элементов ограничения, которые являются простыми ссылками на столбец. Для других случаев значение conkey будет равно NULL, и чтобы обнаружить выражение, определяющее ограничение, необходимо просмотреть связанный индекс. (Следовательно, поле conkey имеет то же содержание, что и pg_index.indkey для индекса.)
Примечание
pg_class.relchecks необходимо согласовать с количеством записей проверочного ограничения, найденных в этой таблице для каждого отношения.
pg_conversion
В каталоге pg_conversion описаны функции преобразования кодировки. Дополнительную информацию см. в описании команды CREATE CONVERSION.
Таблица: Столбцы pg_conversion
Имя | Тип | Ссылки | Описание |
---|---|---|---|
oid | oid | Идентификатор строки | |
conname | name | Имя преобразования (уникальное в пределах пространства имен) | |
connamespace | oid | pg_namespace.oid | OID пространства имен, содержащего это преобразование |
conowner | oid | pg_authid.oid | Владелец преобразования |
conforencoding | int4 | Идентификатор исходной кодировки | |
contoencoding | int4 | Идентификатор целевой кодировки | |
conproc | regproc | pg_proc.oid | Функция преобразования |
condefault | bool | True, если это преобразование по умолчанию |
pg_database
В каталоге pg_database хранится информация о доступных базах данных. Базы данных создаются с помощью команды CREATE DATABASE. Дополнительную информацию о значении некоторых параметров см. в главе Управление базами данных.
В отличие от большинства системных каталогов, pg_database является общим для всех баз данных кластера: существует только одна копия pg_database на кластер, а не по одному на каждую базу данных.
Таблица: Столбцы pg_database
Имя | Тип | Ссылки | Описание |
---|---|---|---|
oid | oid | Идентификатор строки | |
datname | name | Имя базы данных | |
datdba | oid | pg_authid.oid | Владелец базы данных — как правило, пользователь, который ее создал |
encoding | int4 | Кодировка символов для этой базы данных (при помощи pg_encoding_to_char() можно перевести этот номер в имя кодировки) | |
datcollate | name | LC_COLLATE для этой базы данных | |
datctype | name | LC_CTYPE для этой базы данных | |
datistemplate | bool | Если true, то эту базу данных может клонировать любой пользователь, обладающий правом CREATEDB; если false, то клонировать ее могут только суперпользователи или владелец этой базы данных. | |
datallowconn | bool | Если false, то никто не может подключиться к этой базе данных. Используется для защиты базы данных template0 от изменений. | |
datconnlimit | int4 | Задает максимальное число одновременных подключений, которые могут быть выполнены для этой базы данных. -1 означает отсутствие ограничений. | |
datlastsysoid | oid | Последний системный OID в базе данных; полезен, в частности, для qhb_dump | |
datfrozenxid | xid | В этой базе данных все идентификаторы транзакций, предшествующие данному, были заменены на постоянный («замороженный») идентификатор транзакции. Это используется для отслеживания того, нужно ли очистить таблицу для предотвращения зацикливания идентификатора транзакции или уменьшения размера pg_xact. Это минимальные значения pg_class.relfrozenxid для каждой таблицы. | |
datminmxid | xid | В этой базе данных все идентификаторы мультитранзакций, предшествующие данному, были заменены на другой идентификатор транзакции. Это используется для отслеживания того, нужно ли очистить таблицу для предотвращения зацикливания идентификатора мультитранзакции или уменьшения размера pg_multixact. Это минимальные значения pg_class.relminmxid для каждой таблицы. | |
dattablespace | oid | pg_tablespace.oid | Табличное пространство по умолчанию для этой базы данных. В пределах этой базы данных все таблицы, у которых pg_class.reltablespace равно нулю, будут храниться в этом табличном пространстве (в частности, там будут находиться все частные системные каталоги). |
datacl | aclitem[] | Права доступа; дополнительную информацию см. в разделе Права |
pg_db_role_setting
В каталоге pg_db_role_setting хранятся значения по умолчанию, заданные для переменных конфигурации времени выполнения, для каждой комбинации роли и базы данных.
В отличие от большинства системных каталогов, pg_db_role_setting является общим для всех баз данных кластера: существует только одна копия pg_db_role_setting на кластер, а не по одному на каждую базу данных.
Таблица: Столбцы pg_db_role_setting
Имя | Тип | Ссылки | Описание |
---|---|---|---|
setdatabase | oid | pg_database.oid | OID базы данных, к которой применяется этот параметр, или NULL, если он не относится к конкретной базе данных |
setrole | oid | pg_authid.oid | OID роли, к которой применяется этот параметр, или NULL, если он не относится к конкретной роли |
setconfig | text[] | Значения по умолчанию для переменных конфигурации времени выполнения |
pg_default_acl
В каталоге pg_default_acl сохраняются права, изначально присваиваемые только что созданным объектам.
Таблица: Столбцы pg_default_acl
Имя | Тип | Ссылки | Описание |
---|---|---|---|
oid | oid | Идентификатор строки | |
defaclrole | oid | pg_authid.oid | OID роли, связанной с этой записью |
defaclnamespace | oid | pg_namespace.oid | OID пространства имен, связанного с этой записью, или ноль для глобальной записи |
defaclobjtype | char | Тип объекта, для которого эта запись предназначена: r = отношение (таблица, представление), S = последовательность, f = функция, T = тип, n = схема | |
defaclacl | aclitem[] | Права доступа, которые этот тип объекта должен иметь при создании |
Запись в pg_default_acl показывает начальные права, которые будут присвоены объекту, принадлежащему указанному пользователю. В настоящее время существует два типа записей: «глобальные» записи с defaclnamespace = 0 и записи «схемы», ссылающиеся на конкретную схему. Если глобальная запись присутствует, то она переопределяет обычные фиксированные права по умолчанию для типа объекта. Запись схемы, если она присутствует, представляет права, которые будут добавлены к глобальным или фиксированным правам по умолчанию.
Обратите внимание, что если запись ACL в другом каталоге имеет значение NULL, то она используется для представления фиксированных прав по умолчанию для ее объекта, а не тех, которые могут находиться в pg_default_acl в данный момент. Каталог pg_default_acl считывается только во время создания объекта.
pg_depend
В каталог pg_depend записываются отношения зависимости между объектами базы
данных. Эта информация позволяет командам DROP
находить, какие другие
объекты должны быть удалены с помощью DROP CASCADE
, или
предотвращать удаление в случае DROP RESTRICT
.
См. также описание каталога pg_shdepend, который выполняет аналогичную функцию для зависимостей, включающих объекты, совместно используемые в кластере баз данных.
Таблица: Столбцы 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.
DEPENDENCY_PIN (p)
Зависимого объекта нет. Этот тип записи означает, что сама система зависит от ссылочного объекта, и поэтому этот объект никогда не должен быть удален. Записи этого типа создаются только в команде qhb_bootstrap. Столбцы для зависимого объекта содержат нули.
Обратите внимание, что два объекта вполне могут быть связаны более чем одной записью в pg_depend. Например, дочерний партиционированный индекс будет иметь зависимость партиционного типа от связанной партиционированной таблицы и автозависимость от каждого столбца той таблицы, которую он индексирует. Такая ситуация выражает объединение семантики множественной зависимости. Зависимый объект можно удалить без указания CASCADE, если какая-либо из его зависимостей удовлетворяет его условию автоматического удаления. И наоборот, должны быть выполнены все ограничения зависимостей, определяющие, какие объекты должны быть удалены вместе.
pg_description
В каталоге pg_description хранятся дополнительные описания (комментарии) для каждого объекта базы данных. Описания можно обрабатывать с помощью команды COMMENT и просматривать с помощью команд qsql \d.
См. также описание каталога pg_shdescription, который выполняет аналогичную функцию в отношении описаний совместно используемых объектов в кластере баз данных.
Таблица: Столбцы 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.
Таблица: Столбцы 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 хранятся триггеры событий. Дополнительную информацию см. в главе Триггеры событий.
Таблица: Столбцы pg_event_trigger
Имя | Тип | Ссылки | Описание |
---|---|---|---|
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 сохраняет информацию об установленных расширениях. Подробную информацию о расширениях см. в разделе Упаковка связанных объектов в расширение.
Таблица: Столбцы 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 хранятся определения оберток сторонних данных. Обертки сторонних данных — это механизм, с помощью которого осуществляется доступ к внешним данным, находящимся на сторонних серверах.
Таблица: Столбцы 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 хранятся определения сторонних серверов. Сторонний сервер описывает источник внешних данных, например удаленный сервер. Доступ к сторонним серверам осуществляется через обертки сторонних данных.
Таблица: Столбцы 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, содержит информацию, относящуюся только к сторонним таблицам, а не к какому-либо другому виду отношений.
Таблица: Столбцы 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.
Таблица: Столбцы pg_index
Имя | Тип | Ссылки | Описание |
---|---|---|---|
indexrelid | oid | pg_class.oid | OID записи в каталоге pg_class для этого индекса |
indrelid | oid | pg_class.oid | OID записи в каталоге pg_class для таблицы, к которой относится этот индекс |
indnatts | int2 | Общее количество столбцов в индексе (повторяет pg_class.relnatts); это число включает в себя как ключевые, так и включенные атрибуты | |
indnkeyatts | int2 | Количество ключевых столбцов в индексе, не считая каких-либо включенных столбцов, которые просто хранятся и не участвуют в семантике индекса | |
indisunique | bool | Если true, то это уникальный индекс | |
indisprimary | bool | Если true, то этот индекс представляет собой первичный ключ таблицы (в этом случае indisunique всегда должно быть true) | |
indisexclusion | bool | Если true, то этот индекс поддерживает исключающее ограничение | |
indimmediate | bool | Если true, то проверка уникальности применяется сразу после вставки (не применимо, если у indisunique значение false) | |
indisclustered | bool | Если true, то данная таблица в последний раз кластеризовалась по этому индексу | |
indisvalid | bool | Если true, то индекс в настоящее время является допустимым для запросов. False означает, что индекс может быть неполным: он по-прежнему должен изменяться с помощью операций INSERT/UPDATE , но безопасно использовать его для запросов нельзя. Если индекс уникальный, свойство уникальности также не гарантируется. | |
indcheckxmin | bool | Если true, запросы не должны использовать индекс до тех пор, пока поле xmin этой строки pg_index находится ниже их горизонта событий (TransactionXmin), поскольку таблица может содержать разорванные цепочки HOT с видимыми запросам несовместимыми строками | |
indisready | bool | Если true, то индекс в настоящее время готов к вставкам. False означает, что индекс должен быть проигнорирован операциями INSERT/UPDATE . | |
indislive | bool | Если false, индекс находится в процессе удаления и должен игнорироваться при любой попытке использования (включая заключение о безопасности HOT) | |
indisreplident | bool | Если true, то этот индекс был выбран в качестве «идентификатора реплики» с помощью команды ALTER TABLE ... REPLICA IDENTITY USING INDEX ... | |
indkey | int2vector | pg_attribute.attnum | Массив из значений indnatts, указывающий на столбцы таблицы, которые этот индекс обрабатывает. Например, значение параметра 1 3 означает, что первый и третий столбцы таблицы составляют записи индекса. Ключевые столбцы предшествуют неключевым (включенным) столбцам. Ноль в этом массиве указывает, что соответствующий атрибут индекса является выражением над столбцами таблицы, а не просто ссылкой на столбец. |
indcollation | oidvector | pg_collation.oid | Для каждого столбца в ключе индекса (значения indnkeyatts) содержит OID правила сортировки, используемого для индекса, или ноль, если столбец не относится к сортируемому типу данных. |
indclass | oidvector | pg_opclass.oid | Для каждого столбца в ключе индекса (значения indnkeyatts) содержит OID используемого класса операторов. Дополнительную информацию см. в описании каталога pg_opclass. |
indoption | int2vector | Массив из значений indnkeyatts, хранящих биты флагов для каждого столбца. Значение битов определяется методом доступа индекса. | |
indexprs | pg_node_tree | Деревья выражений (в представлении nodeToString()) для атрибутов индекса, которые не являются простыми ссылками на столбец. Это список с одним элементом для каждой нулевой записи в indkey. Null, если все атрибуты индекса являются простыми ссылками. | |
indpred | pg_node_tree | Дерево выражений (в представлении nodeToString()) для частичного индексного предиката. Null, если это не частичный индекс. |
pg_inherits
В каталог pg_inherits записывается информация об иерархиях наследования таблицы и индекса. Для каждой прямой связи «родитель-потомок» таблицы или индекса в базе данных существует одна запись. (Косвенное наследование можно определить, проследив цепочки записей.)
Таблица: Столбцы pg_inherits
Имя | Тип | Ссылки | Описание |
---|---|---|---|
inhrelid | oid | pg_class.oid | OID дочерней таблицы или индекса |
inparent | oid | pg_class.oid | OID родительской таблицы или индекса |
inhseqno | int4 | Если у дочерней таблицы существует более одного прямого родителя (множественное наследование), это число указывает порядок, в котором должны быть упорядочены наследуемые столбцы. Отсчет начинается с 1. У индексов не может быть множественного наследования, так как они могут наследоваться только при декларативном партиционировании. |
pg_init_privs
В каталог pg_init_privs записывается информация об изначальных правах объектов в системе. Для каждого объекта в базе данных, имеющего нестандартный (отличный от NULL) начальный набор прав, существует одна запись.
Начальные права объектов могут задаваться либо при
инициализации системы (с помощью qhb_bootstrap), либо при создании объекта в процессе выполнения команды
CREATE EXTENSION
, а скрипт расширения устанавливает
начальные права с помощью системы GRANT
. Обратите
внимание, что эта система автоматически записывает права во
время выполнения скрипта расширения, поэтому авторам расширения достаточно
использовать в своем скрипте только команды GRANT
и REVOKE
, чтобы права были записаны. Столбец privtype указывает, было ли начальное
право установлено программой qhb_bootstrap или в процессе
выполнения команды CREATE EXTENSION
.
Объекты с начальными правами, установленными qhb_bootstrap, будут
иметь записи, где privtype помечается буквой 'i', тогда как у
объектов с начальными правами, установленными CREATE EXTENSION
,
privtype будет помечаться буквой 'e'.
Таблица: Столбцы pg_init_privs
Имя | Тип | Ссылки | Описание |
---|---|---|---|
objoid | oid | OID любого столбца | OID конкретного объекта |
classoid | oid | pg_class.oid | OID системного каталога, в котором находится объект |
objsubid | int4 | Для столбца таблицы это номер столбца (objoid и classoid указывают на саму таблицу). Для всех других типов объектов этот столбец содержит ноль. | |
privtype | char | Код, определяющий тип начального права этого объекта; см. текст выше | |
initprivs | aclitem[] | Начальные права доступа; дополнительную информацию см. в разделе Права |
pg_language
В каталоге pg_language регистрируются языки, на которых можно писать функции или хранимые процедуры. Дополнительную информацию об обработчиках языка см. в описании команды CREATE LANGUAGE и главе Процедурные языки.
Таблица: Столбцы 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.
Таблица: Столбцы 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.
Таблица: Столбцы pg_largeobject_metadata
Имя | Тип | Ссылки | Описание |
---|---|---|---|
oid | oid | Идентификатор строки | |
lomowner | oid | pg_authid.oid | Владелец большого объекта |
lomacl | aclitem[] | Права доступа; дополнительную информацию см. в разделе Права |
pg_namespace
В каталоге pg_namespace хранятся пространства имен. Пространство имен — это структура, лежащая в основе схем SQL: каждое пространство имен без конфликтов может иметь отдельный набор отношений, типов и т. д.
Таблица: Столбцы pg_namespace
Имя | Тип | Ссылки | Описание |
---|---|---|---|
oid | oid | Идентификатор строки | |
nspname | name | Имя пространства имен | |
nspowner | oid | pg_authid.oid | Владелец пространства имен |
nspacl | aclitem[] | Права доступа; дополнительную информацию см. в разделе Права |
pg_opclass
Каталог pg_opclass определяет классы операторов метода доступа к индексу. Каждый класс операторов определяет семантику для индексных столбцов определенного типа данных и конкретного метода доступа к индексам. Класс оператора по существу определяет, что конкретное семейство операторов применимо к конкретному типу данных индексируемого столбца. Набор операторов из семейства, которые на самом деле можно использовать с индексированным столбцом, составляет те, что принимают в качестве левого операнда тип данных столбца.
Классы операторов подробно описаны в разделе Интерфейсные расширения для индексов.
Таблица: Столбцы 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 и разделе Пользовательские операторы.
Таблица: Столбцы pg_operator
Имя | Тип | Ссылки | Описание |
---|---|---|---|
oid | oid | Идентификатор строки | |
oprname | name | Имя оператора | |
oprnamespace | oid | pg_namespace.oid | OID пространства имен, содержащего этот оператор |
oprowner | oid | pg_authid.oid | Владелец оператора |
oprkind | char | b = инфиксный («both»), l = префиксный («left»), r = постфиксный («right») | |
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 | Функция оценки избирательности соединения для этого оператора |
Неиспользуемые столбцы содержат нули. Например, поле oprleft содержит ноль для префиксного оператора.
pg_opfamily
Каталог pg_opfamily определяет семейства операторов. Каждое семейство операторов представляет собой набор операторов и связанных с ними вспомогательных процедур, реализующих семантику, заданную для конкретного метода доступа к индексу. Более того, все операторы в семействе «совместимы» в том смысле, который определяется методом доступа. Концепция семейства операторов позволяет применять с индексами операторы разного типа и рассуждать о них, используя знания о семантике метода доступа.
Семейства операторов подробно описаны в разделе Интерфейсные расширения для индексов.
Таблица: Столбцы pg_opfamily
Имя | Тип | Ссылки | Описание |
---|---|---|---|
oid | oid | Идентификатор строки | |
opfmethod | oid | pg_am.oid | Метод доступа к индексу, для которого предназначено семейство операторов |
opfname | name | Имя этого семейства операторов | |
opfnamespace | oid | pg_namespace.oid | Пространство имен этого семейства операторов |
opfowner | oid | pg_authid.oid | Владелец этого семейства операторов |
Большая часть информации, определяющей семейство операторов, находится не в строке pg_opfamily, а в связанных строках в каталогах pg_amop, pg_amproc и pg_opclass.
pg_partitioned_table
В каталоге pg_partitioned_table хранится информация о способе партиционирования таблиц.
Таблица: Столбцы 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 для запросов, которые пытаются добавить новые записи в таблицу.
Таблица: Столбцы pg_policy
Имя | Тип | Ссылки | Описание |
---|---|---|---|
polname | name | Имя политики | |
polrelid | oid | pg_class.oid | Таблица, к которой применяется политика |
polcmd | char | Тип команды, к которой применяется политика: r для SELECT , a для INSERT , w для UPDATE , d для DELETE или * для всех | |
polpermissive | boolean | Является ли эта политика разрешительной или ограничительной? | |
polroles | oid[] | pg_authid.oid | Роли, к которым применяется политика |
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 должна быть соответствующая строка.
Таблица: Столбцы 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. В этом случае функция по факту не будет вызвана вообще. Функции, которые не являются «строгими», должны быть подготовлены для обработки нулевых входных данных. | |
proretset | bool | Функция возвращает набор (т. е. несколько значений указанного типа данных) | |
provolatile | char | provolatile указывает, зависит ли результат функции только от ее входных аргументов, или на него влияют внешние факторы. Для «неизменяемых» функций, которые всегда дают один и тот же результат для одних и тех же входных данных, устанавливается значение i (immutable). Для «стабильных» функций, результаты которых (для фиксированных входных аргументов) не изменяются в пределах сканирования, устанавливается значение s (stable). Для «изменчивых» функций, результаты которых могут измениться в любое время, устанавливается значение v (volatile). (Также v используется для функций с побочными эффектами, чтобы их вызовы нельзя было исключить в процессе оптимизации.) | |
proparallel | char | Указывает, можно ли безопасно запускать функцию в параллельном режиме. Для функций, которые безопасно запускать в параллельном режиме без ограничений, устанавливается значение 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 | Массив с типами данных аргументов функции. Включает в себя все аргументы (в том числе аргументы IN и 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[] | Массив типов данных аргументов/результатов, к которым необходимо применить преобразования (из предложения TRANSFORM объявления функции). NULL, если таковых нет. | |
prosrc | text | Это значение говорит обработчику функции, как ее вызвать. Это может быть фактический исходный код функции для интерпретируемых языков, символ ссылки, имя файла или почти все остальное, в зависимости от языка реализации/соглашения о вызове. | |
probin | text | Дополнительная информация о том, как вызвать эту функцию. Интерпретация этого значения также зависит от языка. | |
proconfig | text[] | Локальные настройки функции для переменных конфигурации времени выполнения | |
proacl | aclitem[] | Права доступа; дополнительную информацию см. в разделе Права |
Для скомпилированных функций, как встроенных, так и динамически загружаемых, поле prosrc содержит имя функции на языке C (объектную ссылку). Для всех других известных на данный момент типов языков prosrc содержит исходный текст функции. Поле probin используется только для динамически загружаемых функций на языке C/RUST, для которых он дает имя файла разделяемой библиотеки, содержащей эти функции.
pg_publication
Каталог pg_publication содержит все публикации для логической репликации, созданные в базе данных.
Таблица: Столбцы 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 реплицируются для таблиц в публикации. |
pg_publication_rel
Каталог pg_publication_rel содержит сопоставления между отношениями и публикациями в базе данных. Это сопоставления вида многие-ко-многим. Более понятное пользователю представление этой информации можно также посмотреть в подразделе pg_publication_tables.
Таблица: Столбцы pg_publication_rel
Имя | Тип | Ссылки | Описание |
---|---|---|---|
prpubid | oid | pg_publication.oid | Ссылка на публикацию |
prrelid | oid | pg_class.oid | Ссылка на связь |
pg_range
В каталоге pg_range хранится информация о типах диапазонов. Это дополнительная информация к записям типов в каталоге pg_type.
Таблица: Столбцы pg_range
Имя | Тип | Ссылки | Описание |
---|---|---|---|
rngtypid | oid | pg_type.oid | OID типа диапазона |
rngsubtype | oid | pg_type.oid | OID типа элемента (подтипа) данного типа диапазона |
rngcollation | oid | pg_collation.oid | OID правила сортировки, используемого для сравнения диапазонов, или 0, если такового нет |
rngsubopc | oid | pg_opclass.oid | OID класса операторов подтипа, используемого для сравнения диапазонов |
rngcanonic | regproc | pg_proc.oid | OID функции, преобразующей значения диапазона в каноническую форму, или 0, если таковой нет |
rngsubdiff | regproc | pg_proc.oid | OID функции, возвращающей разницу между двумя значениями элементов в виде значения double precision, или 0, если таковой нет |
Значение поля rngsubopc (плюс rngcollation, если тип элемента является сортируемым) определяет правило сортировки, используемое типом диапазона. Значение поля rngcanonic используется, когда тип элемента является дискретным. Значение поля rngsubdiff является необязательным, но его стоит задавать для повышения производительности индексов GiST с диапазонным типом.
pg_replication_origin
Каталог pg_replication_origin содержит все созданные источники репликации.
В отличие от большинства системных каталогов, pg_replication_origin является общим для всех баз данных кластера: существует только одна копия pg_replication_origin на кластер, а не по одному на каждую базу данных.
Таблица: Столбцы pg_replication_origin
Имя | Тип | Ссылки | Описание |
---|---|---|---|
roident | oid | Уникальный в пределах кластера идентификатор источника репликации. Никогда не должен выходить за границы системы. | |
roname | text | Определяемое пользователем внешнее имя источника репликации. |
pg_rewrite
В каталоге pg_rewrite хранятся правила перезаписи для таблиц и представлений.
Таблица: Столбцы 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, который выполняет ту же функцию для меток безопасности объектов базы данных, совместно используемых в кластере баз данных.
Таблица: Столбцы 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.
Таблица: Столбцы 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 на кластер, а не по одному на каждую базу данных.
Таблица: Столбцы 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_PIN (p)
Зависимый объект отсутствует; этот тип записи служит сигналом,
что сама система зависит от ссылочного объекта, и поэтому этот объект
никогда не должен быть удален. Записи этого типа создаются только
командой qhb_bootstrap
. Столбцы для зависимого объекта у этой записи содержат нули.
SHARED_DEPENDENCY_TABLESPACE (t)
Зависимый объект (который должен быть табличным пространством) упоминается в качестве табличного пространства в отношении, у которого нет хранилища.
В будущем могут потребоваться и другие подвиды зависимостей. В частности, обратите внимание, что в текущем определении ссылочными объектами могут быть только роли и табличные пространства.
pg_shdescription
В каталоге pg_shdescription хранятся необязательные описания (комментарии)
для общих объектов базы данных. Описаниями можно манипулировать с помощью
команды COMMENT и просматривать с помощью команд qsql \d
.
См. также описание каталога pg_description, который выполняет ту же функцию для описаний объектов в пределах одной базы данных.
В отличие от большинства системных каталогов, pg_shdescription является общим для всех баз данных кластера: существует только одна копия pg_shdescription на кластер, а не по одному на каждую базу данных.
Таблица: Столбцы 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 на кластер, а не по одному на каждую базу данных.
Таблица: Столбцы 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 column FROM table*
, в то время как строка stainherit = false
представляет собой результаты выполнения
SELECT column FROM ONLY table
.
В pg_statistic также хранятся статистические данные о значениях индексных выражений. Они описываются так, как если бы они были реальными столбцами данных; в частности, starelid ссылается на индекс. Однако для обычного столбца индекса, не содержащего выражения, запись не производится, поскольку она дублировала бы запись для нижележащего столбца таблицы. В настоящее время записи для выражений индекса всегда имеют значение stainherit = false.
Поскольку различные виды статистики подходят для различных видов данных, pg_statistic предназначен не для того, чтобы строить конкретные предположения о том, какая статистика в нем хранится. В отдельных столбцах pg_statistic приводятся только самые общие статистические данные (такие как доля значений NULL). Все остальное хранится в «слотах», представляющих собой группы связанных столбцов, содержимое которых определяется кодовым номером в одном из слотов. Более подробную информацию см. в src/include/catalog/pg_statistic.h.
Каталог pg_statistic не должен быть доступным для чтения всем, поскольку даже статистическая информация о содержании таблицы может считаться конфиденциальной. (Например: могут представлять интерес минимальные и максимальные значения столбца зарплаты.) Доступным для чтения всеми представлением для pg_statistic является pg_stats, которое предоставляет информацию только о тех таблицах, которые может читать текущий пользователь.
Таблица: Столбцы pg_statistic
Имя | Тип | Ссылки | Описание |
---|---|---|---|
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.
Таблица: Столбцы pg_statistic_ext
Имя | Тип | Ссылки | Описание |
---|---|---|---|
stxrelid | oid | pg_class.oid | Таблица, содержащая столбцы, описываемые данным объектом |
stxname | name | Имя объекта статистики | |
stxnamespace | oid | pg_namespace.oid | OID пространства имен, содержащего этот объект статистики |
stxowner | oid | pg_authid.oid | Владелец объекта статистики |
stxkeys | int2vector | pg_attribute.attnum | Массив номеров атрибутов, указывающих, какие столбцы таблицы охвачены этим объектом статистики; например, значение 1 3 означает, что будут покрыты первый и третий столбцы таблицы |
stxkind | char[] | Массив, содержащий коды для включенных типов статистики; допустимыми значениями являются: d для статистики по количеству различных значений (n-distinct), f для статистики функциональной зависимости (functional dependency) и m для статистики списка наиболее частых значений (most common values, MCV) |
Запись в pg_statistic_ext полностью заполняется во время выполнения команды CREATE STATISTICS, но фактические статистические значения при этом не вычисляются. Последующие команды ANALYZE вычисляют требуемые значения и заполняют запись в каталоге pg_statistic_ext_data.
pg_statistic_ext_data
Каталог pg_statistic_ext_data содержит данные для расширенной статистики планировщика, определенной в pg_statistic_ext. Каждая строка в этом каталоге соответствует объекту статистики, созданному командой CREATE STATISTICS.
Как и в случае с pg_statistic, каталог pg_statistic_ext_data не должен быть доступен для чтения всем, поскольку его содержимое может считаться конфиденциальным. (Пример: определённый интерес могут предоставлять наиболее распространенные комбинации значений в столбцах базы данных.) Доступным для всех представлением каталога pg_statistic_ext_data является pg_stats_ext (после соединения с pg_statistic_ext), которое предоставляет информацию только о тех таблицах и столбцах, которые может прочитать текущий пользователь.
Таблица: Столбцы pg_statistic_ext_data
Имя | Тип | Ссылки | Описание |
---|---|---|---|
stxoid | oid | pg_statistic_ext.oid | Расширенный статистический объект, содержащий определение для этих данных |
stxdndistinct | pg_ndistinct | Количество различных значений, сериализованное как тип pg_ndistinct | |
stxddependencies | pg_dependencies | Статистика функциональных зависимостей, сериализованная как тип pg_dependencies | |
stxdmcv | pg_mcv_list | Статистика списка MCV (наиболее частых значений, most-common values), сериализованная как тип pg_mcv_list |
pg_subscription
Каталог pg_subscription содержит все существующие подписки на логическую репликацию.
В отличие от большинства системных каталогов, pg_subscription является общим для всех баз данных кластера: существует только одна копия pg_subscription на кластер, а не по одному на каждую базу данных.
Обычным пользователям запрещен доступ к столбцу subconninfo, поскольку он может содержать простые текстовые пароли.
Таблица: Столбцы pg_subscription
Имя | Тип | Ссылки | Описание |
---|---|---|---|
oid | oid | Идентификатор строки | |
subdbid | oid | pg_database.oid | OID базы данных, в которой находится подписка |
subname | name | Имя подписки | |
subowner | oid | pg_authid.oid | Владелец подписки |
subenabled | bool | Если true, то подписка включена и должна реплицироваться. | |
subsynccommit | text | Содержит значение параметра synchronous_commit для рабочих процессов подписки. | |
subconninfo | text | Строка подключения к вышестоящей базе данных | |
subslotname | name | Имя слота репликации в вышестоящей базе данных (также используется при локальной репликации имени источника); значение NULL представляет имя NONE. | |
subpublications | text[] | Массив имен публикаций, на которые оформлена подписка. Эти имена представляют публикации на публикующем сервере. |
pg_subscription_rel
Каталог pg_subscription_rel содержит состояние для каждого реплицируемого отношения в каждой подписке. Это сопоставление вида многие-ко-многим.
Этот каталог содержит только таблицы, известные подписке после
выполнения команды CREATE SUBSCRIPTION
или ALTER SUBSCRIPTION ... REFRESH PUBLICATION
.
Таблица: Столбцы pg_subscription_rel
Имя | Тип | Ссылки | Описание |
---|---|---|---|
srsubid | oid | pg_subscription.oid | Ссылка на подписку |
srrelid | oid | pg_class.oid | Ссылка на отношение |
srsubstate | char | Код состояния: i = инициализация, d = копирование данных, s = синхронизация выполнена, r = готовность (нормальная репликация) | |
srsublsn | pg_lsn | LSN изменения состояния на удаленной стороне, используемый для координации синхронизации при состояниях s или r, в ином случае NULL. |
pg_tablespace
В каталоге pg_tablespace хранится информация о доступных табличных пространствах. Таблицы могут быть размещены в определенных табличных пространствах с целью управления структурой диска.
В отличие от большинства системных каталогов, pg_tablespace является общим для всех баз данных кластера - существует только одна копия pg_tablespace на кластер, а не по одному на каждую базу данных.
Таблица: Столбцы pg_tablespace
Имя | Тип | Ссылки | Описание |
---|---|---|---|
oid | oid | Идентификатор строки | |
spcname | name | Имя табличного пространства | |
spcowner | oid | pg_authid.oid | Владелец этого табличного пространства (обычно это пользователь, который его создал) |
spcacl | aclitem[] | Права доступа; дополнительную информацию см. в разделе Права | |
spcoptions | text[] | Параметры уровня табличного пространства в виде строк «ключ=значение» |
pg_transform
В каталоге pg_transform хранится информация о преобразованиях, которые являются механизмом адаптации типов данных к процедурным языкам. Дополнительную информацию см. в описании команды CREATE TRANSFORM.
Таблица: Столбцы pg_transform
Имя | Тип | Ссылки | Описание |
---|---|---|---|
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.
Таблица: Столбцы pg_trigger
Имя | Тип | Ссылки | Описание |
---|---|---|---|
oid | oid | Идентификатор строки | |
tgrelid | oid | pg_class.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.
Таблица: Столбцы 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 содержит записи, показывающие, к каким словарям текстового поиска следует обращаться и в каком порядке, для каждого типа фрагмента, выдаваемого синтаксическим анализатором каждой конфигурации текстового поиска.
Таблица: Столбцы pg_ts_config_map
Имя | Тип | Ссылки | Описание |
---|---|---|---|
mapcfg | oid | pg_ts_config.oid | OID записи из pg_ts_config, которой принадлежит эта запись сопоставления |
maptokentype | integer | Тип фрагмента, создаваемого синтаксическим анализатором конфигурации | |
mapseqno | integer | Порядок, в котором следует обращаться к этой записи (сначала меньшие mapseqnos) | |
mapdict | oid | pg_ts_dict.oid | OID словаря текстового поиска, к которому нужно обращаться |
pg_ts_dict
Каталог pg_ts_dict содержит записи, определяющие словари текстового поиска. Словарь зависит от шаблона текстового поиска, который задает все необходимые функции реализации; сам словарь предоставляет значения для настраиваемых пользователем параметров, поддерживаемых шаблоном. Такое разделение позволяет создавать словари непривилегированным пользователям. Параметры задаются текстовой строкой dictinitoption, формат и значение которой различаются в зависимости от шаблона.
Таблица: Столбцы 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, создавать новые синтаксические анализаторы могут только суперпользователи базы данных.
Таблица: Столбцы 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, создавать новые шаблоны могут только суперпользователи базы данных.
Таблица: Столбцы 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
.
Таблица: Столбцы pg_type
Имя | Тип | Ссылки | Описание |
---|---|---|---|
oid | oid | Идентификатор строки | |
typname | name | Имя типа данных | |
typnamespace | oid | pg_namespace.oid | OID пространства имен, содержащего этот тип |
typowner | oid | pg_authid.oid | Владелец данного типа |
typlen | int2 | Для типа фиксированного размера typlen — это число байтов во внутреннем представлении типа. Но для типа переменной длины typlen будет отрицательным. -1 обозначает тип «varlena» (он содержит машинное слово, указывающее длину), -2 обозначает строку в стиле C, завершающуюся значением NULL. | |
typbyval | bool | typbyval определяет, будут ли внутренние функции передавать значение этого типа по значению или по ссылке. typbyval предпочтительно иметь значение false, если только длина typlen не равна 1, 2 или 4 (или 8 на 64-битных машинах). Типы переменной длины всегда передаются по ссылке. Обратите внимание, что typbyval может иметь значение false, даже если длина позволит передачу по значению. | |
typtype | char | typtype имеет значение b для базового типа (base), c для составного типа (composite) (например, типа строки таблицы), d для домена (domain), e для перечислимого типа (enum), p для псевдотипа (pseudo) или r для типа диапазона (range). См. также описания столбцов typrelid и typbasetype. | |
typcategory | char | В typcategory задается произвольная классификация типов данных, которая используется синтаксическим анализатором для определения того, какие неявные приведения должны быть «предпочтительными». См. таблицу Коды typcategory. | |
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, чтобы сослаться на них.) Для несоставных типов значение столбца равно нулю. |
typelem | oid | pg_type.oid | Если typelem не содержит 0, то он ссылается на другую строку в pg_type. В этом случае к текущему типу можно обращаться по индексу, как к массиву, и получать значения типа typelem. «Настоящий» массив при этом имеет переменную длину (typlen = -1), но некоторые типы фиксированной длины (typlen > 0) также имеют ненулевое значение typelem, например name и point. Если для типа фиксированной длины задан typelem то его внутреннее представление должно быть некоторым количеством значений (кортежем) с типом данных typelem без каких-либо других данных. Типы массивов переменной длины имеют заголовок, определяемый подпрограммами массива. |
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, и какова должна быть стратегия по умолчанию для атрибутов этого типа. Возможные значения:
Для типов, которые могут быть помещены в TOAST, обычно применяется стратегия x. Обратите внимание, что столбцы m также можно переместить во вторичное хранилище, но только в крайнем случае (столбцы e и x перемещаются первыми). | |
typnotnull | bool | Поле typnotnull представляет собой ограничение «не NULL» для типа. Используется только для доменов. | |
typbasetype | oid | pg_type.oid | Если это домен (см. typtype), то typbasetype определяет тип, на котором он основан. Ноль, если этот тип не является доменом. |
typtypmod | int4 | Домены используют typtypmod, чтобы записать модификатор typmod, применяемый к их базовому типу (-1, если базовый тип не использует typtypmod). -1, если этот тип не является доменом. | |
typndims | int4 | Значение typndims задает число размерностей массива для домена, определенного поверх массива (т. е. когда typbasetype является типом массива). Ноль для типов, отличных от доменов поверх типов массивов. | |
typcollation | oid | pg_collation.oid | Значение typcollation задает правило сортировки типа. Если тип не поддерживает правила сортировки, столбец равен нулю. Базовый тип, который поддерживает правила сортировки, будет иметь ненулевое значение, как правило, DEFAULT_COLLATION_OID. Домен поверх сортируемого типа может иметь OID правила сортировки, отличающийся от такового его базового типа, если он был указан для домена. |
typdefaultbin | pg_node_tree | Если поле typdefaultbin содержит не NULL, то это представление nodeToString() выражения по умолчанию для данного типа. Используется только для доменов. | |
typdefault | text | Поле typdefault имеет значение NULL, если с типом не связано значение по умолчанию. Если поле typdefaultbin содержит не NULL, то typdefault должно содержать понятную человеку версию выражения по умолчанию, представленного в typdefaultbin. Если typdefaultbin имеет значение NULL, а typdefault — нет, значит, в typdefault находится внешнее представление значения по умолчанию типа, которое можно передать в принадлежающую типу функцию преобразования ввода для получения константы. | |
typacl | aclitem[] | Права доступа; дополнительную информацию см. в разделе Права |
Примечание
Для типов, используемых в системных таблицах, крайне важно, чтобы размер и выравнивание, определенные в каталоге pg_type, были согласованы с тем, как компилятор расположит этот столбец в структуре, представляющей строку таблицы.
В таблице Коды typcategory перечислены определяемые системой значения typcategory. Любые будущие дополнения к этому списку также будут записаны прописными буквами ASCII. Все остальные символы ASCII зарезервированы для пользовательских категорий.
Код | Категория |
---|---|
A | Типы массивов |
B | Логические типы |
C | Составные типы |
D | Типы даты/времени |
E | Типы-перечисления |
G | Геометрические типы |
I | Типы сетевых адресов |
N | Числовые типы |
P | Псевдотипы |
R | Диапазонные типы |
S | Строковые типы |
T | Интервальные типы |
U | Пользовательские типы |
V | Типы битовых строк |
X | Неизвестный тип (unknown) |
pg_user_mapping
В каталоге pg_user_mapping хранятся сопоставления локальных пользователей с удаленными. Обычные пользователи не имеют доступа к этому каталогу, вместо этого им следует использовать представление pg_user_mappings.
Таблица: Столбцы pg_user_mapping
Имя | Тип | Ссылки | Описание |
---|---|---|---|
oid | oid | Идентификатор строки | |
umuser | oid | pg_authid.oid | OID сопоставляемой локальной роли, 0, если пользовательское сопоставление является общедоступным |
umserver | oid | pg_foreign_server.oid | OID внешнего сервера, содержащего это сопоставление |
umoptions | text[] | Специальные параметры сопоставления пользователей в виде строк «ключ=значение» |
Системные представления
Помимо системных каталогов, QHB предоставляет ряд встроенных представлений. Некоторые системные представления обеспечивают удобный доступ к некоторым часто используемым запросам в системных каталогах. Другие представления обеспечивают доступ к внутреннему состоянию сервера.
Информационная схема предоставляет альтернативный набор представлений, которые перекрывают функциональные возможности системных представлений. Поскольку информационная схема является частью стандарта SQL, а описанные здесь представления специфичны для QHB, обычно лучше использовать информационную схему, если та выдает всю необходимую информацию.
В таблице Системные представления перечислены системные представления, описанные в этом разделе. Более подробная документация по каждому представлению приведена ниже. Существуют некоторые дополнительные представления, обеспечивающие доступ к результатам работы сборщика статистических данных; они описаны в таблице Представления по собранной статистике.
Кроме явно отмеченных исключений, все описанные здесь представления доступны только для чтения.
Таблица: Системные представления
Имя представления | Цель |
---|---|
pg_available_extensions | доступные расширения |
pg_available_extension_versions | доступные версии расширений |
pg_config | параметры конфигурации во время компиляции |
pg_cursors | открытый курсор |
pg_file_settings | сводка содержимого файла конфигурации |
pg_group | группы пользователей баз данных |
pg_hba_file_rules | сводка содержимого файла конфигурации проверки подлинности клиента |
pg_indexes | индексы |
pg_locks | замки в настоящее время удерживаются или ожидаются |
pg_matviews | материализованное представление |
pg_policies | политики |
pg_prepared_statements | подготовленное заявление |
pg_prepared_xacts | подготовленные сделки |
pg_publication_tables | публикации и связанные с ними таблицы |
pg_replication_origin_status | сведения об источниках репликации, включая ход выполнения репликации |
pg_replication_slots | сведения о слоте репликации |
pg_roles | роль базы данных |
pg_rules | правила |
pg_seclabels | метка безопасности |
pg_sequences | последовательности |
pg_settings | настройка параметров |
pg_shadow | пользователь базы данных |
pg_stats | статистика планировщика |
pg_stats_ext | расширенная статистика планировщика |
pg_tables | таблицы |
pg_timezone_abbrevs | сокращения часовых поясов |
pg_timezone_names | названия часовых поясов |
pg_user | пользователь базы данных |
pg_user_mappings | сопоставление пользователей |
pg_views | число просмотров |
pg_available_extensions
Представление pg_available_extensions содержит список расширений, доступных для установки. См. также каталог pg_extension, в котором отображаются уже установленные расширения.
Таблица: Столбцы pg_available_extensions
Имя | Тип | Описание |
---|---|---|
name | name | Имя расширения |
default_version | text | Имя версии по умолчанию или NULL, если версия не указана |
installed_version | text | Текущая установленная версия расширения или NULL, если расширение не установлено |
comment | text | Строка комментария из управляющего файла расширения |
Представление pg_available_extensions доступно только для чтения.
pg_available_extension_versions
Представление pg_available_extension_versions содержит список конкретных версий расширений, доступных для установки. См. также каталог pg_extension, в котором отображаются уже установленные расширения.
Таблица: Столбцы pg_available_extension_versions
Имя | Тип | Описание |
---|---|---|
name | name | Имя расширения |
version | text | Имя версии |
installed | bool | True, если эта версия данного расширения уже установлена |
superuser | bool | True, если это расширение разрешено устанавливать только суперпользователям |
relocatable | bool | True, если расширение можно переместить в другую схему |
schema | name | Имя схемы, в которую необходимо установить расширение, или NULL, если оно частично или полностью переместимо |
requires | name[] | Имена расширений, требующихся для данного, или NULL, если таковых нет |
comment | text | Строка комментария из управляющего файла расширения |
Представление pg_available_extension_versions доступно только для чтения.
pg_config
Представление pg_config описывает конфигурационные параметры времени компиляции текущей установленной версии QHB. Оно предназначено, например, для использования программными пакетами, которым может понадобиться содействие QHB в поиске необходимых заголовочных файлов и библиотек. Оно выдает ту же основную информацию, что и утилита qhb_config из поставки QHB.
По умолчанию представление pg_config могут прочитать только суперпользователи.
Таблица: Столбцы pg_config
Имя | Тип | Описание |
---|---|---|
name | text | Имя параметра |
setting | text | Значение параметра |
pg_cursors
В представлении pg_cursors перечислены курсоры, доступные в настоящий момент. Курсоры могут быть определены несколькими способами:
-
через оператор DECLARE в SQL
-
через сообщение Bind в клиент-серверном протоколе QHB
-
через интерфейс программирования сервера (SPI, Server Programming Interface), как описано в разделе Функции интерфейса
Представление pg_cursors отображает курсоры, созданные любым из этих средств. Курсоры существуют только в течение транзакции, которая их определяет, если только они не были объявлены WITH HOLD. Таким образом, не удерживаемые курсоры присутствуют в представлении только до конца создавшей их транзакции.
Примечание
Курсоры используются внутри системы для реализации некоторых компонентов QHB, таких как процедурные языки. Поэтому представление pg_cursors может содержать курсоры, которые не были явно созданы пользователем.
Таблица: Столбцы pg_cursors
Имя | Тип | Описание |
---|---|---|
name | text | Имя курсора |
statement | text | Дословная строка запроса, инициализировавшая объявления этого курсора |
is_holdable | boolean | True, если курсор удерживаемый (т. е. он может быть доступен после фиксации транзакции, в которой он был объявлен); иначе — false |
is_binary | boolean | True, если курсор был объявлен с указанием BINARY; иначе — false |
is_scrollable | boolean | True, если курсор прокручиваемый (т. е. он позволяет извлекать строки непоследовательным образом); иначе — false |
creation_time | timestamptz | Время, когда был объявлен курсор |
Представление pg_cursors доступно только для чтения.
pg_file_settings
Представление pg_file_settings выдает сводку содержимого файла(ов) конфигурации сервера. Для каждой записи «имя = значение», имеющейся в этих файлах, данное представление содержит строку с примечаниями, показывающими, может ли это значение быть успешно применено. Также для проблем, не связанных с записью «имя = значение», например синтаксических ошибок в файлах, в этом представлении могут появляться дополнительные строки.
Это представление полезно для проверки того, будут ли работать запланированные изменения в файлах конфигурации, или для диагностики предыдущего сбоя. Обратите внимание, что это представление сообщает о текущем содержимом файлов, а не о том, что было применено сервером в последний раз. (Для получения того состояния обычно достаточно представления pg_settings).
По умолчанию представление pg_file_settings могут прочитать только суперпользователи.
Таблица: Столбцы pg_file_settings
Имя | Тип | Описание |
---|---|---|
sourcefile | text | Полный путь к файлу конфигурации |
sourceline | integer | Номер строки в файле конфигурации, где появляется эта запись |
seqno | integer | Порядок, в котором обрабатываются операции (1..n) |
name | text | Имя параметра конфигурации |
setting | text | Значение, присваиваемое параметру |
applied | boolean | True, если значение может быть применено успешно |
error | text | Сообщение об ошибке, указывающее, почему эта запись не может быть применена, или NULL |
Если файл конфигурации содержит синтаксические ошибки или недопустимые имена параметров, сервер не будет пытаться применить какие-либо параметры из файла, а следовательно, все поля applied будут равны false. В таком случае в представлении будет одна или несколько строк со значением error, отличные от NULL, указывающие на проблему(ы). Иначе, если это возможно, будут применены отдельные параметры. Если отдельный параметр применить нельзя (например, из-за недопустимого значения или если параметр нельзя изменять после запуска сервера), он будет иметь соответствующее сообщение в поле error. Другой вариант, при котором поле applied будет содержать false, означает, что эта запись переопределяется более поздней записью для того же имени параметра; этот случай не считается ошибкой, поэтому в поле error ничего не появляется.
Дополнительную информацию о различных способах изменения параметров времени выполнения см. в разделе Настройка параметров
pg_group
Представление pg_group показывает имена и члены всех ролей, отмеченных как не имеющие признака rolcanlogin, что примерно соответствует набору ролей, которые использовались как группы.
Таблица: Столбцы pg_group
Имя | Тип | Ссылки | Описание |
---|---|---|---|
groname | name | pg_authid.rolname | Имя группы |
grosysid | oid | pg_authid.oid | Идентификатор этой группы |
grolist | oid[] | pg_authid.oid | Массив, содержащий идентификаторы ролей в этой группе |
pg_hba_file_rules
Представление pg_hba_file_rules выдает сводку содержимого файла конфигурации аутентификации клиентов, qhb_hba.conf. Для каждой непустой строки файла, не имеющей комментариев, в этом представлении содержится строка с примечаниями, показывающими, может ли это правило быть успешно применено.
Это представление может быть полезно для проверки того, будут ли работать запланированные изменения в файле конфигурации аутентификации, или для диагностики предыдущего сбоя. Обратите внимание, что это представление сообщает о текущем содержимом файла, а не о том, что было загружено сервером в последний раз.
По умолчанию представление pg_hba_file_rules могут прочитать только суперпользователи.
Таблица: Столбцы pg_hba_file_rules
Имя | Тип | Описание |
---|---|---|
line_number | integer | Номер строки этого правила в qhb_hba.conf |
type | text | Тип соединения |
database | text[] | Список имен баз данных, к которым применяется данное правило |
user_name | text[] | Список имен пользователей и ролей, к которым применяется данное правило |
address | text | Имя хоста или IP-адрес, либо одно из значений: all, samehost или *samenet, либо NULL для локальных соединений |
netmask | text | Маска IP-адреса или NULL, если это неприменимо |
auth_method | text | Способ аутентификации |
options | text[] | Параметры, указанные для метода аутентификации, если таковые имеются |
error | text | Сообщение об ошибке, указывающее, почему эта строка не может быть обработана, или NULL |
Обычно строка, отражающая неверную запись, будет иметь значения только для полей line_number и error.
pg_indexes
Представление pg_indexes предоставляет доступ к полезной информации о каждом индексе в базе данных.
Таблица: Столбцы pg_indexes
Имя | Тип | Ссылки | Описание |
---|---|---|---|
schemaname | name | pg_namespace.nspname | Имя схемы, содержащей таблицу и индекс |
tablename | name | pg_class.relname | Имя таблицы, для которой создан индекс |
indexname | name | pg_class.relname | Имя индекса |
tablespace | name | pg_tablespace.spcname | Имя табличного пространства, содержащего индекс (NULL, если это пространство по умолчанию для базы данных) |
indexdef | text | Определение индекса (реконструированная команда CREATE INDEX) |
pg_locks
Представление pg_locks предоставляет доступ к информации о блокировках, удерживаемых активными процессами на сервере базы данных. Подробное рассмотрение процесса блокировки см. в главе Управление параллельным доступом.
pg_locks содержит одну строку на каждый активный блокируемый объект, запрошенный режим блокировки и соответствующий процесс. Таким образом, один и тот же блокируемый объект может появляться много раз, если его блокируют или ожидают блокировки несколько процессов. Однако объект, который в настоящее время не имеет блокировок, не будет отображаться вообще.
Существует несколько различных типов блокируемых объектов: отношения целиком (например, таблицы), отдельные страницы отношений, отдельные кортежи отношений, идентификаторы транзакций (как виртуальные, так и постоянные) и общие объекты базы данных (идентифицируемые по OID класса и OID объекта, так же как и в pg_description или pg_depend). Также в виде отдельного блокируемого объекта представляется право на расширение отношения, как и право изменения значения pg_database.datfrozenxid. Кроме того, «необязательные» блокировки могут иметь номера, значения которых определяет пользователь.
Таблица: Столбцы pg_locks
Имя | Тип | Ссылки | Описание |
---|---|---|---|
locktype | text | Тип блокируемого объекта: relation (отношение), extend (расширение), page (страница), tuple (кортеж), transactionid (идентификатор транзакции), virtualxid (виртуальный идентификатор), object (объект), userlock (пользовательская блокировка) или advisory (необязательная) | |
database | oid | pg_database.oid | OID базы данных, в которой существует цель блокировки, или ноль, если цель является общим объектом, или NULL, если цель является идентификатором транзакции |
relation | oid | pg_class.oid | OID отношения, на которое направлена блокировка, или NULL, если цель не является отношением или частью отношения |
page | integer | Номер страницы, на которую направлена блокировка в пределах отношения, или NULL, если цель не является страницей отношения или кортежем | |
tuple | smallint | Номер кортежа, на который направлена блокировка внутри страницы, или NULL, если цель не является кортежем | |
virtualxid | text | Виртуальный идентификатор транзакции, на которую направлена блокировка, или NULL, если цель не является виртуальным идентификатором транзакции | |
transactionid | xid | Идентификатор транзакции, на которую направлена блокировка, или NULL, если цель не является идентификатором транзакции | |
classid | oid | pg_class.oid | OID системного каталога, содержащего целевой объект блокировки, или NULL, если целевой объект не является общим объектом базы данных |
objid | oid | OID любого столбца | OID целевого объекта блокировки в системном каталоге или NULL, если целевой объект не является общим объектом базы данных |
objsubid | smallint | Номер столбца, на который направлена блокировка (поля classid и objid определяют саму таблицу), или ноль, если целевой объект является каким-либо другим общим объектом базы данных, или NULL, если целевой объект не является общим объектом базы данных | |
virtualtransaction | text | Виртуальный идентификатор транзакции, которая удерживает или ожидает эту блокировку | |
pid | integer | Идентификатор серверного процесса (PID), удерживающего или ожидающего эту блокировку, или NULL, если блокировка удерживается подготовленной транзакцией | |
mode | text | Название режима блокировки, удерживаемой или ожидаемой этим процессом (см. подразделы Блокировки на уровне таблицы и Уровень изоляции Serializable) | |
granted | boolean | True, если блокировка удерживается, false, если блокировка ожидается | |
fastpath | boolean | True, если блокировка была получена быстрым путем, false, если она получена через главную таблицу блокировки |
Поле granted имеет значение true в строке, представляющей блокировку, удерживаемую указанным процессом. Значение false показывает, что этот процесс в настоящее время ожидает получения данной блокировки, свидетельствуя о том, что как минимум еще один процесс удерживает или ожидает блокировку того же объекта в конфликтном режиме. Процесс ожидания будет находиться в спящем режиме до тех пор, пока не будет снята другая блокировка (или обнаружена ситуация взаимоблокировки). Один процесс может ожидать получения не более одной блокировки за один раз.
Во время выполнения транзакции серверный процесс удерживает исключительную блокировку виртуального идентификатора транзакции. Если транзакции присваивается постоянный идентификатор (что обычно происходит только в том случае, если транзакция изменяет состояние базы данных), он также удерживает монопольную блокировку на постоянном идентификаторе транзакции до ее завершения. Когда процесс считает необходимым специально дождаться окончания другой транзакции, он делает это, пытаясь получить общую блокировку идентификатора другой транзакции (виртуального или постоянного, в зависимости от ситуации). Это произойдет только тогда, когда другая транзакция завершится и освободит свои блокировки.
Хотя кортежи являются блокируемым типом объекта, информация о блокировках на уровне строк хранится на диске, а не в памяти, и поэтому блокировки на уровне строк обычно в этом представлении не отображаются. Если процесс ожидает блокировки уровня строки, он обычно отображается в представлении как ожидающий постоянного идентификатора транзакции текущего владельца этой блокировки.
Необязательные блокировки можно получить по ключам, состоящим из одного
значения bigint или двух значений integer. При выведении ключа bigint его старшая часть отображается в столбце classid,
младшая — в столбце objid, а objsubid равен 1. Исходное значение
bigint можно собрать заново с помощью выражения (classid::bigint << 32) | objid::bigint
.
Ключи integer отображаются так: первый в столбце
classid, второй — в столбце objid, а objsubid равен 2.
Фактическое значение ключей определяет пользователь. Необязательные
блокировки являются локальными для каждой базы данных, поэтому столбец database
имеет для них значение.
pg_locks обеспечивает глобальное представление всех блокировок в кластере баз данных, а не только тех, которые относятся к текущей базе данных. Хотя через соединение столбцов relation и pg_class.oid можно определить заблокированные отношения, это будет правильно работать только для отношений в текущей базе данных (т. е. тех, для которых столбец database — это либо OID текущей базы данных, либо ноль).
Столбец pid можно соединить со столбцом pid представления pg_stat_activity, что позволит получить дополнительную информацию о сеансе, удерживающем или ожидающем каждую блокировку, например
SELECT * FROM pg_locks pl LEFT JOIN pg_stat_activity psa
ON pl.pid = psa.pid;
Кроме того, при использовании подготовленных транзакций столбец virtualtransaction можно соединить со столбцом transaction представления pg_prepared_xacts, что позволит получить дополнительную информацию об удерживающих блокировки подготовленных транзакциях. (Подготовленная транзакция не может ожидать блокировки, но она продолжает удерживать блокировки, полученные ей в процессе выполнения.) Например:
SELECT * FROM pg_locks pl LEFT JOIN pg_prepared_xacts ppx
ON pl.virtualtransaction = '-1/' || ppx.transaction;
Хотя и возможно получить информацию о том, какие из процессов блокируют другие процессы (и какие именно), соединив представление pg_locks с самим собой, крайне трудно сделать это правильно во всех деталях. Такому запросу пришлось бы кодировать знания о том, какие режимы блокировки конфликтуют с другими. Хуже того, представление pg_locks не выдает информацию ни о том, какие процессы опережают другие в очереди ожидания блокировки, ни о том, какие процессы являются параллельными рабочими процессами и от от имени каких других сеансов клиента они выполняются. Чтобы определить, каким процессом (или процессами) блокируется ожидающий процесс, лучше воспользоваться функцией pg_blocking_pids() (см. таблицу Информационные функции сеанса).
Представление pg_locks отображает данные как из диспетчера обычных блокировок, так и из диспетчера предикатных блокировок, которые являются отдельными системами; кроме того, диспетчер обычных блокировок подразделяет свои блокировки на обычные и полученные быстрым путем. Полная согласованность этих данных не гарантируется. При запросе к этому представлению данные о блокировках по быстрому пути (с fastpath = true) собираются с каждого серверного процесса по очереди, без замораживания состояние всего диспетчера блокировок, поэтому существует вероятность того, что во время сбора этой информации блокировки будут получены или освобождены. Обратите внимание, однако, что эти блокировки, как известно, не должны конфликтовать ни с какими другими действующими блокировками. После того, как во все серверные процессы были сделаны запросы для получения быстрых блокировок, оставшаяся часть диспетчера обычных блокировок блокируется как единое целое, и согласованный снимок всех оставшихся блокировок собирается атомарно. После разблокирования диспетчера обычных блокировок аналогичным образом блокируется диспетчер предикатных блокировок, и все предикатные блокировки собираются атомарно. Таким образом, за исключением быстрых блокировок, каждый диспетчер блокировок будет выдавать согласованный набор результатов, но поскольку мы не блокируем оба диспетчера блокировок одновременно, блокировки могут быть получены или освобождены после опроса диспетчера обычных блокировок и до опроса диспетчера предикатных блокировки.
Блокировка диспетчера обычных и/или предикатных блокировок может некоторым образом повлиять на производительность базы данных, если очень часто обращаться к этому представлению. Эти блокировки удерживаются не дольше, чем необходимо для получения данных от диспетчеров блокировок, но это не до конца исключает возможность влияния на производительность.
pg_matviews
Представление pg_matviews обеспечивает доступ к полезной информации о каждом материализованном представлении в базе данных.
Таблица: Столбцы pg_matviews
Имя | Тип | Ссылки | Описание |
---|---|---|---|
schemaname | name | pg_namespace.nspname | Имя схемы, содержащей материализованное представление |
matviewname | name | pg_class.relname | Имя материализованного представления |
matviewowner | name | pg_authid.rolname | Имя владельца материализованного представления |
tablespace | name | pg_tablespace.spcname | Имя табличного пространства, содержащего материализованное представление (NULL, если это пространство по умолчанию для базы данных) |
hasindexes | boolean | True, если материализованное представление имеет (или недавно имело) какие-либо индексы | |
ISP populated | boolean | True, если материализованное представление в данный момент заполнено | |
definition | text | Определение материализованного представления (реконструированный запрос SELECT ) |
pg_policies
Представление pg_policies обеспечивает доступ к полезной информации о каждой политике защиты на уровне строк в базе данных.
Таблица: Столбцы pg_policies
Имя | Тип | Ссылки | Описание |
---|---|---|---|
schemaname | name | pg_namespace.nspname | Имя схемы, содержащей таблицу с этой политикой |
tablename | name | pg_class.relname | Имя таблицы с этой политикой |
policyname | name | pg_policy.polname | Имя политики |
polpermissive | text | Является ли эта политика разрешительной или ограничительной? | |
roles | name[] | Роли, к которым применяется эта политика | |
cmd | text | Тип команды, к которой применяется эта политика | |
qual | text | Выражение, добавленное к условиям барьера безопасности для запросов, к которым применяется эта политика | |
with_check | text | Выражение, добавленное к условиям WITH CHECK для запросов, которые пытаются добавить строки в эту таблицу |
pg_prepared_statements
В представлении pg_prepared_statements отображаются все подготовленные операторы, доступные в текущем сеансе. Более подробную информацию о подготовленных операторах см. в описании команды PREPARE.
pg_prepared_statements содержит отдельную строку для каждого подготовленного оператора. Строки добавляются в представление при создании нового подготовленного оператора и удаляются при освобождении подготовленного оператора (например, с помощью команды DEALLOCATE).
Таблица: Столбцы pg_prepared_statements
Имя | Тип | Описание |
---|---|---|
name | text | Идентификатор подготовленного оператора |
statement | text | Строка запроса, отправленная клиентом для создания этого подготовленного оператора. Для подготовленных операторов, созданных посредством SQL, это команда PREPARE , инициализированная клиентом. Для подготовленных операторов, созданных посредством клиент-серверного протокола, это текст самого подготовленного оператора. |
prepare_time | timestamptz | Время, в которое был создан подготовленный оператор |
parameter_types | regtype[] | Ожидаемые типы параметров для подготовленного оператора в виде массива regtype. OID, соответствующий элементу этого массива, может быть получен путем приведения значения regtype к oid. |
from_sql | boolean | True, если подготовленный оператор был создан посредством SQL-команды PREPARE ; false, если оператор был подготовлен посредством клиент-серверного протокола |
Представление pg_prepared_statements доступно только для чтения.
pg_prepared_xacts
В представлении pg_prepared_xacts отображается информация о транзакциях, которые в настоящее время подготовлены для двухфазной фиксации (подробную информацию см. в описании команды PREPARE TRANSACTION).
pg_prepared_xacts содержит отдельную строку для каждой подготовленной транзакции. Запись удаляется при фиксации или откате транзакции.
Таблица: Столбцы pg_prepared_xacts
Имя | Тип | Ссылки | Описание |
---|---|---|---|
transaction | xid | Числовой идентификатор подготовленной транзакции | |
gid | text | Глобальный идентификатор, присвоенный этой транзакции | |
prepared | timestamp with time zone | Время, в которое эта транзакция была подготовлена к фиксации | |
owner | name | pg_authid.rolname | Имя пользователя, выполнившего эту транзакцию |
database | name | pg_database.datname | Имя базы данных, в которой была выполнена эта транзакция |
При обращении к представлению pg_prepared_xacts внутренние структуры данных диспетчера транзакций на мгновение блокируются, а для отображения в представлении создается копия. Это гарантирует, что представление создает согласованный набор результатов, не блокируя при этом обычные операции дольше, чем это необходимо. Тем не менее, при частых обращениях к этому представлению это может некоторым образом сказаться на производительности базы данных.
pg_publication_tables
Представление pg_publication_tables выдает информацию о сопоставлении публикаций и таблиц, которые они содержат. В отличие от нижележащего каталога pg_publication_rel, это представление расширяет список публикаций, определенных как FOR ALL TABLES, поэтому для таких публикаций будет наличествовать строка для каждой соответствующей таблицы.
Таблица: Столбцы pg_publication_tables
Имя | Тип | Ссылки | Описание |
---|---|---|---|
pubname | name | pg_publication.pubname | Имя публикации |
schemaname | name | pg_namespace.nspname | Имя схемы, содержащей таблицу |
tablename | name | pg_class.relname | Имя таблицы |
pg_replication_origin_status
В представлении pg_replication_origin_status содержится информация о прогрессе воспроизведения записей репликации, достигнутом для определенного источника.
Таблица: Столбцы pg_replication_origin_status
Имя | Тип | Ссылки | Описание |
---|---|---|---|
local_id | oid | pg_replication_origin.roident | Внутренний идентификатор узла |
external_id | text | pg_replication_origin.roname | Идентификатор внешнего узла |
remote_lsn | pg_lsn | LSN исходного узла, до которого были реплицированы данные. | |
local_lsn | pg_lsn | LSN этого узла, в котором был реплицирован remote_lsn. Используется при асинхронной фиксации для сброса записей фиксации на диск перед сохранением данных. |
pg_replication_slots
Представление pg_replication_slots выдает список всех слотов репликации, которые в настоящее время существуют в кластере баз данных, а также их текущее состояние.
Таблица: Столбцы pg_replication_slots
Имя | Тип | Ссылки | Описание |
---|---|---|---|
slot_name | name | Уникальный внутрикластерный идентификатор для слота репликации | |
plugin | name | Базовое имя разделяемого объекта, содержащего модуль вывода, который использует этот логический слот, или NULL для физических слотов. | |
slot_type | text | Тип слота — physical (физический) или logical (логический) | |
datoid | oid | pg_database.oid | OID базы данных, с которой связан этот слот, или NULL. Только логические слоты могут быть связаны с базой данных. |
database | text | pg_database.datname | Имя базы данных, с которой связан этот слот, или NULL. Только логические слоты могут быть связаны с базой данных. |
temporary | boolean | True, если это слот временной репликации. Временные слоты не сохраняются на диске и автоматически удаляются при ошибке или по завершении сеанса. | |
active | boolean | True, если этот слот в настоящий момент активно используется | |
active_pid | integer | Идентификатор процесса сеанса, использующего этот слот, если тот в настоящий момент активно используется. NULL если слот не используется. | |
xmin | xid | Старейшая транзакция, которую этот слот должен сохранить в базе данных. Команда VACUUM не сможет удалить кортежи, удаленные любой более поздней транзакцией. | |
catalog_xmin | xid | Старейшая транзакция, влияющая на системные каталоги, которые этот слот должен сохранить в базе данных. Команда VACUUM не сможет удалить кортежи каталога, удаленные любой более поздней транзакцией. | |
restart_lsn | pg_lsn | Адрес (LSN) старейшей записи в WAL, которая все еще может понадобиться пользователю этого слота и поэтому не будет автоматически удалена во время контрольных точек. NULL, если LSN этого слота никогда не был зарезервирован. | |
confirmed_flush_lsn | pg_lsn | Адрес (LSN), до которого пользователь логического слота подтвердил получение данных. Данные старее этого LSN уже не доступны. NULL для физических слотов. |
pg_roles
Представление pg_roles обеспечивает доступ к информации о ролях базы данных. Это просто доступное для всех представление pg_authid, которое скрывает поле пароля.
Таблица: Столбцы pg_roles
Имя | Тип | Ссылки | Описание |
---|---|---|---|
rolname | name | Имя роли | |
rolsuper | bool | Роль имеет права суперпользователя | |
rolinherit | bool | Роль автоматически наследует права ролей, членом которых является | |
rolcreaterole | bool | Роль может создавать другие роли | |
rolcreatedb | bool | Роль может создавать базы данных | |
rolcanlogin | bool | Роль может войти в систему. То есть эта роль может быть задана в качестве начального идентификатора авторизации сеанса | |
rolreplication | bool | Роль является ролью репликации. Роль репликации может запускать соединения для репликации и создавать и удалять слоты репликации. | |
rolconnlimit | int4 | Для ролей, которые могут войти в систему, задает максимальное число одновременных подключений, которые может создать эта роль. -1 означает отсутствие ограничений. | |
rolpassword | text | Не пароль (всегда читается как ********) | |
rolvaliduntil | timestamptz | Срок действия пароля (используется только для аутентификации по паролю); NULL, если срок не ограничен | |
rolbypassrls | bool | Роль обходит любую политику защиты уровня строки; дополнительную информацию см. в разделе Политики защиты строк. | |
rolconfig | text[] | Заданные для роли значения по умолчанию переменных конфигурации времени выполнения | |
oid | oid | pg_authid.oid | Идентификатор роли |
pg_rules
Представление pg_rules обеспечивает доступ к полезной информации о правилах перезаписи запросов.
Таблица: Столбцы pg_rules
Имя | Тип | Ссылки | Описание |
---|---|---|---|
schemaname | name | pg_namespace.nspname | Имя схемы, содержащей таблицу |
tablename | name | pg_class.relname | Имя таблицы, для которой используется это правило |
rulename | name | pg_rewrite.rulename | Имя правила |
definition | text | Определение правила (реконструированная команда создания) |
Из представления pg_rules исключены правила ON SELECT для представлений и материализованных представлений; их можно увидеть в pg_views и pg_matviews.
pg_seclabels
Представление pg_seclabels предоставляет информацию о метках безопасности. Это более простая для обращения версия каталога pg_seclabel.
Таблица: Столбцы pg_seclabels
Имя | Тип | Ссылки | Описание |
---|---|---|---|
objoid | oid | OID любого столбца | OID объекта, к которому относится эта метка безопасности |
classoid | oid | pg_class.oid | OID системного каталога, в котором отображается этот объект |
objsubid | int4 | Для метки безопасности в столбце таблицы это номер столбца (objoid и classoid указывают на саму таблицу). Для всех других типов объектов этот столбец содержит нуль. | |
objtype | text | Тип объекта, к которому применяется эта метка, в текстовом виде. | |
objnamespace | oid | pg_namespace.oid | OID пространства имен для этого объекта, если применимо; иначе NULL. |
objname | text | Имя объекта, к которому применяется эта метка, в текстовом виде. | |
provider | text | pg_seclabel.provider | Поставщик меток безопасности, связанный с этой меткой. |
label | text | pg_seclabel.label | Метка безопасности, применяемая к этому объекту. |
pg_sequences
Представление pg_sequences обеспечивает доступ к полезной информации о каждой последовательности в базе данных.
Таблица: Столбцы pg_sequences
Имя | Тип | Ссылки | Описание |
---|---|---|---|
schemaname | name | pg_namespace.nspname | Имя схемы, содержащей последовательность |
sequencename | name | pg_class.relname | Имя последовательности |
sequenceowner | name | pg_authid.rolname | Имя владельца последовательности |
data_type | regtype | pg_type.oid | Тип данных последовательности |
start_value | bigint | Начальное значение последовательности | |
min_value | bigint | Минимальное значение последовательности | |
max_value | bigint | Максимальное значение последовательности | |
increment_by | bigint | Значение приращения последовательности | |
cycle | boolean | Зацикливается ли последовательность | |
cache_size | bigint | Размер кэша последовательности | |
last_value | bigint | Последнее значение последовательности, записанное на диск. Если используется кэширование, это значение может быть больше, чем последнее значение, полученное из последовательности. NULL, если последовательность еще не была прочитана. Также содержит NULL, если текущий пользователь не имеет для последовательности прав USAGE или SELECT. |
pg_settings
Представление pg_setting обеспечивает доступ к параметрам времени выполнения
сервера. В сущности это альтернативный интерфейс к командам SHOW и
SET. Также оно обеспечивает доступ к некоторым фактам о каждом
параметре, которые нельзя получить напрямую при помощи команды SHOW
,
например, минимальные и максимальные значения.
Таблица: Столбцы pg_settings
Имя | Тип | Описание |
---|---|---|
name | text | Имя параметра конфигурации времени выполнения |
setting | text | Текущее значение параметра |
unit | text | Неявно подразумеваемая единица измерения параметра |
category | text | Логическая группа параметра |
short_desc | text | Краткое описание параметра |
extra_desc | text | Дополнительное, более детальное, описание параметра |
context | text | Контекст, необходимый для установки значения параметра (см. ниже) |
vartype | text | Тип параметра (bool, enum, integer, real или string) |
source | text | Источник текущего значения параметра |
min_val | text | Минимальное допустимое значение параметра (NULL для нечисловых значений) |
max_val | text | Максимально допустимое значение параметра (NULL для нечисловых значений) |
enumvals | text[] | Допустимые значения параметра-перечисления (NULL для значений не перечислений) |
boot_val | text | Значение параметра, принимаемое при запуске сервера, если параметр не задан иным образом |
reset_val | text | Значение, к которое параметр будет сброшен командой RESET в текущем сеансе |
sourcefile | text | Файл конфигурации, в котором было задано текущее значение (NULL для значений, полученных не из файлов конфигурации, или при проверке пользователем, который не является ни суперпользователем, ни членом роли pg_read_all_settings); полезно при использовании указаний include в файлах конфигурации |
sourceline | integer | Номер строки в файле конфигурации, в котором было задано текущее значение (NULL для значений, полученных не из файлов конфигурации, или при проверке пользователем, который не является ни суперпользователем, ни членом роли pg_read_all_settings). |
pending_restart | boolean | True, если значение было изменено в файле конфигурации, но требуется перезапуск; иначе — false. |
Существует несколько возможных значений контекста. В порядке уменьшения сложности изменения параметров, ими являются:
internal
Эти параметры нельзя изменить непосредственно; они отражают значения, определенные внутри системы. Некоторые из них можно изменить, пересобрав сервер с другими параметрами конфигурации, или изменив параметры, передаваемые в qhb_bootstrap.
postmaster
Эти параметры можно применять только при запуске сервера, поэтому любое изменение требует его перезагрузки. Значения для этих параметров обычно хранятся в файле qhb.conf либо передаются в командной строке при запуске сервера. Разумеется, параметры любого из нижеследующих типов context также можно задать во время запуска сервера.
sighup
Изменения этих параметров можно вносить в qhb.conf без перезагрузки сервера. Если послать в qhbmaster (управляющий процесс) сигнал SIGHUP, он перечитает qhb.conf и применит изменения. Qhbmaster также перешлет сигнал SIGHUP своим дочерним процессам, чтобы все они приняли новое значение.
superuser-backend
Изменения этих параметров можно вносить в qhb.conf без перезагрузки сервера. Они также могут быть установлены для определенного сеанса в пакете запроса на подключение (например, через переменную окружения PGOPTIONS), но только если подключающийся пользователь является суперпользователем. Однако эти параметры никогда не изменяются в сеансе после его запуска. Если вы измените их внутри qhb.conf, отправьте сигнал SIGHUP в qhbmaster, чтобы тот перечитал qhb.conf. Новые значения будут влиять только на сеансы, запускаемые впоследствии.
backend
Изменения этих параметров можно вносить в qhb.conf без перезагрузки сервера. Они также могут быть установлены для определенного сеанса в пакете запроса на подключение (например, через переменную окружения PGOPTIONS); любой пользователь может внести такое изменение для своей сессии. Однако эти параметры никогда не изменяются в сеансе после его запуска. Если вы измените их внутри qhb.conf, отправьте сигнал SIGHUP в qhbmaster, чтобы тот перечитал qhb.conf. Новые значения будут влиять только на сеансы, запускаемые впоследствии.
superuser
Эти параметры можно задать из qhb.conf или в рамках сеанса
с помощью команды SET
, но только суперпользователи могут изменить их
посредством SET
. Изменения в qhb.conf будут влиять на
существующие сеансы только в том случае, если в них командой SET
не были
заданы локальные в рамках сеанса значения.
user
Эти параметры можно задать из qhb.conf или в рамках сеанса
с помощью команды SET
. В рамках сеанса их локальное значение может
изменить любой пользователь. Изменения в qhb.conf будут влиять на
существующие сеансы только в том случае, если в них командой SET
не были
заданы локальные в рамках сеанса значения.
Более подробную информацию о различных способах изменения этих параметров см. в разделе Настройка параметров.
Представление pg_settings нельзя вставить или удалить, но его можно
изменить. Команда UPDATE
, примененная к pg_settings, равнозначна
выполнению команды SET для этого конкретного параметра. Это изменение
влияет только на значение, используемое в текущем сеансе. Если команда
UPDATE
выполняется в рамках транзакции, которая затем прерывается,
эффекты UPDATE
пропадают при откате транзакции. После фиксации окружающей
транзакции эти эффекты сохранятся до конца сеанса, если только не будут
переопределены другой командой UPDATE
или SET
.
pg_shadow
В представлении pg_shadow показаны свойства всех ролей, которые помечены как rolcanlogin в pg_authid.
Такое имя («тень») обусловлено тем фактом, что эта таблица не должна быть доступна для чтения любому пользователю, поскольку она содержит пароли. pg_user — это доступное всем представление для pg_shadow, в котором стерто поле пароля.
Таблица: Столбцы pg_shadow
Имя | Тип | Ссылки | Описание |
---|---|---|---|
usename | name | pg_authid.rolname | Имя пользователя |
usesysid | oid | pg_authid.oid | Идентификатор этого пользователя |
usecreatedb | bool | Пользователь может создавать базы данных | |
usesuper | bool | Пользователь является суперпользователем | |
userepl | bool | Пользователь может инициировать потоковую репликацию и включать и выключать в системе режим резервного копирования. | |
usebypassrls | bool | Пользователь обходит любую политику защиты на уровне строк; дополнительную информацию см. в разделе Политики защиты строк. | |
passwd | text | Пароль (возможно зашифрованный); NULL, если пароля нет. Подробную информацию о том, как хранятся зашифрованные пароли, см. в описании каталога pg_authid. | |
valuntil | timestamptz | Срок действия пароля (используется только для аутентификации по паролю) | |
useconfig | text[] | Сеансовые значения по умолчанию для переменных конфигурации времени выполнения |
pg_stats
Представление pg_stats обеспечивает доступ к информации, хранящейся в каталоге pg_statistic. Это представление позволяет получить доступ только к строкам pg_statistic, соответствующим таблицам, которые пользователь может читать; таким образом, можно без опасений разрешить публичный доступ для чтения к этому представлению.
pg_stats также предназначено для представления информации в более удобочитаемом формате, чем нижележащий каталог, — за счет того, что схему этого представления необходимо расширять всякий раз, когда для pg_statistic определяются новые типы слотов.
Таблица: Столбцы pg_stats
Имя | Тип | Ссылки | Описание |
---|---|---|---|
schemaname | name | pg_namespace.nspname | Имя схемы, содержащей таблицу |
tablename | name | pg_class.relname | Имя таблицы |
attname | name | pg_attribute.attname | Имя столбца, описываемого этой строкой |
inherited | bool | Если true, то данные этой строки включают значения в дочерних столбцах наследования, а не только в указанной таблице | |
null_frac | real | Доля записей столбцов, имеющих значение NULL | |
avg_width | integer | Средняя ширина записей столбца в байтах | |
n_distinct | real | Если больше нуля, то показывает примерное число различных значений в столбце. Если меньше нуля, то модуль числа показывает количество различных значений, разделенное на число строк. (Отрицательная форма используется, когда ANALYZE считает, что число различных значений, вероятно, будет увеличиваться по мере роста таблицы; положительная форма используется, когда считается, что столбец имеет фиксированное число возможных значений.) Например, значение -1 указывает на уникальный столбец, в котором число различных значений совпадает с числом строк. | |
most_common_vals | anyarray | Список наиболее распространенных значений в столбце. (NULL, если значения, встречающиеся чаще других, не обнаруживаются.) | |
most_common_freqs | real[] | Список частот наиболее распространенных значений, т. е. количество вхождений каждого значения, деленное на общее количество строк. (NULL, если most_common_vals содержит NULL.) | |
histogram_bounds | anyarray | Список значений, разделяющих значения столбца на группы примерно одинаковой популяции. Значения most_common_vals, если они присутствует, исключаются из этого расчета гистограммы. (Этот столбец содержит NULL, если тип данных столбца не имеет оператора < или если список most_common_vals охватывает все популяции.) | |
correlation | real | Статистическая корреляция между физическим упорядочением строк и логическим упорядочением значений столбцов. Диапазон допустимых значений: от -1 до +1. Когда значение близко к -1 или +1, сканирование индекса по столбцу будет оценено как более дешевое, чем когда оно близко к нулю, вследствие уменьшения случайного доступа к диску. (Столбец имеет значение NULL, если тип данных столбца не имеет оператора <.) | |
most_common_elems | anyarray | Список ненулевых значений элементов, наиболее часто появляющихся в пределах значений столбца. (NULL для скалярных типов.) | |
most_common_elem_freqs | real[] | Список частот наиболее распространенных значений элементов, т. е. доля строк, содержащих хотя бы один экземпляр данного значения. За частотами каждого элемента следуют два или три дополнительных значения; это минимум и максимум предыдущих частот каждого элемента и (необязательно) частота элементов NULL. (NULL, когда most_common_elems содержит NULL.) | |
elem_count_histogram | real[] | Гистограмма подсчетов различных значений элементов, отличных от NULL, в пределах значений столбца, за которой следует среднее количество различных элементов, отличных от NULL. (NULL для скалярных типов.) |
Максимальным числом записей в полях массива можно управлять на уровне
столбцов с помощью команды ALTER TABLE SET STATISTICS
или глобально,
задавая параметр времени выполнения default_statistics_target.
pg_stats_ext
Представление pg_stats_ext обеспечивает доступ к информации, хранящейся в каталогах pg_statistic_ext и pg_statistic_ext_data. Это представление дает доступ только к тем строкам pg_statistic_ext и pg_statistic_ext_data, которые соответствуют таблицам, которые пользователь может читать; таким образом, можно без опасений разрешить публичный доступ на чтение к этому представлению.
pg_stats_ext также предназначено для представления информации в более удобочитаемом формате, чем нижележащие каталоги, — за счет того, что схему этого представления необходимо расширять всякий раз, когда в pg_statistic_ext добавляются новые типы расширенной статистики.
Таблица: Столбцы pg_stats_ext
Имя | Тип | Ссылки | Описание |
---|---|---|---|
schemaname | name | pg_namespace.nspname | Имя схемы, содержащей таблицу |
tablename | name | pg_class.relname | Имя таблицы |
statistics_schemaname | name | pg_namespace.nspname | Имя схемы, содержащей расширенную статистику |
statistics_name | name | pg_statistic_ext.stxname | Имя расширенной статистики |
statistics_owner | oid | pg_authid.oid | Владелец расширенной статистики |
attnames | name[] | pg_attribute.attname | Имена столбцов, для которых определена расширенная статистика |
kinds | text[] | Типы расширенной статистики, включенные для этой записи | |
n_distinct | pg_ndistinct | Количество различных комбинаций значений столбцов. Если больше нуля, то показывает примерное число различных значений в комбинации. Если меньше нуля, то модуль числа показывает количество различных значений, разделенное на число строк. (Отрицательная форма используется, когда ANALYZE считает, что число различных значений, вероятно, будет увеличиваться по мере роста таблицы; положительная форма используется, когда считается, что столбец имеет фиксированное число возможных значений.) Например, значение -1 указывает на уникальный столбец, в котором число различных значений совпадает с числом строк. | |
dependencies | pg_dependencies | Статистика для функциональной зависимости | |
most_common_vals | anyarray | Список наиболее распространенных комбинаций значений в столбцах. (NULL, если комбинации, встречающиеся чаще других, не обнаруживаются.) | |
most_common_val_nulls | anyarray | Список флагов NULL для наиболее распространенных комбинаций значений. (NULL, если most_common_vals содержит NULL) | |
most_common_freqs | real[] | Список частот наиболее распространенных комбинаций, т. е. количество вхождений каждой, деленное на общее количество строк. (NULL, если most_common_vals содержит NULL) | |
most_common_base_freqs | real[] | Список базовых частот наиболее распространенных комбинаций, т. е. произведение частот отдельных значений. (NULL, если most_common_vals содержит NULL) |
Максимальным числом записей в полях массива можно управлять на уровне
столбцов с помощью команды ALTER TABLE SET STATISTICS
или глобально,
задав параметр времени выполнения default_statistics_target.
pg_tables
Представление pg_tables обеспечивает доступ к полезной информации о каждой таблице в базе данных.
Таблица: Столбцы pg_tables
Имя | Тип | Ссылки | Описание |
---|---|---|---|
schemaname | name | pg_namespace.nspname | Имя схемы, содержащей таблицу |
tablename | name | pg_class.relname | Имя таблицы |
tableowner | name | pg_authid.rolname | Имя владельца таблицы |
tablespace | name | pg_tablespace.spcname | Имя табличного пространства, содержащего таблицу (NULL, если это пространство по умолчанию для базы данных) |
hasindexes | boolean | pg_class.relhasindex | True, если таблица имеет (или недавно имела) какие-либо индексы |
hasrules | boolean | pg_class.relhasrules | True, если таблица имеет (или когда-то имела) правила |
hastriggers | boolean | pg_class.реластриггеры | True, если таблица имеет (или когда-то имела) триггеры |
rowsecurity | boolean | pg_class.relrowsecurity | True, если в таблице включена защита уровня строк |
pg_timezone_abbrevs
Представление pg_timezone_abbrevs содержит список сокращений часовых поясов, которые в настоящее время верно распознаются функциями ввода даты/времени. Содержание этого представления изменяется при изменении параметра времени выполнения timezone_abbreviations.
Таблица: Столбцы pg_timezone_abbrevs
Имя | Тип | Описание |
---|---|---|
abbrev | text | Аббревиатура часового пояса |
utc_offset | interval | Смещение от UTC (положительное значение означает на восток от Гринвича) |
is_dst | boolean | True, если это аббревиатура задает летнее время |
Хотя большинство сокращений часовых поясов представляют собой фиксированные смещения от UTC, в некоторых поясах значение смещения менялось в ходе истории. В таких случаях это представление содержит их текущее значение.
pg_timezone_names
Представление pg_timezone_names содержит список имен часовых поясов,
которые распознаются командой SET TIMEZONE
, а также связанные
с ними сокращения, смещения UTC и статус летнего времени. (Технически
QHB не использует UTC, потому что високосные секунды не
обрабатываются). В отличие от сокращений, показанных в
pg_timezone_abbrevs, многие из этих имен подразумевают набор правил
перехода на летнее время. Поэтому связанная информация изменяется при
пересечении локальных границ перехода на летнее время. Отображаемая информация вычисляется на
основе текущего значения параметра CURRENT_TIMESTAMP.
Таблица: Столбцы pg_timezone_names
Имя | Тип | Описание |
---|---|---|
name | text | Название часового пояса |
abbrev | text | Аббревиатура часового пояса |
utc_offset | интервал | Смещение от UTC (положительное значение означает восток от Гринвича) |
is_dst | boolean | True, если в данный момент установлено летнее время |
pg_user
Представление pg_user обеспечивает доступ к информации о пользователях базы данных. Это просто общедоступное представление каталога pg_shadow, в котором скрыто поле пароля.
Таблица: Столбцы pg_user
Имя | Тип | Описание |
---|---|---|
usename | name | Имя пользователя |
usesysid | oid | Идентификатор этого пользователя |
usecreatedb | bool | Пользователь может создавать базы данных |
usesuper | bool | Пользователь является суперпользователем |
userepl | bool | Пользователь может инициировать потоковую репликацию и включать и выключать режим резервного копирования в системе. |
usebypassrls | bool | Пользователь обходит каждую политику защиты уровня строк; дополнительную информацию см. в разделе Политики защиты строк. |
passwd | text | Не пароль (всегда читается как ********) |
valuntil | timestamptz | Срок действия пароля (используется только для аутентификации по паролю) |
useconfig | text[] | Значения по умолчанию сеанса для переменных конфигурации времени выполнения |
pg_user_mappings
Представление pg_user_mappings обеспечивает доступ к информации о сопоставлениях пользователей. По сути это общедоступное представление каталога pg_user_mapping, которое не показывает поле параметров, если у пользователя нет прав на его использование.
Таблица: Столбцы pg_user_mappings
Имя | Тип | Ссылки | Описание |
---|---|---|---|
umid | oid | pg_user_mapping.oid | OID сопоставления пользователей |
srvid | oid | pg_foreign_server.oid | OID стороннего сервера, содержащего это сопоставление |
srvname | name | pg_foreign_server.srvname | Имя стороннего сервера |
umuser | oid | pg_authid.oid | OID сопоставляемой локальной роли; 0, если сопоставление пользователей задается для всех |
usename | name | Имя локального пользователя для сопоставления | |
umoptions | text[] | Специфические параметры сопоставления пользователей в виде строки «ключ=значение» |
Чтобы защитить информацию о пароле, сохраненную в качестве параметра сопоставления пользователей, столбец umoptions будет считываться как NULL, если не применяется одно из следующих условий:
-
текущий пользователь является сопоставляемым пользователем, который владеет сервером или имеет для него право USAGE
-
текущий пользователь является владельцем сервера и прочитывается сопоставление для PUBLIC
-
текущий пользователь является суперпользователем
pg_views
Представление pg_views обеспечивает доступ к полезной информации о каждом представлении в базе данных.
Таблица: Столбцы pg_views
Имя | Тип | Ссылки | Описание |
---|---|---|---|
schemaname | name | pg_namespace.nspname | Имя схемы, содержащей представление |
viewname | name | pg_class.relname | Имя представления |
viewowner | name | pg_authid.rolname | Имя владельца представления |
определение | text | Определение представления (реконструированный запрос SELECT ) |