SET
Эта страница переведена при помощи нейросети GigaChat.
SET
- изменение параметра времени выполнения.
Синтаксис
SET [ SESSION | LOCAL ] configuration_parameter { TO | = } { value | 'value' | DEFAULT }
SET [ SESSION | LOCAL ] TIME ZONE { value | 'value' | LOCAL | DEFAULT }
Описание
SET
изменяет параметры конфигурации времени выполнения. Многие параметры, перечисленные в разделе «Конфигурация сервера», можно изменять «на лету» с помощью SET
. Некоторые параметры можно изменять только суперпользователям или пользователям, которым предоставлены соответствующие привилегии. Существуют также параметры, которые нельзя изменить после запуска сервера или начала сессии.
Команда SET
влияет только на текущее значение параметра в пределах текущей сессии.
Если SET
(или эквивалентно SET SESSION
) используется внутри транзакции, которая позже откатывается, эффект команды исчезает при откате транзакции. Если же транзакция фиксируется, изменения сохраняются до конца сессии, если не будут переопределены другим вызовом SET
.
Эффект от SET LOCAL
сохраняется только до конца текущей транзакции — независимо от того, будет ли она зафиксирована или отменена.
Особый случай — последовательное использование SET
, а затем SET LOCAL
в одной транзакции: до завершения транзакции будет действовать значение SET LOCAL
, а после ее фиксации вступит в силу значение SET
.
Эффект от SET
и SET LOCAL
также отменяется при откате к точке сохранения, которая была установлена до выполнения команды.
Если SET LOCAL
используется внутри функции, для которой задан параметр SET
(смотрите CREATE FUNCTION), то при выходе из функции значение, установленное SET LOCAL
, сбрасывается — восстанавливается значение, действовавшее на момент вызова функции. Это позволяет использовать SET LOCAL
для временных или повторяющихся изменений параметров внутри функции, сохраняя при этом удобство автоматического восстановления значения.
Обычный SET
переопределяет значение из тела функции и сохраняется после ее выполнения (если не произойдет откат).
В версиях PostgreSQL с 8.0 по 8.2 эффект от SET LOCAL
отменялся при освобождении ранее установленной точки сохранения или при успешном выходе из блока EXCEPTION
в PL/pgSQL. Такое поведение было признано неинтуитивным и изменено.
Параметры
SESSION
- Указывает, что команда действует в рамках текущей сессии. Это поведение по умолчанию, если не указано ни
SESSION
, ниLOCAL
.
LOCAL
- Указывает, что команда действует только в пределах текущей транзакции. После
COMMIT
илиROLLBACK
снова начинает действовать уровеньSESSION
. Вне блока транзакцииSET LOCAL
вызывает предупреждение и не имеет эффекта.
configuration_parameter
- Задает имя параметра, доступного для изменения во время выполнения. Доступные параметры описаны в разделе «Конфигурация сервера».
value
- Задает новое значение параметра. Может быть строкой, идентификатором, числом или списком, разделенным запятыми, в зависимости от параметра. Ключевое слово
DEFAULT
сбрасывает параметр к значению по умолчанию (то есть, к тому значению, которое он имел бы, если в текущем сеансе не выполнялись бы командыSET
).
Помимо параметров конфигурации, описанных в разделе «Конфигурация сервера», есть несколько таких, которые можно настроить только с помощью команды SET
или у которых есть специальный синтаксис:
SCHEMA
SET SCHEMA value
является псевдонимом дляSET search_path TO value
. Используя этот синтаксис, можно указать только одну схему.
NAMES
SET NAMES value
является псевдонимом дляSET client_encoding TO value
.
SEED
- Устанавливает внутреннее значение для генератора случайных чисел (функция
random
). Допустимые значения - числа с плавающей запятой от -1 до 1 включительно.SEED
также может быть установлен путем вызова функцииsetseed
:
SELECT setseed(value);
TIME ZONE
SET TIME ZONE value
является псевдонимом дляSET timezone TO value
. СинтаксисSET TIME ZONE
позволяет использовать специальную синтаксическую конструкцию для указания временной зоны. Вот примеры допустимых значений:PST8PDT
: Часовой пояс Беркли, Калифорния.Europe/Rome
: Часовой пояс Италии.-7
: Часовой пояс, сдвинутый от UTC на 7 часов к западу (равнозначен PDT). Положительные значения означают сдвиг от UTC к востоку.INTERVAL '-08:00' HOUR TO MINUTE
: Часовой пояс, сдвинутый от UTC на 8 часов к западу (равнозначен PST).LOCAL
DEFAULT
: Установка часового пояса на локальное значение сервера.
Значения, заданные как числа или интервалы, внутренне преобразуются в 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. По стандарту допускаются только числовые смещения времени, тогда как PostgreSQL поддерживает более гибкие формы указания часовых поясов. Все прочие возможности SET
являются расширениями PostgreSQL.