SET
SET â измениÑÑ Ð¿Ð°ÑамеÑÑ Ð²Ñемени вÑполнениÑ
СинÑакÑиÑ
SET [ SESSION | LOCAL ]паÑамеÑÑ_конÑигÑÑаÑии{ TO | = } {знаÑение| 'знаÑение' | DEFAULT } SET [ SESSION | LOCAL ] TIME ZONE {ÑаÑовой_поÑÑ| LOCAL | DEFAULT }
ÐпиÑание
Ðоманда SET изменÑÐµÑ ÐºÐ¾Ð½ÑигÑÑаÑионнÑе паÑамеÑÑÑ Ð²Ñемени вÑполнениÑ. С помоÑÑÑ SET можно «на леÑÑ» измениÑÑ Ð¼Ð½Ð¾Ð³Ð¸Ðµ из паÑамеÑÑов, пеÑеÑиÑленнÑÑ
в Ðлаве 18. (Ðо Ð´Ð»Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð½ÐµÐºÐ¾ÑоÑÑÑ
могÑÑ Ð¿Ð¾ÑÑебоваÑÑÑÑ Ð¿Ñава ÑÑпеÑполÑзоваÑелÑ, а дÑÑгие нелÑÐ·Ñ Ð¸Ð·Ð¼ÐµÐ½ÑÑÑ Ð¿Ð¾Ñле запÑÑка ÑеÑвеÑа или ÑеанÑа.) 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 окÑÑжаÑÑей ÑÑнкÑии; ÐµÑ Ð´ÐµÐ¹ÑÑвие ÑоÑ
ÑанÑеÑÑÑ, еÑли не пÑоиÑÑ
Ð¾Ð´Ð¸Ñ Ð¾ÑÐºÐ°Ñ ÑÑанзакÑии.
ÐÑимеÑание
Ð PostgreSQL Ñ Ð²ÐµÑÑии 8.0 до 8.2 дейÑÑвие SET LOCAL могло оÑменÑÑÑÑÑ Ð¿Ñи оÑвобождении Ñанее ÑÑÑановленной ÑоÑки ÑоÑ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ пÑи ÑÑпеÑном вÑÑ
оде из блока иÑклÑÑÐµÐ½Ð¸Ñ PL/pgSQL. ÐаÑем ÑÑо поведение бÑло пÑизнано неинÑÑиÑивнÑм, и бÑло изменено.
ÐаÑамеÑÑÑ
SESSIONУказÑваеÑ, ÑÑо команда дейÑÑвÑÐµÑ Ð² ÑÐ°Ð¼ÐºÐ°Ñ ÑекÑÑего ÑеанÑа. (ÐÑо поведение по ÑмолÑаниÑ, еÑли не Ñказано ни
SESSION, ниLOCAL.)LOCALУказÑваеÑ, ÑÑо команда дейÑÑвÑÐµÑ ÑолÑко в ÑÐ°Ð¼ÐºÐ°Ñ ÑекÑÑей ÑÑанзакÑии. ÐоÑле
COMMITилиROLLBACKв ÑÐ¸Ð»Ñ Ð²Ð½Ð¾Ð²Ñ Ð²ÑÑÑÐ¿Ð°ÐµÑ Ð·Ð½Ð°Ñение, опÑеделÑнное на ÑÑовне ÑеанÑа. ÐÑи вÑполнении Ñакой ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð²Ð½Ðµ блока ÑÑанзакÑии вÑдаÑÑÑÑ Ð¿ÑедÑпÑеждение и болÑÑе ниÑего не пÑоиÑÑ Ð¾Ð´Ð¸Ñ.паÑамеÑÑ_конÑигÑÑаÑииÐÐ¼Ñ ÑÑÑанавливаемого паÑамеÑÑа вÑемени вÑполнениÑ. ÐоÑÑÑпнÑе паÑамеÑÑÑ Ð¾Ð¿Ð¸ÑÐ°Ð½Ñ Ð² Ðлаве 18 и ниже.
знаÑениеÐовое знаÑение паÑамеÑÑа. ÐаÑамеÑÑÑ Ð¼Ð¾Ð³ÑÑ Ð·Ð°Ð´Ð°Ð²Ð°ÑÑÑÑ Ð² виде ÑÑÑоковÑÑ ÐºÐ¾Ð½ÑÑанÑ, иденÑиÑикаÑоÑов, ÑиÑел или ÑпиÑков пеÑеÑиÑленнÑÑ Ñипов ÑеÑез запÑÑÑÑ, в завиÑимоÑÑи Ð¾Ñ ÐºÐ¾Ð½ÐºÑеÑного паÑамеÑÑа. Указание
DEFAULTв данном конÑекÑÑе позволÑÐµÑ ÑбÑоÑиÑÑ Ð¿Ð°ÑамеÑÑ Ðº знаÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ (Ñо еÑÑÑ, к ÑÐ¾Ð¼Ñ Ð·Ð½Ð°ÑениÑ, коÑоÑое он имел бÑ, еÑли в ÑекÑÑем ÑеанÑе не вÑполнÑлиÑÑ Ð±Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´ÑSET).
Ðомимо конÑигÑÑаÑионнÑÑ
паÑамеÑÑов, опиÑаннÑÑ
в Ðлаве 18, еÑÑÑ ÐµÑÑ Ð½ÐµÑколÑко паÑамеÑÑов, коÑоÑÑе можно измениÑÑ ÑолÑко командой SET или коÑоÑÑе имеÑÑ Ð¾ÑобÑй ÑинÑакÑиÑ:
SCHEMASET SCHEMA 'â алÑÑеÑнаÑивное напиÑание командÑзнаÑение'SET search_path TO. Такой ÑинÑакÑÐ¸Ñ Ð¿Ð¾Ð·Ð²Ð¾Ð»ÑÐµÑ ÑказаÑÑ ÑолÑко Ð¾Ð´Ð½Ñ ÑÑ ÐµÐ¼Ñ.знаÑениеNAMESSET NAMESâ алÑÑеÑнаÑивное напиÑание командÑзнаÑениеSET client_encoding TO.знаÑениеSEEDУÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ð²Ð½ÑÑÑеннее наÑалÑное знаÑение Ð´Ð»Ñ Ð³ÐµÐ½ÐµÑаÑоÑа ÑлÑÑайнÑÑ ÑиÑел (ÑÑнкÑии
random). РкаÑеÑÑве знаÑÐµÐ½Ð¸Ñ Ð´Ð¾Ð¿ÑÑкаÑÑÑÑ ÑиÑла Ñ Ð¿Ð»Ð°Ð²Ð°ÑÑей ÑоÑкой Ð¾Ñ -1 до 1, Ð´Ð»Ñ Ð²Ð½ÑÑÑеннего пÑÐ¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¾Ð½Ð¸ заÑем ÑмножаÑÑÑÑ Ð½Ð° 231-1.ÐÑо наÑалÑное знаÑение Ñакже можно ÑÑÑановиÑÑ, вÑзвав ÑÑнкÑиÑ
setseed:SELECT setseed(
знаÑение);TIME ZONESET 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).
LOCALDEFAULTУÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ð² каÑеÑÑве ÑаÑового поÑÑа меÑÑнÑй ÑаÑовой поÑÑ (Ñо еÑÑÑ, знаÑение ÑеÑвеÑного паÑамеÑÑа
timezoneпо ÑмолÑаниÑ).
ÐнаÑÐµÐ½Ð¸Ñ ÑаÑового поÑÑа, заданнÑе в виде ÑиÑел или инÑеÑвалов, внÑÑÑи пеÑеводÑÑÑÑ Ð² ÑоÑÐ¼Ð°Ñ ÑаÑовÑÑ Ð¿Ð¾ÑÑов POSIX. ÐапÑимеÑ, поÑле
SET TIME ZONE -7, командаSHOW TIME ZONEпокажеÑ<-07>+07.УзнаÑÑ Ð¾ ÑаÑовÑÑ Ð¿Ð¾ÑÑÐ°Ñ Ð¿Ð¾Ð´Ñобнее можно в ÐодÑазделе 8.5.3.
ÐамеÑаниÑ
Также измениÑÑ Ð·Ð½Ð°Ñение паÑамеÑÑа можно Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÑÑнкÑии set_config; Ñм. Раздел 9.26. ÐÑоме Ñого, вÑполнив 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. СÑандаÑÑ Ð´Ð¾Ð¿ÑÑÐºÐ°ÐµÑ ÑолÑко ÑиÑловÑе ÑмеÑÐµÐ½Ð¸Ñ ÑаÑовÑÑ
поÑÑов, Ñогда как Postgres Pro позволÑÐµÑ Ð·Ð°Ð´Ð°Ð²Ð°ÑÑ ÑаÑовой поÑÑ Ð±Ð¾Ð»ÐµÐµ гибко. ÐÑе дÑÑгие ÑÑнкÑии SET ÑвлÑÑÑÑÑ ÑаÑÑиÑениÑми Postgres Pro.