ALTER FUNCTION
ALTER FUNCTION â измениÑÑ Ð¾Ð¿Ñеделение ÑÑнкÑии
СинÑакÑиÑ
ALTER FUNCTIONимÑ[ ( [ [Ñежим_аÑгÑменÑа] [имÑ_аÑгÑменÑа]Ñип_аÑгÑменÑа[, ...] ] ) ]дейÑÑвие[ ... ] [ RESTRICT ] ALTER FUNCTIONимÑ[ ( [ [Ñежим_аÑгÑменÑа] [имÑ_аÑгÑменÑа]Ñип_аÑгÑменÑа[, ...] ] ) ] RENAME TOновое_имÑALTER FUNCTIONимÑ[ ( [ [Ñежим_аÑгÑменÑа] [имÑ_аÑгÑменÑа]Ñип_аÑгÑменÑа[, ...] ] ) ] OWNER TO {новÑй_владелеÑ| CURRENT_ROLE | CURRENT_USER | SESSION_USER } ALTER FUNCTIONимÑ[ ( [ [Ñежим_аÑгÑменÑа] [имÑ_аÑгÑменÑа]Ñип_аÑгÑменÑа[, ...] ] ) ] SET SCHEMAноваÑ_ÑÑ ÐµÐ¼Ð°ALTER FUNCTIONимÑ[ ( [ [Ñежим_аÑгÑменÑа] [имÑ_аÑгÑменÑа]Ñип_аÑгÑменÑа[, ...] ] ) ] [ NO ] DEPENDS ON EXTENSIONимÑ_ÑаÑÑиÑениÑÐдедейÑÑÐ²Ð¸ÐµÐ¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑледÑÑÑим: CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT IMMUTABLE | STABLE | VOLATILE [ NOT ] LEAKPROOF [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER PARALLEL { UNSAFE | RESTRICTED | SAFE } COSTÑÑоимоÑÑÑ_вÑполнениÑROWSÑÑÑок_в_ÑезÑлÑÑаÑеSUPPORTвÑпомогаÑелÑнаÑ_ÑÑнкÑиÑSETпаÑамеÑÑ_конÑигÑÑаÑии{ TO | = } {знаÑение| DEFAULT } SETпаÑамеÑÑ_конÑигÑÑаÑииFROM CURRENT RESETпаÑамеÑÑ_конÑигÑÑаÑииRESET ALL
ÐпиÑание
ALTER FUNCTION изменÑÐµÑ Ð¾Ð¿Ñеделение ÑÑнкÑии.
ÐÑполниÑÑ ALTER FUNCTION Ð¼Ð¾Ð¶ÐµÑ ÑолÑко Ð²Ð»Ð°Ð´ÐµÐ»ÐµÑ ÑооÑвеÑÑÑвÑÑÑей ÑÑнкÑии. ЧÑÐ¾Ð±Ñ ÑмениÑÑ ÑÑ
ÐµÐ¼Ñ ÑÑнкÑии, необÑ
одимо Ñакже имеÑÑ Ð¿Ñаво CREATE в новой ÑÑ
еме. ЧÑÐ¾Ð±Ñ ÑмениÑÑ Ð²Ð»Ð°Ð´ÐµÐ»ÑÑа, необÑ
одимо имеÑÑ Ð¿Ñаво SET ROLE Ð´Ð»Ñ Ð½Ð¾Ð²Ð¾Ð¹ Ñоли-владелÑÑа, а ÑÑа ÑÐ¾Ð»Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° имеÑÑ Ð¿Ñаво CREATE в ÑÑ
еме ÑÑнкÑии. (С Ñакими огÑаниÑениÑми пÑи Ñмене владелÑÑа не пÑоиÑÑ
Ð¾Ð´Ð¸Ñ Ð½Ð¸Ñего Ñакого, ÑÑо нелÑÐ·Ñ Ð±Ñло Ð±Ñ ÑделаÑÑ, Ð¸Ð¼ÐµÑ Ð¿Ñаво ÑдалиÑÑ Ð¸ Ð²Ð½Ð¾Ð²Ñ ÑоздаÑÑ ÑÑнкÑиÑ. Ðднако ÑÑпеÑполÑзоваÑÐµÐ»Ñ Ð¼Ð¾Ð¶ÐµÑ ÑмениÑÑ Ð²Ð»Ð°Ð´ÐµÐ»ÑÑа ÑÑнкÑии в лÑбом ÑлÑÑае.)
ÐаÑамеÑÑÑ
имÑÐÐ¼Ñ ÑÑÑеÑÑвÑÑÑей ÑÑнкÑии (возможно, дополненное ÑÑ ÐµÐ¼Ð¾Ð¹). ÐÑли ÑпиÑок аÑгÑменÑов не Ñказан, ÑÑо Ð¸Ð¼Ñ Ð´Ð¾Ð»Ð¶Ð½Ð¾ бÑÑÑ ÑникалÑнÑм в ÑÑ ÐµÐ¼Ðµ.
Ñежим_аÑгÑменÑаРежим аÑгÑменÑа:
IN,OUT,INOUTилиVARIADIC. Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð¿Ð¾Ð´ÑазÑмеваеÑÑÑIN. ÐамеÑÑÑе, ÑÑоALTER FUNCTIONне ÑÑиÑÑÐ²Ð°ÐµÑ Ð°ÑгÑменÑÑOUT, Ñак как Ð´Ð»Ñ Ð¸Ð´ÐµÐ½ÑиÑикаÑии ÑÑнкÑии нÑÐ¶Ð½Ñ ÑолÑко ÑÐ¸Ð¿Ñ Ð²Ñ Ð¾Ð´Ð½ÑÑ Ð°ÑгÑменÑов. ÐоÑÑÐ¾Ð¼Ñ Ð´Ð¾ÑÑаÑоÑно пеÑеÑиÑлиÑÑ ÑолÑко аÑгÑменÑÑIN,INOUTиVARIADIC.имÑ_аÑгÑменÑаÐÐ¼Ñ Ð°ÑгÑменÑа. ÐамеÑÑÑе, ÑÑо на Ñамом деле
ALTER FUNCTIONне обÑаÑÐ°ÐµÑ Ð²Ð½Ð¸Ð¼Ð°Ð½Ð¸Ðµ на имена аÑгÑменÑов, Ñак как Ð´Ð»Ñ Ð¾Ð´Ð½Ð¾Ð·Ð½Ð°Ñной иденÑиÑикаÑии ÑÑнкÑии доÑÑаÑоÑно ÑолÑко Ñипов аÑгÑменÑов.Ñип_аÑгÑменÑаТип даннÑÑ Ð°ÑгÑменÑов ÑÑнкÑии (возможно, дополненнÑй именем ÑÑ ÐµÐ¼Ñ), еÑли ÑаковÑе имеÑÑÑÑ.
новое_имÑÐовое Ð¸Ð¼Ñ ÑÑнкÑии.
новÑй_владелеÑÐовÑй Ð²Ð»Ð°Ð´ÐµÐ»ÐµÑ ÑÑнкÑии. ÐамеÑÑÑе, ÑÑо еÑли ÑÑнкÑÐ¸Ñ Ð¿Ð¾Ð¼ÐµÑена как
SECURITY DEFINER, в далÑнейÑем она бÑÐ´ÐµÑ Ð²ÑполнÑÑÑÑÑ Ð¾Ñ Ð¸Ð¼ÐµÐ½Ð¸ нового владелÑÑа.новаÑ_ÑÑ ÐµÐ¼Ð°ÐÐ¾Ð²Ð°Ñ ÑÑ ÐµÐ¼Ð° ÑÑнкÑии.
DEPENDS ON EXTENSIONимÑ_ÑаÑÑиÑениÑNO DEPENDS ON EXTENSIONимÑ_ÑаÑÑиÑениÑÐÑа ÑоÑма Ð´ÐµÐ»Ð°ÐµÑ ÑÑнкÑÐ¸Ñ Ð·Ð°Ð²Ð¸Ñимой Ð¾Ñ ÑаÑÑиÑÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸, наобоÑоÑ, ÑдалÑÐµÑ ÑÑÑ Ð·Ð°Ð²Ð¸ÑимоÑÑÑ, еÑли ÑказÑваеÑÑÑ
NO. ФÑнкÑиÑ, помеÑÐµÐ½Ð½Ð°Ñ ÐºÐ°Ðº завиÑÐ¸Ð¼Ð°Ñ Ð¾Ñ ÑаÑÑиÑениÑ, ÑдалÑеÑÑÑ Ð¿Ñи Ñдалении ÑаÑÑиÑÐµÐ½Ð¸Ñ Ð´Ð°Ð¶Ðµ без ÑказаниÑCASCADE. ÐÑли ÑÑнкÑÐ¸Ñ Ð·Ð°Ð²Ð¸ÑÐ¸Ñ Ð¾Ñ Ð½ÐµÑколÑÐºÐ¸Ñ ÑаÑÑиÑений, она ÑдалÑеÑÑÑ Ð¿Ñи Ñдалении лÑбого из ÑÑÐ¸Ñ ÑаÑÑиÑений.CALLED ON NULL INPUTRETURNS NULL ON NULL INPUTSTRICTCALLED ON NULL INPUTменÑÐµÑ ÑÑнкÑÐ¸Ñ Ñак, ÑÑÐ¾Ð±Ñ Ð¾Ð½Ð° вÑзÑвалаÑÑ, когда некоÑоÑÑе или вÑе ÐµÑ Ð°ÑгÑменÑÑ ÑÐ°Ð²Ð½Ñ NULL.RETURNS NULL ON NULL INPUTилиSTRICTменÑÐµÑ ÑÑнкÑÐ¸Ñ Ñак, ÑÑÐ¾Ð±Ñ Ð¾Ð½Ð° не вÑзÑвалаÑÑ, когда некоÑоÑÑе или вÑе ÐµÑ Ð°ÑгÑменÑÑ ÑÐ°Ð²Ð½Ñ NULL, а вмеÑÑо вÑзова авÑомаÑиÑеÑки вÑдавалÑÑ ÑезÑлÑÑÐ°Ñ NULL. Ðа подÑобноÑÑÑми обÑаÑиÑеÑÑ Ðº CREATE FUNCTION.IMMUTABLESTABLEVOLATILEУÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ð·Ð°Ð´Ð°Ð½Ð½Ñй ваÑÐ¸Ð°Ð½Ñ Ð¸Ð·Ð¼ÐµÐ½ÑивоÑÑи ÑÑнкÑии. ÐодÑобнее ÑÑо опиÑано в CREATE FUNCTION.
[EXTERNAL] SECURITY INVOKER[EXTERNAL] SECURITY DEFINERУÑÑанавливаеÑ, ÑвлÑеÑÑÑ Ð»Ð¸ ÑÑнкÑÐ¸Ñ Ð¾Ð¿ÑеделÑÑÑей конÑекÑÑ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑи. ÐлÑÑевое Ñлово
EXTERNALигноÑиÑÑеÑÑÑ Ð´Ð»Ñ ÑооÑвеÑÑÑÐ²Ð¸Ñ ÑÑандаÑÑÑ SQL. ÐодÑобнее ÑÑо ÑвойÑÑво опиÑано в CREATE FUNCTION.PARALLELУÑÑанавливаеÑ, бÑÐ´ÐµÑ Ð»Ð¸ ÑÑнкÑÐ¸Ñ ÑÑиÑаÑÑÑÑ Ð±ÐµÐ·Ð¾Ð¿Ð°Ñной Ð´Ð»Ñ ÑаÑпаÑаллеливаниÑ. ÐодÑобнее ÑÑо опиÑано в CREATE FUNCTION.
LEAKPROOFУÑÑанавливаеÑ, ÑвлÑеÑÑÑ Ð»Ð¸ ÑÑнкÑÐ¸Ñ Ð³ÐµÑмеÑиÑной. ÐодÑобнее ÑÑо ÑвойÑÑво опиÑано в CREATE FUNCTION.
COSTÑÑоимоÑÑÑ_вÑполнениÑÐзменÑÐµÑ Ð¾ÑиенÑиÑовоÑнÑÑ ÑÑоимоÑÑÑ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÑÑнкÑии. ÐодÑобнее ÑÑо опиÑÑваеÑÑÑ Ð² CREATE FUNCTION.
ROWSÑÑÑок_в_ÑезÑлÑÑаÑеÐзменÑÐµÑ Ð¾ÑиенÑиÑовоÑное ÑиÑло ÑÑÑок в ÑезÑлÑÑаÑе ÑÑнкÑии, возвÑаÑаÑÑей множеÑÑво. ÐодÑобнее ÑÑо опиÑÑваеÑÑÑ Ð² CREATE FUNCTION.
SUPPORTвÑпомогаÑелÑнаÑ_ÑÑнкÑиÑÐадаÑÑ Ð¸Ð»Ð¸ менÑÐµÑ Ð²ÑпомогаÑелÑнÑÑ ÑÑнкÑÐ¸Ñ Ð´Ð»Ñ Ð¿Ð»Ð°Ð½Ð¸ÑовÑика, коÑоÑÐ°Ñ Ð±ÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ Ñ ÑÑой ÑÑнкÑией. Ðа подÑобноÑÑÑми обÑаÑиÑеÑÑ Ðº РазделÑ 37.11. ÐÐ»Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑÑого ÑÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ð½Ñжно бÑÑÑ ÑÑпеÑполÑзоваÑелем.
ÐÐ¼Ñ Ð½Ð¾Ð²Ð¾Ð¹ вÑпомогаÑелÑной ÑÑнкÑии ÑвлÑеÑÑÑ Ð¾Ð±ÑзаÑелÑнÑм, поÑÑÐ¾Ð¼Ñ Ð´Ð°Ð½Ð½Ð¾Ðµ Ñказание не позволÑÐµÑ Ð¿Ð¾Ð»Ð½Ð¾ÑÑÑÑ Ð¾ÑказаÑÑÑÑ Ð¾Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð²ÑпомогаÑелÑной ÑÑнкÑии. ÐÑли вам ÑÑебÑеÑÑÑ ÑÑо, воÑполÑзÑйÑеÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾Ð¹
CREATE OR REPLACE FUNCTION.паÑамеÑÑ_конÑигÑÑаÑиизнаÑениеÐобавлÑÐµÑ Ð¸Ð»Ð¸ изменÑÐµÑ ÑÑÑÐ°Ð½Ð¾Ð²ÐºÑ Ð¿Ð°ÑамеÑÑа конÑигÑÑаÑии, вÑполнÑемÑÑ Ð¿Ñи вÑзове ÑÑнкÑии. ÐÑли задано
знаÑениеDEFAULTили, ÑÑо ÑавнознаÑно, вÑполнÑеÑÑÑ Ð´ÐµÐ¹ÑÑвиеRESET, локалÑное пеÑеопÑеделение Ð´Ð»Ñ ÑÑнкÑии ÑдалÑеÑÑÑ Ð¸ ÑÑнкÑÐ¸Ñ Ð²ÑполнÑеÑÑÑ Ñо знаÑением, ÑÑÑановленнÑм в окÑÑжении. ÐÐ»Ñ ÑÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð²ÑÐµÑ ÑÑÑановок паÑамеÑÑов Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð¹ ÑÑнкÑии ÑкажиÑеRESET ALL.SET FROM CURRENTÑÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ð´Ð»Ñ Ð¿Ð¾ÑледÑÑÑÐ¸Ñ Ð²Ñзовов ÑÑнкÑии знаÑение паÑамеÑÑа, дейÑÑвÑÑÑее в Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð²ÑполнениÑALTER PROCEDURE.Ðа подÑобнÑми ÑведениÑми об Ð¸Ð¼ÐµÐ½Ð°Ñ Ð¸ знаÑениÑÑ Ð¿Ð°ÑамеÑÑов обÑаÑиÑеÑÑ Ðº SET и Ðлаве 18.
RESTRICTÐгноÑиÑÑеÑÑÑ Ð´Ð»Ñ ÑооÑвеÑÑÑÐ²Ð¸Ñ ÑÑандаÑÑÑ SQL.
ÐÑимеÑÑ
ÐеÑеименование ÑÑнкÑии sqrt Ð´Ð»Ñ Ñипа integer в square_root:
ALTER FUNCTION sqrt(integer) RENAME TO square_root;
Смена владелÑÑа ÑÑнкÑии sqrt Ð´Ð»Ñ Ñипа integer на joe:
ALTER FUNCTION sqrt(integer) OWNER TO joe;
Смена ÑÑ
ÐµÐ¼Ñ ÑÑнкÑии sqrt Ð´Ð»Ñ Ñипа integer на maths:
ALTER FUNCTION sqrt(integer) SET SCHEMA maths;
ÐбознаÑение ÑÑнкÑии sqrt Ð´Ð»Ñ Ñипа integer как завиÑимой Ð¾Ñ ÑаÑÑиÑÐµÐ½Ð¸Ñ mathlib:
ALTER FUNCTION sqrt(integer) DEPENDS ON EXTENSION mathlib;
Ðзменение пÑÑи поиÑка, коÑоÑÑй ÑÑÑанавливаеÑÑÑ Ð°Ð²ÑомаÑиÑеÑки Ð´Ð»Ñ ÑÑнкÑии:
ALTER FUNCTION check_password(text) SET search_path = admin, pg_temp;
ÐÑмена авÑомаÑиÑеÑкого опÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ search_path Ð´Ð»Ñ ÑÑнкÑии:
ALTER FUNCTION check_password(text) RESET search_path;
ТепеÑÑ ÑÑнкÑÐ¸Ñ Ð±ÑÐ´ÐµÑ Ð²ÑполнÑÑÑÑÑ Ñ Ñем пÑÑÑм, коÑоÑÑй задан в Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð²Ñзова.
СовмеÑÑимоÑÑÑ
ÐÑÐ¾Ñ Ð¾Ð¿ÐµÑаÑÐ¾Ñ ÑаÑÑиÑно ÑовмеÑÑим Ñ Ð¾Ð¿ÐµÑаÑоÑом ALTER FUNCTION в ÑÑандаÑÑе SQL. СÑандаÑÑ Ð¿Ð¾Ð·Ð²Ð¾Ð»ÑÐµÑ Ð¼ÐµÐ½ÑÑÑ Ð±Ð¾Ð»ÑÑе ÑвойÑÑв ÑÑнкÑии, но не позволÑÐµÑ Ð¿ÐµÑеименовÑваÑÑ ÑÑнкÑии, пеÑеклÑÑаÑÑ ÐºÐ¾Ð½ÑекÑÑ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑи, ÑвÑзÑваÑÑ Ñ ÑÑнкÑиÑми знаÑÐµÐ½Ð¸Ñ Ð¿Ð°ÑамеÑÑов конÑигÑÑаÑии, а Ñакже менÑÑÑ Ð²Ð»Ð°Ð´ÐµÐ»ÑÑа, ÑÑ
ÐµÐ¼Ñ Ð¸ Ñип изменÑивоÑÑи ÑÑнкÑии. Также в ÑÑандаÑÑе Ñлово RESTRICT ÑÑиÑаеÑÑÑ Ð¾Ð±ÑзаÑелÑнÑм, Ñогда как в Postgres Pro оно не ÑÑебÑеÑÑÑ.