SET

Изменяет значение параметра конфигурации базы данных во время выполнения.

Синтаксис

SET [ SESSION | LOCAL ] <configuration_parameter> { TO | = } { <value> | '<value>' | DEFAULT }

SET [SESSION | LOCAL] TIME ZONE { <value> | '<value>' |  LOCAL | DEFAULT }

Описание

Команда SET изменяет параметры конфигурации сервера. Любой параметр конфигурации, отнесённый к категории сеансовых параметров, может быть изменён на лету с помощью команды SET. (Некоторые из них требуют прав суперпользователя для изменения, а другие нельзя изменять после запуска сервера или сеанса.) Команда SET влияет только на значение, используемое в текущем сеансе.

Если команда SET или SET SESSION выполняется внутри транзакции, которая впоследствии откатывается, эффект команды SET исчезает при откате транзакции. После фиксации внешней транзакции эффект сохраняется до конца сеанса, если только не будет переопределён другой командой SET.

Эффект команды SET LOCAL действует только до конца текущей транзакции, независимо от того, была ли она зафиксирована. Особый случай — команда SET, за которой следует SET LOCAL в одной и той же транзакции: значение SET LOCAL будет действовать до конца транзакции, но после её завершения (если транзакция зафиксирована) вступит в силу значение SET.

Эффект команд SET или SET LOCAL также отменяется при откате к точке сохранения (savepoint), предшествующей выполнению команды.

Если команда SET LOCAL используется внутри функции, имеющей опцию SET для того же параметра конфигурации (см. CREATE FUNCTION), то эффект команды SET LOCAL исчезает при выходе из функции; в любом случае восстанавливается значение, действовавшее до вызова функции. Это позволяет использовать SET LOCAL для динамического или многократного изменения параметра внутри функции, сохраняя удобство использования опции SET для сохранения и восстановления значения вызывающего контекста. Обратите внимание, что обычная команда SET переопределяет опцию SET окружающей функции; её эффект сохраняется, если только не был отменён откатом транзакции.

См. раздел Параметры конфигурации сервера для получения информации о параметрах сервера.

Параметры

  • SESSION

    • Указывает, что команда применяется ко всему текущему сеансу. Это значение по умолчанию, если не указаны ни SESSION, ни LOCAL.
  • LOCAL

    • Указывает, что команда действует только в пределах текущей транзакции. После COMMIT или ROLLBACK снова вступает в силу настройка уровня сеанса. Использование этой команды вне блока транзакции вызывает предупреждение и не оказывает другого эффекта.
  • configuration_parameter

    • Имя изменяемого параметра конфигурации базы данных во время выполнения. Изменять с помощью SET можно только те параметры, которые классифицируются как сеансовые. Подробности см. в разделе Параметры конфигурации сервера.
  • value

    • Новое значение параметра. Значения могут задаваться как строковые константы, идентификаторы, числа или списки значений, разделённые запятыми, в зависимости от конкретного параметра. Ключевое слово DEFAULT используется для сброса параметра к его значению по умолчанию (то есть тому значению, которое было бы, если бы в текущем сеансе не выполнялась команда SET). При указании единиц объёма памяти или времени значение следует заключать в одинарные кавычки. Существуют некоторые параметры конфигурации, которые можно изменить только с помощью команды SET или имеют особый синтаксис:
  • SCHEMA

    • SET SCHEMA '<value>' является псевдонимом для SET <search_path> TO <value>. При использовании этого синтаксиса можно указать только одну схему.
  • NAMES

    • SET NAMES <value> является псевдонимом для SET client_encoding TO <value>.
  • SEED

    • Устанавливает внутреннее начальное значение генератора случайных чисел (функция random()). Допустимые значения — вещественные числа в диапазоне от -1 до 1 включительно.

Вы можете также установить начальное значение, вызвав функцию setseed():

    SELECT setseed(value);
  • TIME ZONE

    • SET TIME ZONE <value> является псевдонимом для SET timezone TO <value>. Синтаксис SET TIME ZONE допускает специальные формы записи часового пояса. Ниже приведены примеры корректных значений:

    • 'PST8PDT'

    • 'Europe/Rome'

    • -7 (часовой пояс на 7 часов западнее UTC)

    • INTERVAL '-08:00' HOUR TO MINUTE (часовой пояс на 8 часов западнее UTC).

    • LOCAL

    • DEFAULT Устанавливает часовой пояс в соответствии с локальным временем (то есть значением параметра timezone по умолчанию на сервере). Более подробную информацию о часовых поясах в базе данных см. в разделе «Часовые пояса» документации PostgreSQL.

Примеры

Установка пути поиска схем:

SET search_path TO my_schema, public;

Увеличение объёма памяти на сегментном хосте на один запрос до 200 МБ:

SET statement_mem TO '200MB';

Установка формата даты в традиционный стиль POSTGRES с порядком «день перед месяцем»:

SET datestyle TO postgres, dmy;

Установка часового пояса для Сан-Матео, Калифорния (тихоокеанское время):

SET TIME ZONE 'PST8PDT';

Установка часового пояса для Италии:

SET TIME ZONE 'Europe/Rome'; 

Совместимость

SET TIME ZONE расширяет синтаксис, определённый в стандарте SQL. Стандарт допускает только числовые смещения часовых поясов, тогда как база данных поддерживает более гибкие спецификации часовых поясов. Все остальные возможности команды SET являются расширениями Database.

Смотрите также

RESET, SHOW