ok
Direktori : /opt/alt/postgresql11/usr/share/doc/alt-postgresql11-9.2.24/html/ |
Current File : //opt/alt/postgresql11/usr/share/doc/alt-postgresql11-9.2.24/html/sql-alterfunction.html |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <HTML ><HEAD ><TITLE >ALTER FUNCTION</TITLE ><META NAME="GENERATOR" CONTENT="Modular DocBook HTML Stylesheet Version 1.79"><LINK REV="MADE" HREF="mailto:pgsql-docs@postgresql.org"><LINK REL="HOME" TITLE="PostgreSQL 9.2.24 Documentation" HREF="index.html"><LINK REL="UP" TITLE="SQL Commands" HREF="sql-commands.html"><LINK REL="PREVIOUS" TITLE="ALTER FOREIGN TABLE" HREF="sql-alterforeigntable.html"><LINK REL="NEXT" TITLE="ALTER GROUP" HREF="sql-altergroup.html"><LINK REL="STYLESHEET" TYPE="text/css" HREF="stylesheet.css"><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1"><META NAME="creation" CONTENT="2017-11-06T22:43:11"></HEAD ><BODY CLASS="REFENTRY" ><DIV CLASS="NAVHEADER" ><TABLE SUMMARY="Header navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TH COLSPAN="5" ALIGN="center" VALIGN="bottom" ><A HREF="index.html" >PostgreSQL 9.2.24 Documentation</A ></TH ></TR ><TR ><TD WIDTH="10%" ALIGN="left" VALIGN="top" ><A TITLE="ALTER FOREIGN TABLE" HREF="sql-alterforeigntable.html" ACCESSKEY="P" >Prev</A ></TD ><TD WIDTH="10%" ALIGN="left" VALIGN="top" ><A HREF="sql-commands.html" ACCESSKEY="U" >Up</A ></TD ><TD WIDTH="60%" ALIGN="center" VALIGN="bottom" ></TD ><TD WIDTH="20%" ALIGN="right" VALIGN="top" ><A TITLE="ALTER GROUP" HREF="sql-altergroup.html" ACCESSKEY="N" >Next</A ></TD ></TR ></TABLE ><HR ALIGN="LEFT" WIDTH="100%"></DIV ><H1 ><A NAME="SQL-ALTERFUNCTION" ></A >ALTER FUNCTION</H1 ><DIV CLASS="REFNAMEDIV" ><A NAME="AEN63538" ></A ><H2 >Name</H2 >ALTER FUNCTION -- change the definition of a function</DIV ><DIV CLASS="REFSYNOPSISDIV" ><A NAME="AEN63543" ></A ><H2 >Synopsis</H2 ><PRE CLASS="SYNOPSIS" >ALTER FUNCTION <TT CLASS="REPLACEABLE" ><I >name</I ></TT > ( [ [ <TT CLASS="REPLACEABLE" ><I >argmode</I ></TT > ] [ <TT CLASS="REPLACEABLE" ><I >argname</I ></TT > ] <TT CLASS="REPLACEABLE" ><I >argtype</I ></TT > [, ...] ] ) <TT CLASS="REPLACEABLE" ><I >action</I ></TT > [ ... ] [ RESTRICT ] ALTER FUNCTION <TT CLASS="REPLACEABLE" ><I >name</I ></TT > ( [ [ <TT CLASS="REPLACEABLE" ><I >argmode</I ></TT > ] [ <TT CLASS="REPLACEABLE" ><I >argname</I ></TT > ] <TT CLASS="REPLACEABLE" ><I >argtype</I ></TT > [, ...] ] ) RENAME TO <TT CLASS="REPLACEABLE" ><I >new_name</I ></TT > ALTER FUNCTION <TT CLASS="REPLACEABLE" ><I >name</I ></TT > ( [ [ <TT CLASS="REPLACEABLE" ><I >argmode</I ></TT > ] [ <TT CLASS="REPLACEABLE" ><I >argname</I ></TT > ] <TT CLASS="REPLACEABLE" ><I >argtype</I ></TT > [, ...] ] ) OWNER TO <TT CLASS="REPLACEABLE" ><I >new_owner</I ></TT > ALTER FUNCTION <TT CLASS="REPLACEABLE" ><I >name</I ></TT > ( [ [ <TT CLASS="REPLACEABLE" ><I >argmode</I ></TT > ] [ <TT CLASS="REPLACEABLE" ><I >argname</I ></TT > ] <TT CLASS="REPLACEABLE" ><I >argtype</I ></TT > [, ...] ] ) SET SCHEMA <TT CLASS="REPLACEABLE" ><I >new_schema</I ></TT > <SPAN CLASS="phrase" ><SPAN CLASS="PHRASE" >where <TT CLASS="REPLACEABLE" ><I >action</I ></TT > is one of:</SPAN ></SPAN > CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT IMMUTABLE | STABLE | VOLATILE | [ NOT ] LEAKPROOF [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER COST <TT CLASS="REPLACEABLE" ><I >execution_cost</I ></TT > ROWS <TT CLASS="REPLACEABLE" ><I >result_rows</I ></TT > SET <TT CLASS="REPLACEABLE" ><I >configuration_parameter</I ></TT > { TO | = } { <TT CLASS="REPLACEABLE" ><I >value</I ></TT > | DEFAULT } SET <TT CLASS="REPLACEABLE" ><I >configuration_parameter</I ></TT > FROM CURRENT RESET <TT CLASS="REPLACEABLE" ><I >configuration_parameter</I ></TT > RESET ALL</PRE ></DIV ><DIV CLASS="REFSECT1" ><A NAME="AEN63573" ></A ><H2 >Description</H2 ><P > <TT CLASS="COMMAND" >ALTER FUNCTION</TT > changes the definition of a function. </P ><P > You must own the function to use <TT CLASS="COMMAND" >ALTER FUNCTION</TT >. To change a function's schema, you must also have <TT CLASS="LITERAL" >CREATE</TT > privilege on the new schema. To alter the owner, you must also be a direct or indirect member of the new owning role, and that role must have <TT CLASS="LITERAL" >CREATE</TT > privilege on the function's schema. (These restrictions enforce that altering the owner doesn't do anything you couldn't do by dropping and recreating the function. However, a superuser can alter ownership of any function anyway.) </P ></DIV ><DIV CLASS="REFSECT1" ><A NAME="AEN63581" ></A ><H2 >Parameters</H2 ><P ></P ><DIV CLASS="VARIABLELIST" ><DL ><DT ><TT CLASS="REPLACEABLE" ><I >name</I ></TT ></DT ><DD ><P > The name (optionally schema-qualified) of an existing function. </P ></DD ><DT ><TT CLASS="REPLACEABLE" ><I >argmode</I ></TT ></DT ><DD ><P > The mode of an argument: <TT CLASS="LITERAL" >IN</TT >, <TT CLASS="LITERAL" >OUT</TT >, <TT CLASS="LITERAL" >INOUT</TT >, or <TT CLASS="LITERAL" >VARIADIC</TT >. If omitted, the default is <TT CLASS="LITERAL" >IN</TT >. Note that <TT CLASS="COMMAND" >ALTER FUNCTION</TT > does not actually pay any attention to <TT CLASS="LITERAL" >OUT</TT > arguments, since only the input arguments are needed to determine the function's identity. So it is sufficient to list the <TT CLASS="LITERAL" >IN</TT >, <TT CLASS="LITERAL" >INOUT</TT >, and <TT CLASS="LITERAL" >VARIADIC</TT > arguments. </P ></DD ><DT ><TT CLASS="REPLACEABLE" ><I >argname</I ></TT ></DT ><DD ><P > The name of an argument. Note that <TT CLASS="COMMAND" >ALTER FUNCTION</TT > does not actually pay any attention to argument names, since only the argument data types are needed to determine the function's identity. </P ></DD ><DT ><TT CLASS="REPLACEABLE" ><I >argtype</I ></TT ></DT ><DD ><P > The data type(s) of the function's arguments (optionally schema-qualified), if any. </P ></DD ><DT ><TT CLASS="REPLACEABLE" ><I >new_name</I ></TT ></DT ><DD ><P > The new name of the function. </P ></DD ><DT ><TT CLASS="REPLACEABLE" ><I >new_owner</I ></TT ></DT ><DD ><P > The new owner of the function. Note that if the function is marked <TT CLASS="LITERAL" >SECURITY DEFINER</TT >, it will subsequently execute as the new owner. </P ></DD ><DT ><TT CLASS="REPLACEABLE" ><I >new_schema</I ></TT ></DT ><DD ><P > The new schema for the function. </P ></DD ><DT ><TT CLASS="LITERAL" >CALLED ON NULL INPUT</TT ><BR><TT CLASS="LITERAL" >RETURNS NULL ON NULL INPUT</TT ><BR><TT CLASS="LITERAL" >STRICT</TT ></DT ><DD ><P ><TT CLASS="LITERAL" >CALLED ON NULL INPUT</TT > changes the function so that it will be invoked when some or all of its arguments are null. <TT CLASS="LITERAL" >RETURNS NULL ON NULL INPUT</TT > or <TT CLASS="LITERAL" >STRICT</TT > changes the function so that it is not invoked if any of its arguments are null; instead, a null result is assumed automatically. See <A HREF="sql-createfunction.html" >CREATE FUNCTION</A > for more information. </P ></DD ><DT ><TT CLASS="LITERAL" >IMMUTABLE</TT ><BR><TT CLASS="LITERAL" >STABLE</TT ><BR><TT CLASS="LITERAL" >VOLATILE</TT ></DT ><DD ><P > Change the volatility of the function to the specified setting. See <A HREF="sql-createfunction.html" >CREATE FUNCTION</A > for details. </P ></DD ><DT ><TT CLASS="LITERAL" >[<SPAN CLASS="OPTIONAL" > EXTERNAL </SPAN >] SECURITY INVOKER</TT ><BR><TT CLASS="LITERAL" >[<SPAN CLASS="OPTIONAL" > EXTERNAL </SPAN >] SECURITY DEFINER</TT ></DT ><DD ><P > Change whether the function is a security definer or not. The key word <TT CLASS="LITERAL" >EXTERNAL</TT > is ignored for SQL conformance. See <A HREF="sql-createfunction.html" >CREATE FUNCTION</A > for more information about this capability. </P ></DD ><DT ><TT CLASS="LITERAL" >LEAKPROOF</TT ></DT ><DD ><P > Change whether the function is considered leakproof or not. See <A HREF="sql-createfunction.html" >CREATE FUNCTION</A > for more information about this capability. </P ></DD ><DT ><TT CLASS="LITERAL" >COST</TT > <TT CLASS="REPLACEABLE" ><I >execution_cost</I ></TT ></DT ><DD ><P > Change the estimated execution cost of the function. See <A HREF="sql-createfunction.html" >CREATE FUNCTION</A > for more information. </P ></DD ><DT ><TT CLASS="LITERAL" >ROWS</TT > <TT CLASS="REPLACEABLE" ><I >result_rows</I ></TT ></DT ><DD ><P > Change the estimated number of rows returned by a set-returning function. See <A HREF="sql-createfunction.html" >CREATE FUNCTION</A > for more information. </P ></DD ><DT ><TT CLASS="REPLACEABLE" ><I >configuration_parameter</I ></TT ><BR><TT CLASS="REPLACEABLE" ><I >value</I ></TT ></DT ><DD ><P > Add or change the assignment to be made to a configuration parameter when the function is called. If <TT CLASS="REPLACEABLE" ><I >value</I ></TT > is <TT CLASS="LITERAL" >DEFAULT</TT > or, equivalently, <TT CLASS="LITERAL" >RESET</TT > is used, the function-local setting is removed, so that the function executes with the value present in its environment. Use <TT CLASS="LITERAL" >RESET ALL</TT > to clear all function-local settings. <TT CLASS="LITERAL" >SET FROM CURRENT</TT > saves the value of the parameter that is current when <TT CLASS="COMMAND" >ALTER FUNCTION</TT > is executed as the value to be applied when the function is entered. </P ><P > See <A HREF="sql-set.html" >SET</A > and <A HREF="runtime-config.html" >Chapter 18</A > for more information about allowed parameter names and values. </P ></DD ><DT ><TT CLASS="LITERAL" >RESTRICT</TT ></DT ><DD ><P > Ignored for conformance with the SQL standard. </P ></DD ></DL ></DIV ></DIV ><DIV CLASS="REFSECT1" ><A NAME="AEN63706" ></A ><H2 >Examples</H2 ><P > To rename the function <TT CLASS="LITERAL" >sqrt</TT > for type <TT CLASS="TYPE" >integer</TT > to <TT CLASS="LITERAL" >square_root</TT >: </P><PRE CLASS="PROGRAMLISTING" >ALTER FUNCTION sqrt(integer) RENAME TO square_root;</PRE ><P> </P ><P > To change the owner of the function <TT CLASS="LITERAL" >sqrt</TT > for type <TT CLASS="TYPE" >integer</TT > to <TT CLASS="LITERAL" >joe</TT >: </P><PRE CLASS="PROGRAMLISTING" >ALTER FUNCTION sqrt(integer) OWNER TO joe;</PRE ><P> </P ><P > To change the schema of the function <TT CLASS="LITERAL" >sqrt</TT > for type <TT CLASS="TYPE" >integer</TT > to <TT CLASS="LITERAL" >maths</TT >: </P><PRE CLASS="PROGRAMLISTING" >ALTER FUNCTION sqrt(integer) SET SCHEMA maths;</PRE ><P> </P ><P > To adjust the search path that is automatically set for a function: </P><PRE CLASS="PROGRAMLISTING" >ALTER FUNCTION check_password(text) SET search_path = admin, pg_temp;</PRE ><P> </P ><P > To disable automatic setting of <TT CLASS="VARNAME" >search_path</TT > for a function: </P><PRE CLASS="PROGRAMLISTING" >ALTER FUNCTION check_password(text) RESET search_path;</PRE ><P> The function will now execute with whatever search path is used by its caller. </P ></DIV ><DIV CLASS="REFSECT1" ><A NAME="AEN63728" ></A ><H2 >Compatibility</H2 ><P > This statement is partially compatible with the <TT CLASS="COMMAND" >ALTER FUNCTION</TT > statement in the SQL standard. The standard allows more properties of a function to be modified, but does not provide the ability to rename a function, make a function a security definer, attach configuration parameter values to a function, or change the owner, schema, or volatility of a function. The standard also requires the <TT CLASS="LITERAL" >RESTRICT</TT > key word, which is optional in <SPAN CLASS="PRODUCTNAME" >PostgreSQL</SPAN >. </P ></DIV ><DIV CLASS="REFSECT1" ><A NAME="AEN63734" ></A ><H2 >See Also</H2 ><A HREF="sql-createfunction.html" >CREATE FUNCTION</A >, <A HREF="sql-dropfunction.html" >DROP FUNCTION</A ></DIV ><DIV CLASS="NAVFOOTER" ><HR ALIGN="LEFT" WIDTH="100%"><TABLE SUMMARY="Footer navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" ><A HREF="sql-alterforeigntable.html" ACCESSKEY="P" >Prev</A ></TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="index.html" ACCESSKEY="H" >Home</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" ><A HREF="sql-altergroup.html" ACCESSKEY="N" >Next</A ></TD ></TR ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" >ALTER FOREIGN TABLE</TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="sql-commands.html" ACCESSKEY="U" >Up</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" >ALTER GROUP</TD ></TR ></TABLE ></DIV ></BODY ></HTML >