четверг, 10 января 2013 г.

18.1. Настройка параметров

Все имена параметров чувствительны к регистру. Каждый параметр принимает значение одного из пяти типов: boolean, integer, floating point, string или enum. Логические (boolean) значения могут быть заданы как on, off, true, false, yes, no, 1, 0 (вне зависимости от региста) или как их однозначное сокращение.

Некоторые настройки определяют значения памяти или времени. Каждая из них имеет свою единицу измерения: килобайты, блоки (обычно это 8 килобайт), миллисекунды, секунды или минуты.  Единицы измерения по умолчанию можно увидеть в pg_settings.unit. Для удобства единицу измерения можно и явно указать. Допустимые значения объёмов памяти - kB (килобайты), MB (мегабайты), GB (гигабайты); для времени - ms (миллисекунды), s (секунды), min (минуты), h (часы) и d (дни). Обратите внимание, что для памяти используется множитель 1024, не 1000.
Параметр типа enum определяется так же, как и строковый параметр, но его доступные значения ограничены набором значений. Допустимые значения перечислены в pg_settings.enumvals. Эти параметры не зависят от регистра.
Один из способов задать эти параметры - отредактировать файл postgresql.conf, который скорее всего находится в каталоге с данными (Копия со значениями по умолчанию устанавливается при инициализации кластера БД). Вот как этот файл может выглядеть:
# Комментарий
log_connections = yes
log_destination = 'syslog'
search_path = '"$user", public'
shared_buffers = 128MB
На строке можно указать только один параметр. Знак равенства между именем параметра и значением не обязателен. Пробелы не важны, пустые строки игнорируются. # помечает остаток строки как комментарий. Значения параметров, которые не являются простым идентификатором или числом, должны быть заключены в одинарные кавычки. Для того, чтобы добавить к значению параметра одинарную кавычку используйте либо двойную кавычку (предпочтительнее), либо экранируйте обратным слешом.
Кроме настроек файл postgresql.conf может содержать директивы include, указывающие, что надо прочитать другой файл и обработать его, как если бы его содержимое находилось в этом месте файла настроек. Эти директивы выглядят очень просто:
include 'filename'
Если указан не абсолютный путь, то он вычисляется относительно каталога, содержащего ссылающийся конфигурационный файл. Включения могут быть вложенными.
Конфигурационный файл перечитывается когда главный процесс сервера получает сигнал SIGHUP (который проще всего послать при помощи pg_ctl reload). Основной серверный процесс распространит этот сигнал на все запущенные процессы сервера так что все существующие сессии тоже получат новые значения. Кроме того, Вы можете послать сигнал определённому процессу напрямую. Некоторые параметры можно изменить только при запуске сервера, до перезагрузки будут использоваться их старые значения.
Другой способ задать параметры конфигурации - передать их в качестве аргументы командной строки команду postgres:
postgres -c log_connections=yes -c log_destination='syslog'
В таком случае переданные значения переопределят конфликтующие настройки из postgresql.conf. Обратите внимание, что в таком случае Вы не сможете изменить эти значения "на лету" редактируя postgresql.conf, так что хоть это и более удобный метод, он не очень гибкий.
Иногда бывает полезно использовать аргументы командной строки только для одной сессии. Переменная окружения PGOPTIONS  на стороне клиента может быть использована для этого:
env PGOPTIONS='-c geqo=off' psql
(Такой метод работает для всех клиентских приложений, основанных на libpq, не только psql.) Обратите внимание, что этот метод не будет работать для параметров, определённых при запуске сервера или в postgresql.conf.
Более того, можно привязать набор параметров к пользователю или БД. Команды ALTER ROLE и ALTER DATABASE соответственно используются для такой настройки. Настройки БД переопределяют все настройки командной строки и конфигурационного файла, но, в свою очередь, могут быть переопределены настройками для пользователя. Оба эти варианта переопределяются настройками сессии.
Некоторые параметры могут быть изменены в конкретной SQL сессии при помощи команды SET:
SET ENABLE_SEQSCAN TO OFF;
Если SET разрешено использовать, то он переопределяет все остальные источники значений параметров. Некоторые параметры не могут быть заданы через SET, например, если эти параметры определяют поведение, которое может быть изменено только при перезапуске всего сервера. Кроме того команды SET и ALTER требуют прав суперпользователя.
Команда SHOW позволяет посмотреть текущие значения параметров.
Виртуальная таблицы pg_settings так же позволяет посмотреть и изменить параметры текущей сессии; более подробно описание доступных настроек и их изменений приведено в разделе 45.62. pg_settings эквивалентно SHOW и SET, но может оказаться более удобной в использовании, так как она может быть объединена с другими таблицами и из неё можно выбирать элементы по условиям. Кроме того, она содержит больше информации о доступных значениях параметров.

Комментариев нет:

Отправить комментарий