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.