pg_settings
Представление pg_settings
предоставляет доступ к параметрам сервера во время выполнения. По сути, это альтернативный интерфейс для команд SHOW
и SET
. Оно также предоставляет доступ к некоторым фактам о каждом параметре, которые не доступны напрямую из SHOW
, например, минимальные и максимальные значения.
Столбец | Тип данных | Описание |
---|---|---|
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 | Минимально допустимое значение параметра (нулевое для нечисловых значений) |
max_val | text | Максимально допустимое значение параметра (нулевое для нечисловых значений) |
enumvals | text[] | Допустимые значения параметра enum (нулевое значение для значений, не входящих в enum) |
boot_val | text | Значение параметра, предполагаемое при запуске сервера, если параметр не установлен иначе |
reset_val | text | Значение, к которому RESET сбросит параметр в текущем сеансе |
sourcefile | text | Файл конфигурации, в котором было установлено текущее значение (нулевое значение для значений, установленных из источников, отличных от файлов конфигурации, или при проверке пользователем, который не является суперпользователем и не имеет привилегий pg_read_all_settings); полезно при использовании включить директивы в файлы конфигурации |
sourceline | int4 | Номер строки в конфигурационном файле, в котором было установлено текущее значение (нулевое для значений, установленных из источников, отличных от конфигурационных файлов, или при проверке пользователем, который не является суперпользователем и не имеет привилегий pg_read_all_settings) |
pending_restart | bool | true, если значение было изменено в конфигурационном файле, но требует перезапуска; или false в противном случае |
Существует несколько возможных значений контекста. В порядке уменьшения сложности изменения настройки они следующие:
-
internal: эти параметры нельзя изменить напрямую; они отражают внутренние значения. Некоторые из них можно изменить, пересобрав сервер с другими параметрами конфигурации или изменив параметры, передаваемые в
initdb
. -
postmaster: эти настройки могут быть применены только при запуске сервера, поэтому для их изменения необходимо перезапустить сервер. Значения этих настроек обычно хранятся в файле postgresql.conf или передаются в командной строке при запуске сервера. Разумеется, настройки любого из нижних типов контекста также могут быть установлены при запуске сервера.
-
sighup: изменения в этих настройках можно внести в файл
postgresql.conf
без перезапуска сервера. Пошлите сигнал SIGHUP постмастеру, чтобы заставить его перечитатьpostgresql.conf
и применить изменения. Постмастер также передаст сигнал SIGHUP своим дочерним процессам, чтобы все они приняли новое значение. -
superuser-backend: изменения этих настроек можно внести в файл
postgresql.conf
без перезапуска сервера. Они также могут быть установлены для конкретной сессии в пакете запроса на соединение (например, через переменную среды PGOPTIONS в libpq), но только если подключающийся пользователь является суперпользователем или ему предоставлена соответствующая привилегия SET. Однако эти настройки никогда не меняются в сессии после ее запуска. Если изменить их вpostgresql.conf
, отправьте сигнал SIGHUP постмастеру, чтобы заставить его перечитатьpostgresql.conf
. Новые значения повлияют только на недавно запущенные сеансы. -
backendd: изменения этих настроек можно внести в файл
postgresql.conf
без перезапуска сервера. Они также могут быть заданы для конкретной сессии в пакете запроса на соединение (например, через переменную окружения PGOPTIONS в libpq); любой пользователь может внести такое изменение для своей сессии. Однако эти настройки никогда не меняются в сессии после ее запуска. Если изменить их вpostgresql.conf
, отправьте сигнал SIGHUP постмастеру, чтобы он перечиталpostgresql.conf
. Новые значения повлияют только на запущенные впоследствии сессии. -
superuser: эти параметры можно задать в файле
postgresql.conf
или внутри сеанса с помощью команды SET; но изменить их с помощью SET могут только суперпользователи и пользователи с соответствующими привилегиями. Изменения в postgresql.conf повлияют на существующие сессии только в том случае, если с помощью SET не было установлено локальное значение сессии. -
user: эти параметры можно задать из файла
postgresql.conf
или внутри сеанса с помощью команды SET. Любой пользователь может изменять свое значение session-local. Изменения в postgresql.conf повлияют на существующие сеансы только в том случае, если значение session-local не было установлено с помощью SET.
Это представление нельзя вставить или удалить, но его можно обновить. UPDATE, примененный к строке pg_settings, эквивалентен выполнению команды SET для этого именованного параметра. Изменение затрагивает только значение, используемое в текущем сеансе. Если UPDATE выполняется в транзакции, которая впоследствии прерывается, эффект от команды UPDATE исчезает при откате транзакции. После фиксации транзакции эффекты сохраняются до конца сеанса, если они не отменены другим UPDATE или SET.
Это представление не отображает настраиваемые опции, если модуль расширения, определяющий их, не был загружен внутренним процессом, выполняющим запрос (например, через упоминание в shared_preload_libraries
, вызов функции C в расширении или команду LOAD
. Например, поскольку архивные модули обычно загружаются только процессом архиватора, а не обычными сессиями, это представление не будет отображать опции пользователя, определенные такими модулями, если не предпринять специальных действий для их загрузки в процесс бэкенда, выполняющий запрос.