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.

См. также

RESET, SHOW