Перейти к основному содержимому

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.

Смотрите также

RESET, SHOW