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

Установка параметров

примечание

Эта страница переведена при помощи нейросети GigaChat.

Названия параметров и их значения

Все имена параметров нечувствительны к регистру. Каждый параметр принимает значение одного из пяти типов: логическое, строковое, целое число, с плавающей точкой или перечисляемое (перечисление). Тип определяет синтаксис для установки параметра:

  • Логический: Значения могут быть записаны как on, off, true, false, yes, no, 1, 0 (все без учета регистра) или любой однозначный префикс одного из этих значений.

  • Строка: В общем случае заключите значение в одинарные кавычки, удваивая любые одиночные кавычки внутри значения. Кавычки обычно можно опустить, если значение является простым числом или идентификатором. (Значения, соответствующие ключевому слову SQL, требуют кавычек в некоторых контекстах.)

  • Числовой (целый и с плавающей запятой): Числовые параметры могут быть указаны в обычной целочисленной и десятичной формах; дробные значения округляются до ближайшего целого числа, если параметр имеет целый тип. Целые параметры также принимают шестнадцатеричный ввод (начинающийся с 0x) и восьмеричный ввод (начинающийся с 0), но эти форматы не могут иметь дробной части. Не используйте разделители тысяч. Кавычки не требуются, за исключением шестнадцатеричного ввода.

  • Числовой с единицей измерения: Некоторые числовые параметры имеют неявную единицу измерения, поскольку они описывают объемы памяти или времени. Единицей измерения может быть байты, килобайты, блоки (обычно восемь килобайт), миллисекунды, секунды или минуты. Неукрашенное числовое значение для одного из этих параметров будет использовать единицу измерения по умолчанию, которая может быть определена из pg_settings.unit. Для удобства настройки могут быть заданы с явно указанной единицей измерения, например '120 ms' для значения времени, и они будут преобразованы в фактическую единицу измерения параметра. Обратите внимание, что значение должно быть записано в виде строки (в кавычках), чтобы воспользоваться этой функцией. Имя единицы чувствительно к регистру, а между числовым значением и единицей измерения может быть пробел.

    • Допустимые единицы измерения памяти - это B (байт), kB (килобайт), MB (мегабайт), GB (гигабайт) и TB (терабайт). Множитель для единиц измерения памяти равен 1024, а не 1000.
    • Допустимыми единицами измерения времени являются us (микросекунды), ms (миллисекунды), s (секунды), min (минуты), h (часы) и d (дни).

    Если указано дробное значение с единицей измерения, оно будет округлено до кратного следующей меньшей единицы, если таковая имеется. Например, 30.1 GB будет преобразовано в 30822 MB, а не в 32319628902 B. Если параметр имеет целый тип, окончательное округление до целого происходит после любого преобразования единиц измерения.

  • Перечислено: Параметры перечисляемого типа записываются так же, как и строковые параметры, но они ограничены одним из ограниченного набора значений. Значения, допустимые для такого параметра, можно найти в pg_settings.enumvals. Значения параметров перечисления не зависят от регистра.

Взаимодействие параметров через файл конфигурации

Самый фундаментальный способ установки этих параметров - это редактирование файла postgresql.conf, который обычно хранится в каталоге данных. Копия по умолчанию устанавливается при инициализации каталога кластера баз данных. Пример того, как может выглядеть этот файл, приведен ниже:

# This is a comment
log_connections = yes
log_destination = 'syslog'
search_path = '"$user", public'
shared_buffers = 128MB

