Перейти к основному содержимому

pg_settings

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

СтолбецТип данныхОписание
nametextИмя параметра конфигурации во время выполнения
settingtextТекущее значение параметра
unittextНеявная единица параметра
categorytextЛогическая группа параметра
short_desctextКраткое описание параметра
extra_desctextДополнительно, более подробно, описание параметра
contexttextКонтекст, необходимый для установки значения параметра (см. ниже)
vartypetextТип параметра (bool, enum, integer, real или string)
sourcetextИсточник текущего значения параметра
min_valtextМинимально допустимое значение параметра (нулевое для нечисловых значений)
max_valtextМаксимально допустимое значение параметра (нулевое для нечисловых значений)
enumvalstext[]Допустимые значения параметра enum (нулевое значение для значений, не входящих в enum)
boot_valtextЗначение параметра, предполагаемое при запуске сервера, если параметр не установлен иначе
reset_valtextЗначение, к которому RESET сбросит параметр в текущем сеансе
sourcefiletextФайл конфигурации, в котором было установлено текущее значение (нулевое значение для значений, установленных из источников, отличных от файлов конфигурации, или при проверке пользователем, который не является суперпользователем и не имеет привилегий pg_read_all_settings); полезно при использовании включить директивы в файлы конфигурации
sourcelineint4Номер строки в конфигурационном файле, в котором было установлено текущее значение (нулевое для значений, установленных из источников, отличных от конфигурационных файлов, или при проверке пользователем, который не является суперпользователем и не имеет привилегий pg_read_all_settings)
pending_restartbooltrue, если значение было изменено в конфигурационном файле, но требует перезапуска; или 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. Например, поскольку архивные модули обычно загружаются только процессом архиватора, а не обычными сессиями, это представление не будет отображать опции пользователя, определенные такими модулями, если не предпринять специальных действий для их загрузки в процесс бэкенда, выполняющий запрос.