SET — изменение параметра времени выполнения
SET [ SESSION | LOCAL ]configuration_parameter{ TO | = } {значение| 'значение' | DEFAULT } SET [ SESSION | LOCAL ] TIME ZONE {значение| 'значение' | LOCAL | DEFAULT }
Команда SET изменяет параметры конфигурации времени выполнения. Многие из параметров времени выполнения, перечисленных в
Глава 3.4 могут быть изменены «на лету» с помощью
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 option; ее эффекты
будут сохраняться, пока не будет выполнен откат.
В Digital Q.DataBase версиях с 8.0 по 8.2
результаты действия команды SET LOCAL отменялись при
удалении более ранней точки сохранения или при успешном выходе из блока исключений
PL/pgSQL exception block. Это поведение
было изменено, так как оно было признано неочевидным.
SESSION
Указывает, что команда вступает в силу для текущего сеанса.
(Это значение по умолчанию, если не указано ни SESSION ни
LOCAL отображается.)
LOCAL
Указывает, что команда действует только в рамках текущей транзакции. После COMMIT или ROLLBACK,
настройка уровня сеанса снова вступает в силу. Выполнение этой команды вне блока транзакции выводит предупреждение и в остальном не имеет эффекта.
configuration_parameterИмя настраиваемого параметра времени выполнения. Доступные параметры задокументированы в Глава 3.4 и ниже.
значение
Новое значение параметра. Значения могут быть указаны в виде строковых констант, идентификаторов, чисел или разделенных запятыми списков этих значений, в зависимости от конкретного параметра.
DEFAULT может быть указано для
сброса параметра к его значению по умолчанию (то есть к тому
значению, которое он имел бы, если бы команда SET не выполнялась
в текущем сеансе).
Помимо параметров конфигурации, описанных в Глава 3.4, существует несколько параметров, которые можно настроить только с помощью команды SET или которые имеют
специальный синтаксис:
SCHEMASET SCHEMA ' является псевдонимом для
value'SET search_path TO . С использованием этого синтаксиса можно указать только одну
схему.
value
NAMESSET NAMES является псевдонимом для
valueSET client_encoding TO .
value
SEED
Устанавливает внутреннее начальное значение для генератора случайных чисел (
функция random). Допустимые значения:
числа с плавающей запятой от -1 до 1 включительно.
Начальное значение также можно задать с помощью функции
setseed:
SELECT setseed(value);
TIME ZONESET TIME ZONE ' является псевдонимом
для value'SET timezone TO '. The
Синтаксис value'SET TIME ZONE допускает использование специального синтаксиса
для указания часового пояса. Ниже приведены примеры допустимых
значений:
'America/Los_Angeles'Часовой пояс для Беркли, Калифорния.
'Europe/Rome'Часовой пояс для Италии.
-7Часовой пояс на 7 часов западнее UTC (соответствует PDT). Положительные значения отсчитываются к востоку от UTC.
INTERVAL '-08:00' HOUR TO MINUTEЧасовой пояс на 8 часов к западу от UTC (соответствует PST).
LOCALDEFAULT
Установите часовой пояс в значение вашего локального часового пояса (то есть
значение сервера по умолчанию для timezone).
Параметры часового пояса, указанные в виде чисел или интервалов, внутренне
преобразуются в синтаксис часовых поясов POSIX. Например, после
SET TIME ZONE -7, SHOW TIME ZONE будет
выведено <-07>+07.
Аббревиатуры часовых поясов не поддерживаются SET;
см. Раздел 2.5.5.3 для получения дополнительной информации
о часовых поясах.
Функция set_config предоставляет эквивалентную
функциональность; см. Раздел 2.6.28.1.
Кроме того, можно выполнить UPDATE для
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. Стандарт допускает только числовые смещения часового пояса, в то время как
Digital Q.DataBase допускает более гибкие спецификации часовых поясов. Все прочие SET
функции являются Digital Q.DataBase расширениями.