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, которые затем умножаются на 231-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_config; см.
раздел Функции системного администрирования. Кроме того, системное
представление pg_settings можно обновить командой UPDATE
, что является
эквивалентом 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.