Один параметр указан на одной строке. Знак равенства между именем и значением является необязательным. Пробелы несущественны (за исключением пробелов внутри значения параметра в кавычках), а пустые строки игнорируются. Знаки решетки (#) обозначают оставшуюся часть строки как комментарий. Значения параметров, которые не являются простыми идентификаторами или числами, должны быть заключены в одинарные кавычки. Чтобы вставить одиночную кавычку в значение параметра, напишите либо две кавычки (предпочтительно), либо обратную косую черту-кавычку. Если файл содержит несколько записей для одного и того же параметра, все, кроме последней, игнорируются.

Параметры, установленные таким образом, обеспечивают значения по умолчанию для кластера. Активные сеансы будут видеть эти настройки, если они не будут переопределены. В следующих разделах описываются способы, с помощью которых администратор или пользователь могут переопределить эти значения по умолчанию.

Файл конфигурации повторно считывается всякий раз, когда основной серверный процесс получает сигнал SIGHUP; этот сигнал легче всего отправить, запустив pg_ctl reload из командной строки или вызвав функцию SQL pg_reload_conf(). Основной серверный процесс также передает этот сигнал всем в данный момент работающим серверам, чтобы существующие сеансы также принимали новые значения (это произойдет после завершения ими текущей команды клиента). В качестве альтернативы можно напрямую отправить сигнал одному процессу сервера. Некоторые параметры можно установить только при запуске сервера; любые изменения их записей в файле конфигурации будут игнорироваться до перезапуска сервера. Неверные настройки параметров в файле конфигурации аналогичным образом игнорируются (но регистрируются) во время обработки SIGHUP.

В дополнение к postgresql.conf, каталог данных PostgreSQL содержит файл postgresql.auto.conf, который имеет тот же формат, что и postgresql.conf, но предназначен для автоматического редактирования, а не ручного. Этот файл хранит настройки, предоставленные через команду ALTER SYSTEM. Этот файл читается каждый раз, когда postgresql.conf читается, и его настройки вступают в силу таким же образом. Настройки в postgresql.auto.conf заменяют те, которые находятся в postgresql.conf.

Внешние инструменты также могут изменять postgresql.auto.conf. Не рекомендуется делать это при работающем сервере, если параметр конфигурации allow_alter_system имеет значение, отличное от off, так как одновременная команда ALTER SYSTEM может перезаписать такие изменения. Такие инструменты могут просто добавить новые настройки в конец или они могут выбрать удалить дублирующиеся настройки и/или комментарии (как ALTER SYSTEM будет).

Системный вид pg_file_settings может быть полезен для предварительного тестирования изменений конфигурационных файлов или для диагностики проблем, если сигнал SIGHUP не дал желаемого эффекта.

Взаимодействие параметров через SQL

PostgreSQL предоставляет три команды SQL для установки конфигурационных значений по умолчанию. Уже упомянутая команда ALTER SYSTEM обеспечивает доступный через SQL способ изменения глобальных настроек; она функционально эквивалентна редактированию postgresql.conf. Кроме того, существуют две команды, которые позволяют устанавливать значения по умолчанию на основе каждой базы данных или роли:

  • Команда ALTER DATABASE позволяет переопределять глобальные настройки на уровне отдельной базы данных.
  • Команда ALTER ROLE позволяет переопределять глобальные и специфичные для каждой базы данных настройки с помощью значений, заданных пользователем.

Значения, установленные с использованием ALTER DATABASE и ALTER ROLE, применяются только при запуске нового сеанса работы с базой данных. Они заменяют значения, полученные из файлов конфигурации или командной строки сервера, и являются значениями по умолчанию для остальной части сеанса. Обратите внимание, что некоторые параметры не могут быть изменены после запуска сервера, поэтому их нельзя установить с помощью этих команд (или тех, которые перечислены ниже).

После подключения клиента к базе данных PostgreSQL предоставляет две дополнительные команды SQL (и эквивалентные функции) для взаимодействия с настройками конфигурации, локальными для текущего сеанса:

  • Команда SHOW позволяет проверить текущее значение любого параметра. Соответствующая функция SQL называется current_setting(setting_name text) (см. раздел Функции настройки конфигурации).
  • Команда SET позволяет изменять текущее значение тех параметров, которые могут быть установлены локально для сеанса; она не влияет на другие сеансы. Многие параметры можно установить таким образом любым пользователем, но некоторые могут быть установлены только суперпользователями и пользователями, которым предоставлено SET привилегия на этот параметр. Соответствующая функция SQL называется set_config(setting_name, new_value, is_local) (см. Раздел Функции настройки конфигурации).

Кроме того, системный вид pg_settings может использоваться для просмотра и изменения значений, локальных для сеанса:

  • Запрос этого представления аналогичен использованию SHOW ALL, но предоставляет больше деталей. Это также более гибко, поскольку возможно указать условия фильтра или объединить с другими отношениями.

  • Использование UPDATE в этом представлении, конкретно обновление столбца setting, эквивалентно выдаче команд SET. Например, эквивалент

    SET configuration_parameter TO DEFAULT;

    является:

    UPDATE pg_settings SET setting = reset_val WHERE name = 'configuration_parameter';

Взаимодействие параметров через оболочку

В дополнение к установке глобальных значений по умолчанию или прикреплению переопределений на уровне базы данных или роли, можно передавать настройки в PostgreSQL через средства оболочки. Как сервер, так и библиотека клиентов libpq принимают значения параметров через оболочку.

  • При запуске сервера, значения параметров можно передать команде postgres в аргументе командной строки -c name=value или равнозначном варианте --name=value. Например:

    postgres -c log_connections=yes --log-destination='syslog'

    Параметры, указанные таким образом, заменяют те, которые установлены с помощью postgresql.conf или ALTER SYSTEM, поэтому их нельзя изменить глобально без перезапуска сервера.

  • При запуске клиентского сеанса, использующего libpq, значения параметров можно указать в переменной окружения PGOPTIONS. Заданные таким образом параметры будут определять значения по умолчанию на время сеанса, но никак не влияют на другие сеансы. По историческим причинам формат PGOPTIONS похож на тот, что применяется при запуске команды postgres; в частности, в нем должен присутствовать флаг -c или перед именем должно быть указано --. Например:

    env PGOPTIONS="-c geqo=off --statement-timeout=5min" psql

Другие клиенты и библиотеки могут иметь собственные механизмы управления параметрами, через командную строку или как-то иначе, используя которые пользователь сможет менять параметры сеанса, не выполняя непосредственно команды SQL.

Управление содержимым файла конфигурации

PostgreSQL предоставляет несколько функций для разделения сложных postgresql.conf файлов на подфайлы. Эти функции особенно полезны при управлении несколькими серверами с аналогичными, но не идентичными конфигурациями.

В дополнение к индивидуальным настройкам параметров, файл postgresql.conf может содержать директивы включения, которые указывают другой файл для чтения и обработки так, как если бы он был вставлен в файл конфигурации в этой точке. Эта функция позволяет разделить файл конфигурации на физически отдельные части. Директивы включения просто выглядят следующим образом:

include 'filename'

Если имя файла не является абсолютным путем, оно принимается относительно каталога, содержащего ссылающийся файл конфигурации. Включения могут быть вложенными.

Существует также директива include_if_exists, которая действует так же, как и директива include, за исключением случаев, когда ссылаемый файл не существует или его нельзя прочитать. Обычная include будет рассматривать это как условие ошибки, но include_if_exists просто регистрирует сообщение и продолжает обработку ссылаемого конфигурационного файла.

Файл postgresql.conf может также содержать директивы include_dir, которые указывают весь каталог файлов конфигурации для включения. Они выглядят следующим образом:

include_dir 'directory'

Неабсолютные имена каталогов берутся относительно каталога, содержащего ссылаемый конфигурационный файл. Внутри указанного каталога будут включены только нефайловые файлы, названия которых заканчиваются суффиксом .conf. Игнорируются также имена файлов, начинающиеся с символа ., чтобы предотвратить ошибки, поскольку такие файлы скрыты на некоторых платформах. Несколько файлов внутри включаемого каталога обрабатываются в порядке имени файла (в соответствии с правилами локали C, т.е. числа перед буквами, а прописные буквы перед строчными).

Включаемые файлы или каталоги могут использоваться для логического разделения частей конфигурации базы данных вместо наличия одного большого файла postgresql.conf. Рассмотрим компанию, у которой есть два сервера баз данных, каждый из которых имеет разное количество памяти. Вероятно, элементы конфигурации, которые они оба разделяют, например, для ведения журнала. Но параметры, связанные с памятью на сервере, будут различаться между двумя серверами. И могут быть специальные настройки сервера. Один из способов управления этой ситуацией заключается в том, чтобы разделить пользовательские изменения конфигурации для необходимого сайта на три файла. Можно добавить это в конец своего файла postgresql.conf, чтобы включить их:

include 'shared.conf'
include 'memory.conf'
include 'server.conf'

Все системы будут иметь одинаковую shared.conf. Каждый сервер с определенным объемом памяти может использовать один и тот же memory.conf; может быть один для всех серверов с 8 ГБ оперативной памяти, другой - для тех, которые имеют 16 ГБ. И наконец, server.conf может содержать действительно специфическую для сервера информацию о конфигурации.

Еще одна возможность - создать каталог конфигурационного файла и поместить эту информацию в файлы там. Например, каталог conf.d можно было бы указать в конце postgresql.conf:

include_dir 'conf.d'

Тогда можно назвать файлы в каталоге conf.d следующим образом:

00shared.conf
01memory.conf
02server.conf

Эта схема именования устанавливает четкий порядок, в котором эти файлы будут загружены. Это важно, потому что только последнее значение параметра, встреченное при чтении файлов конфигурации сервером, будет использоваться. В этом примере то, что установлено в conf.d/02server.conf, переопределит значение, установленное в conf.d/01memory.conf.

Можно использовать этот подход для именования файлов описательно:

00shared.conf
01memory-8GB.conf
02server-foo.conf

Этот тип организации дает уникальное имя для каждой вариации файла конфигурации. Это может помочь устранить двусмысленность при хранении конфигураций нескольких серверов в одном месте, например в репозитории системы контроля версий. (Хранение файлов конфигурации базы данных под контролем версий также является хорошей практикой, которую следует рассмотреть.)