53.1. Обзор

В Таблице 53.1 перечислены системные каталоги. Подробное описание каждого каталога следует далее.

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

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

Имя каталогаПредназначение
pg_aggregateагрегатные функции
pg_amиндексные методы доступа
pg_amopоператоры методов доступа
pg_amprocопорные функции методов доступа
pg_attrdefзначения столбцов по умолчанию
pg_attributeстолбцы таблиц («атрибуты»)
pg_authidидентификаторы для авторизации (роли)
pg_auth_membersотношения членства для объектов авторизации
pg_castприведения (преобразования типов данных)
pg_classтаблицы, индексы, последовательности, представления («отношения»)
pg_collationправила сортировки (параметры локали)
pg_constraintограничения-проверки, ограничения уникальности, ограничения первичного ключа и внешних ключей
pg_conversionинформация о перекодировках
pg_databaseбазы данных в этом кластере
pg_db_role_settingпараметры, задаваемые на уровне ролей и баз данных
pg_default_aclправа по умолчанию для различных типов объектов
pg_dependзависимости между объектами базы данных
pg_descriptionописания или комментарии к объектам базы данных
pg_enumопределения меток и значений перечислений
pg_event_triggerсобытийные триггеры
pg_extensionустановленные расширения
pg_foreign_data_wrapperопределения обёрток сторонних данных
pg_foreign_serverопределения сторонних серверов
pg_foreign_tableдополнительные свойства сторонних таблиц
pg_indexдополнительные свойства индексов
pg_inheritsиерархия наследования таблиц
pg_init_privsначальные права для объектов
pg_languageязыки для написания функций
pg_largeobjectстраницы данных для больших объектов
pg_largeobject_metadataметаданные для больших объектов
pg_namespaceсхемы
pg_opclassклассы операторов методов доступа
pg_operatorоператоры
pg_opfamilyсемейства операторов методов доступа
pg_partitioned_tableинформация о ключах разбиения таблиц
pg_pltemplateданные шаблонов для процедурных языков
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_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сопоставления пользователей для сторонних серверов

45.4. Expressions

All expressions used in PL/pgSQL statements are processed using the server's main SQL executor. For example, when you write a PL/pgSQL statement like

IF expression THEN ...

PL/pgSQL will evaluate the expression by feeding a query like

SELECT expression

to the main SQL engine. While forming the SELECT command, any occurrences of PL/pgSQL variable names are replaced by query parameters, as discussed in detail in Section 45.12.1. This allows the query plan for the SELECT to be prepared just once and then reused for subsequent evaluations with different values of the variables. Thus, what really happens on first use of an expression is essentially a PREPARE command. For example, if we have declared two integer variables x and y, and we write

IF x < y THEN ...

what happens behind the scenes is equivalent to

PREPARE statement_name(integer, integer) AS SELECT $1 < $2;

and then this prepared statement is EXECUTEd for each execution of the IF statement, with the current values of the PL/pgSQL variables supplied as parameter values. Normally these details are not important to a PL/pgSQL user, but they are useful to know when trying to diagnose a problem. More information appears in Section 45.12.2.

Since an expression is converted to a SELECT command, it can contain the same clauses that an ordinary SELECT would, except that it cannot include a top-level UNION, INTERSECT, or EXCEPT clause. Thus for example one could test whether a table is non-empty with

IF count(*) > 0 FROM my_table THEN ...

since the expression between IF and THEN is parsed as though it were SELECT count(*) > 0 FROM my_table. The SELECT must produce a single column, and not more than one row. (If it produces no rows, the result is taken as NULL.)