SET

SET — изменить параметр времени выполнения


Синтаксис

SET [ SESSION | LOCAL ] параметр_конфигурации { TO | = } { значение | 'значение' | DEFAULT }
SET [ SESSION | LOCAL ] TIME ZONE { значение | 'значение' | LOCAL | DEFAULT }

Описание

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

Если команда SET (или равнозначная ей SET SESSION) выполняется внутри транзакции, которая позже прерывается, при откате транзакции эффекты команды SET исчезают. Если же окружающая транзакция фиксируется, эффекты сохранятся до конца сеанса, если их не переопределит другая команда SET.

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

Также эффекты SET или SET LOCAL отменяются при откате к точке сохранения, которая была установлена до выполнения команды.

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


Параметры

SESSION

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

LOCAL

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

параметр_конфигурации

Имя устанавливаемого параметра времени выполнения. Доступные параметры описаны в главе Конфигурация сервера и ниже.

значение

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

Помимо параметров конфигурации, описанных в главе Конфигурация сервера, есть несколько параметров, которые можно настроить только с помощью команды SET или которые имеют специальный синтаксис:

SCHEMA

SET SCHEMA 'значение' является синонимом SET search_path TO значение. С помощью этого синтаксиса можно указать только одну схему.

NAMES

SET NAMES значение является синонимом SET client_encoding TO значение.

SEED

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

Начальное значение также можно установить путем вызова функции setseed:

SELECT setseed(значение);

TIME ZONE

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

  • 'PST8PDT'
    Часовой пояс города Беркли, штат Калифорния.

  • 'Europe / Rome'
    Часовой пояс Италии.

  • -7
    Часовой пояс, сдвинутый от UTC на 7 часов к западу (эквивалент PDT). Положительные значения означают сдвиг от UTC к востоку.

  • INTERVAL '-08:00' HOUR TO MINUTE
    Часовой пояс, сдвинутый от UTC на 8 часов к западу (эквивалент PST).

  • LOCAL
    DEFAULT
    Устанавливает в качестве часового пояса местный часовой пояс (т. е. значение по умолчанию серверного параметра timezone).

Значения часового пояса, заданные в виде чисел или интервалов, внутри преобразуются в формат часового пояса POSIX. Например, после SET TIME ZONE -7 команда SHOW TIME ZONE покажет <-07>+07.

Аббревиатуры часовых поясов командой SET не поддерживаются; дополнительную информацию о часовых поясах см. в подразделе Часовые пояса.


Примечания

Равнозначную функциональность предоставляет функция set_config; см. подраздел Функции для системного администрирования. Кроме того, можно обновить командой UPDATE системное представление pg_settings, и это будет аналогом выполнения команды SET.


Примеры

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

SET search_path TO my_schema, public;

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

SET datestyle TO postgres, dmy;

Установка часового пояса для Беркли, штат Калифорния:

SET TIME ZONE 'PST8PDT';

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

SET TIME ZONE 'Europe/Rome';

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

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


См. также

RESET, SHOW