SET
SET — изменить параметр времени выполнения
Синтаксис
SET [ SESSION | LOCAL ] параметр_конфигурации { TO | = } { значение | 'значение' | DEFAULT }
SET [ SESSION | LOCAL ] TIME ZONE { значение | 'значение' | LOCAL | DEFAULT }
Описание
Команда SET изменяет параметры конфигурации времени выполнения. С помощью 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 позволяет использовать специальный синтаксис для
указания часового пояса. Вот примеры допустимых значений:
- 'America/Los_Angeles'
Часовой пояс города Беркли, штат Калифорния. - '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 'America/Los_Angeles';
Установка часового пояса Италии:
SET TIME ZONE 'Europe/Rome';
Совместимость
Команда SET TIME ZONE расширяет синтаксис, определенный в стандарте SQL. Стандарт
допускает только числовые смещения часовых поясов, тогда как QHB
допускает для последних более гибкие спецификации. Все остальные возможности SET
являются расширениями QHB.