SET#

SET

SET

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

Синтаксис

SET [ SESSION | LOCAL ] configuration_parameter { TO | = } { value | 'value' | DEFAULT }
SET [ SESSION | LOCAL ] TIME ZONE { value | 'value' | LOCAL | DEFAULT }

Описание

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

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

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

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

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

Примечание

В версиях PostgreSQL 8.0-8.2, эффекты команды SET LOCAL могли быть отменены путем освобождения ранее созданной точки сохранения или успешного выхода из блока исключения PL/pgSQL. Это поведение было изменено, так как оно считалось непонятным.

Параметры

SESSION

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

LOCAL

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

configuration_parameter

Название устанавливаемого параметра времени выполнения. Доступные параметры документированы в Глава 18 и ниже.

value

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

Помимо параметров конфигурации, описанных в Глава 18, есть несколько параметров, которые можно настроить только с помощью команды 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 позволяет использовать специальный синтаксис для указания часового пояса. Вот примеры допустимых значений:

'America/Los_Angeles'

Часовой пояс Беркли, Калифорния.

'Europe/Rome'

Часовой пояс для Италии.

-7

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

INTERVAL '-08:00' HOUR TO MINUTE

Часовой пояс на 8 часов западнее UTC (эквивалентно PST).

LOCAL
DEFAULT

Установите часовой пояс в ваш часовой пояс (то есть, в значение по умолчанию сервера timezone).

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

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

Примечания

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

Примеры

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

SET search_path TO my_schema, public;

Установите стиль даты в традиционном формате для POSTGRES с соглашением ввода день перед месяцем:

SET datestyle TO postgres, dmy;

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

SET TIME ZONE 'America/Los_Angeles';

Установите часовой пояс для Италии:

SET TIME ZONE 'Europe/Rome';

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

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

См. также

RESET, SHOW