ALTER PROCEDURE
ALTER PROCEDURE â измениÑÑ Ð¾Ð¿Ñеделение пÑоÑедÑÑÑ
СинÑакÑиÑ
ALTER PROCEDUREимÑ[ ( [ [Ñежим_аÑгÑменÑа] [имÑ_аÑгÑменÑа]Ñип_аÑгÑменÑа[, ...] ] ) ]дейÑÑвие[ ... ] [ RESTRICT ] ALTER PROCEDUREимÑ[ ( [ [Ñежим_аÑгÑменÑа] [имÑ_аÑгÑменÑа]Ñип_аÑгÑменÑа[, ...] ] ) ] RENAME TOновое_имÑALTER PROCEDUREимÑ[ ( [ [Ñежим_аÑгÑменÑа] [имÑ_аÑгÑменÑа]Ñип_аÑгÑменÑа[, ...] ] ) ] OWNER TO {новÑй_владелеÑ| CURRENT_USER | SESSION_USER } ALTER PROCEDUREимÑ[ ( [ [Ñежим_аÑгÑменÑа] [имÑ_аÑгÑменÑа]Ñип_аÑгÑменÑа[, ...] ] ) ] SET SCHEMAноваÑ_ÑÑ ÐµÐ¼Ð°ALTER PROCEDUREимÑ[ ( [ [Ñежим_аÑгÑменÑа] [имÑ_аÑгÑменÑа]Ñип_аÑгÑменÑа[, ...] ] ) ] DEPENDS ON EXTENSIONимÑ_ÑаÑÑиÑениÑÐдедейÑÑÐ²Ð¸ÐµÐ¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑледÑÑÑим: [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER SETпаÑамеÑÑ_конÑигÑÑаÑии{ TO | = } {знаÑение| DEFAULT } SETпаÑамеÑÑ_конÑигÑÑаÑииFROM CURRENT RESETпаÑамеÑÑ_конÑигÑÑаÑииRESET ALL
ÐпиÑание
ALTER PROCEDURE изменÑÐµÑ Ð¾Ð¿Ñеделение пÑоÑедÑÑÑ.
ÐÑполниÑÑ ALTER PROCEDURE Ð¼Ð¾Ð¶ÐµÑ ÑолÑко Ð²Ð»Ð°Ð´ÐµÐ»ÐµÑ Ð¿ÑоÑедÑÑÑ. ЧÑÐ¾Ð±Ñ ÑмениÑÑ ÑÑ
ÐµÐ¼Ñ Ð¿ÑоÑедÑÑÑ, необÑ
одимо Ñакже имеÑÑ Ð¿Ñаво CREATE в новой ÑÑ
еме. ЧÑÐ¾Ð±Ñ ÑмениÑÑ Ð²Ð»Ð°Ð´ÐµÐ»ÑÑа, ÑÑебÑеÑÑÑ Ñакже бÑÑÑ Ð½ÐµÐ¿Ð¾ÑÑедÑÑвеннÑм или опоÑÑедованнÑм Ñленом новой Ñоли, а ÑÑа ÑÐ¾Ð»Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° имеÑÑ Ð¿Ñаво CREATE в ÑÑ
еме пÑедÑÑавлениÑ. (С Ñаким огÑаниÑениÑми пÑи Ñмене владелÑÑа не пÑоиÑÑ
Ð¾Ð´Ð¸Ñ Ð½Ð¸Ñего Ñакого, ÑÑо нелÑÐ·Ñ Ð±Ñло Ð±Ñ ÑделаÑÑ, Ð¸Ð¼ÐµÑ Ð¿Ñаво ÑдалиÑÑ Ð¸ Ð²Ð½Ð¾Ð²Ñ ÑоздаÑÑ Ð¿ÑоÑедÑÑÑ. Ðднако ÑÑпеÑполÑзоваÑÐµÐ»Ñ Ð¼Ð¾Ð¶ÐµÑ ÑмениÑÑ Ð²Ð»Ð°Ð´ÐµÐ»ÑÑа пÑоÑедÑÑÑ Ð² лÑбом ÑлÑÑае.)
ÐаÑамеÑÑÑ
имÑÐÐ¼Ñ ÑÑÑеÑÑвÑÑÑей пÑоÑедÑÑÑ (возможно, дополненное ÑÑ ÐµÐ¼Ð¾Ð¹). ÐÑли ÑпиÑок аÑгÑменÑов не Ñказан, Ð¸Ð¼Ñ Ð¿ÑоÑедÑÑÑ Ð´Ð¾Ð»Ð¶Ð½Ð¾ бÑÑÑ ÑникалÑнÑм в ÐµÑ ÑÑ ÐµÐ¼Ðµ.
Ñежим_аÑгÑменÑаРежим аÑгÑменÑа:
INилиVARIADIC. Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð¿Ð¾Ð´ÑазÑмеваеÑÑÑIN.имÑ_аÑгÑменÑаÐÐ¼Ñ Ð°ÑгÑменÑа. ÐамеÑÑÑе, ÑÑо на Ñамом деле
ALTER PROCEDUREне обÑаÑÐ°ÐµÑ Ð²Ð½Ð¸Ð¼Ð°Ð½Ð¸Ðµ на имена аÑгÑменÑов, Ñак как Ð´Ð»Ñ Ð¾Ð´Ð½Ð¾Ð·Ð½Ð°Ñной иденÑиÑикаÑии пÑоÑедÑÑÑ Ð´Ð¾ÑÑаÑоÑно ÑолÑко Ñипов аÑгÑменÑов.Ñип_аÑгÑменÑаТип даннÑÑ Ð°ÑгÑменÑов пÑоÑедÑÑÑ (возможно, дополненнÑй именем ÑÑ ÐµÐ¼Ñ), еÑли ÑаковÑе имеÑÑÑÑ.
новое_имÑÐовое Ð¸Ð¼Ñ Ð¿ÑоÑедÑÑÑ.
новÑй_владелеÑÐовÑй Ð²Ð»Ð°Ð´ÐµÐ»ÐµÑ Ð¿ÑоÑедÑÑÑ. ÐамеÑÑÑе, ÑÑо еÑли пÑоÑедÑÑа помеÑена как
SECURITY DEFINER, в далÑнейÑем она бÑÐ´ÐµÑ Ð²ÑполнÑÑÑÑÑ Ð¾Ñ Ð¸Ð¼ÐµÐ½Ð¸ нового владелÑÑа.новаÑ_ÑÑ ÐµÐ¼Ð°ÐÐ¾Ð²Ð°Ñ ÑÑ ÐµÐ¼Ð° пÑоÑедÑÑÑ.
имÑ_ÑаÑÑиÑениÑÐÐ¼Ñ ÑаÑÑиÑениÑ, Ð¾Ñ ÐºÐ¾ÑоÑого бÑÐ´ÐµÑ Ð·Ð°Ð²Ð¸ÑеÑÑ Ð¿ÑоÑедÑÑа.
[EXTERNAL] SECURITY INVOKER[EXTERNAL] SECURITY DEFINERУÑÑанавливаеÑ, ÑвлÑеÑÑÑ Ð»Ð¸ пÑоÑедÑÑа опÑеделÑÑÑей конÑекÑÑ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑи. ÐлÑÑевое Ñлово
EXTERNALигноÑиÑÑеÑÑÑ Ð´Ð»Ñ ÑооÑвеÑÑÑÐ²Ð¸Ñ ÑÑандаÑÑÑ SQL. ÐодÑобнее ÑÑо ÑвойÑÑво опиÑано в CREATE PROCEDURE.паÑамеÑÑ_конÑигÑÑаÑиизнаÑениеÐобавлÑÐµÑ Ð¸Ð»Ð¸ изменÑÐµÑ ÑÑÑÐ°Ð½Ð¾Ð²ÐºÑ Ð¿Ð°ÑамеÑÑа конÑигÑÑаÑии, вÑполнÑемÑÑ Ð¿Ñи вÑзове пÑоÑедÑÑÑ. ÐÑли задано
знаÑениеDEFAULTили, ÑÑо ÑавнознаÑно, вÑполнÑеÑÑÑ Ð´ÐµÐ¹ÑÑвиеRESET, локалÑное пеÑеопÑеделение Ð´Ð»Ñ Ð¿ÑоÑедÑÑÑ ÑдалÑеÑÑÑ Ð¸ пÑоÑедÑÑа вÑполнÑеÑÑÑ Ñо знаÑением, ÑÑÑановленнÑм в окÑÑжении. ÐÐ»Ñ ÑÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð²ÑÐµÑ ÑÑÑановок паÑамеÑÑов Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð¹ пÑоÑедÑÑÑ ÑкажиÑеRESET ALL.SET FROM CURRENTÑÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ð´Ð»Ñ Ð¿Ð¾ÑледÑÑÑÐ¸Ñ Ð²Ñзовов пÑоÑедÑÑÑ Ð·Ð½Ð°Ñение паÑамеÑÑа, дейÑÑвÑÑÑее в Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð²ÑполнениÑALTER PROCEDURE.Ðа подÑобнÑми ÑведениÑми об Ð¸Ð¼ÐµÐ½Ð°Ñ Ð¸ знаÑениÑÑ Ð¿Ð°ÑамеÑÑов обÑаÑиÑеÑÑ Ðº SET и Ðлаве 19.
RESTRICTÐгноÑиÑÑеÑÑÑ Ð´Ð»Ñ ÑооÑвеÑÑÑÐ²Ð¸Ñ ÑÑандаÑÑÑ SQL.
ÐÑимеÑÑ
ÐеÑеименование пÑоÑедÑÑÑ insert_data Ñ Ð´Ð²ÑÐ¼Ñ Ð°ÑгÑменÑами Ñипа integer в insert_record:
ALTER PROCEDURE insert_data(integer, integer) RENAME TO insert_record;
Смена владелÑÑа пÑоÑедÑÑÑ insert_data Ñ Ð´Ð²ÑÐ¼Ñ Ð°ÑгÑменÑами Ñипа integer на joe:
ALTER PROCEDURE insert_data(integer, integer) OWNER TO joe;
Смена ÑÑ
ÐµÐ¼Ñ Ð¿ÑоÑедÑÑÑ insert_data Ñ Ð´Ð²ÑÐ¼Ñ Ð°ÑгÑменÑами Ñипа integer на accounting:
ALTER PROCEDURE insert_data(integer, integer) SET SCHEMA accounting;
ÐбознаÑение пÑоÑедÑÑÑ insert_data(integer, integer) как завиÑимой Ð¾Ñ ÑаÑÑиÑÐµÐ½Ð¸Ñ myext:
ALTER PROCEDURE insert_data(integer, integer) DEPENDS ON EXTENSION myext;
Ðзменение пÑÑи поиÑка, коÑоÑÑй ÑÑÑанавливаеÑÑÑ Ð°Ð²ÑомаÑиÑеÑки Ð´Ð»Ñ Ð¿ÑоÑедÑÑÑ:
ALTER PROCEDURE check_password(text) SET search_path = admin, pg_temp;
ÐÑмена авÑомаÑиÑеÑкого опÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ search_path Ð´Ð»Ñ Ð¿ÑоÑедÑÑÑ:
ALTER PROCEDURE check_password(text) RESET search_path;
ТепеÑÑ Ð¿ÑоÑедÑÑа бÑÐ´ÐµÑ Ð²ÑполнÑÑÑÑÑ Ñ Ñем пÑÑÑм, коÑоÑÑй задан в Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð²Ñзова.
СовмеÑÑимоÑÑÑ
ÐÑÐ¾Ñ Ð¾Ð¿ÐµÑаÑÐ¾Ñ ÑаÑÑиÑно ÑовмеÑÑим Ñ Ð¾Ð¿ÐµÑаÑоÑом ALTER PROCEDURE в ÑÑандаÑÑе SQL. СÑандаÑÑ Ð¿Ð¾Ð·Ð²Ð¾Ð»ÑÐµÑ Ð¸Ð·Ð¼ÐµÐ½Ð¸ÑÑ Ð±Ð¾Ð»ÑÑе ÑвойÑÑв пÑоÑедÑÑÑ, но не даÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑи пеÑеименоваÑÑ Ð¿ÑоÑедÑÑÑ, ÑделаÑÑ Ð¿ÑоÑедÑÑÑ Ð¾Ð¿ÑеделÑÑÑей конÑекÑÑ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑи, ÑвÑзаÑÑ Ñ Ð¿ÑоÑедÑÑой знаÑÐµÐ½Ð¸Ñ Ð¿Ð°ÑамеÑÑов конÑигÑÑаÑии или измениÑÑ Ð²Ð»Ð°Ð´ÐµÐ»ÑÑа, ÑÑ
ÐµÐ¼Ñ Ð¸Ð»Ð¸ Ñ
аÑакÑеÑиÑÑÐ¸ÐºÑ Ð¸Ð·Ð¼ÐµÐ½ÑивоÑÑи пÑоÑедÑÑÑ. Также ÑÑандаÑÑ ÑÑебÑÐµÑ Ð½Ð°Ð»Ð¸ÑÐ¸Ñ ÐºÐ»ÑÑевого Ñлова RESTRICT, но в PostgreSQL оно необÑзаÑелÑное.