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.