1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
|
'\" t
.\" Title: ALTER FUNCTION
.\" Author: The PostgreSQL Global Development Group
.\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/>
.\" Date: 2024
.\" Manual: PostgreSQL 16.3 Documentation
.\" Source: PostgreSQL 16.3
.\" Language: English
.\"
.TH "ALTER FUNCTION" "7" "2024" "PostgreSQL 16.3" "PostgreSQL 16.3 Documentation"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.\" http://bugs.debian.org/507673
.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
.\" disable hyphenation
.nh
.\" disable justification (adjust text to left margin only)
.ad l
.\" -----------------------------------------------------------------
.\" * MAIN CONTENT STARTS HERE *
.\" -----------------------------------------------------------------
.SH "NAME"
ALTER_FUNCTION \- change the definition of a function
.SH "SYNOPSIS"
.sp
.nf
ALTER FUNCTION \fIname\fR [ ( [ [ \fIargmode\fR ] [ \fIargname\fR ] \fIargtype\fR [, \&.\&.\&.] ] ) ]
\fIaction\fR [ \&.\&.\&. ] [ RESTRICT ]
ALTER FUNCTION \fIname\fR [ ( [ [ \fIargmode\fR ] [ \fIargname\fR ] \fIargtype\fR [, \&.\&.\&.] ] ) ]
RENAME TO \fInew_name\fR
ALTER FUNCTION \fIname\fR [ ( [ [ \fIargmode\fR ] [ \fIargname\fR ] \fIargtype\fR [, \&.\&.\&.] ] ) ]
OWNER TO { \fInew_owner\fR | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
ALTER FUNCTION \fIname\fR [ ( [ [ \fIargmode\fR ] [ \fIargname\fR ] \fIargtype\fR [, \&.\&.\&.] ] ) ]
SET SCHEMA \fInew_schema\fR
ALTER FUNCTION \fIname\fR [ ( [ [ \fIargmode\fR ] [ \fIargname\fR ] \fIargtype\fR [, \&.\&.\&.] ] ) ]
[ NO ] DEPENDS ON EXTENSION \fIextension_name\fR
where \fIaction\fR is one of:
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 \fIexecution_cost\fR
ROWS \fIresult_rows\fR
SUPPORT \fIsupport_function\fR
SET \fIconfiguration_parameter\fR { TO | = } { \fIvalue\fR | DEFAULT }
SET \fIconfiguration_parameter\fR FROM CURRENT
RESET \fIconfiguration_parameter\fR
RESET ALL
.fi
.SH "DESCRIPTION"
.PP
\fBALTER FUNCTION\fR
changes the definition of a function\&.
.PP
You must own the function to use
\fBALTER FUNCTION\fR\&. To change a function\*(Aqs schema, you must also have
CREATE
privilege on the new schema\&. To alter the owner, you must be able to
SET ROLE
to the new owning role, and that role must have
CREATE
privilege on the function\*(Aqs schema\&. (These restrictions enforce that altering the owner doesn\*(Aqt do anything you couldn\*(Aqt do by dropping and recreating the function\&. However, a superuser can alter ownership of any function anyway\&.)
.SH "PARAMETERS"
.PP
\fIname\fR
.RS 4
The name (optionally schema\-qualified) of an existing function\&. If no argument list is specified, the name must be unique in its schema\&.
.RE
.PP
\fIargmode\fR
.RS 4
The mode of an argument:
IN,
OUT,
INOUT, or
VARIADIC\&. If omitted, the default is
IN\&. Note that
\fBALTER FUNCTION\fR
does not actually pay any attention to
OUT
arguments, since only the input arguments are needed to determine the function\*(Aqs identity\&. So it is sufficient to list the
IN,
INOUT, and
VARIADIC
arguments\&.
.RE
.PP
\fIargname\fR
.RS 4
The name of an argument\&. Note that
\fBALTER FUNCTION\fR
does not actually pay any attention to argument names, since only the argument data types are needed to determine the function\*(Aqs identity\&.
.RE
.PP
\fIargtype\fR
.RS 4
The data type(s) of the function\*(Aqs arguments (optionally schema\-qualified), if any\&.
.RE
.PP
\fInew_name\fR
.RS 4
The new name of the function\&.
.RE
.PP
\fInew_owner\fR
.RS 4
The new owner of the function\&. Note that if the function is marked
SECURITY DEFINER, it will subsequently execute as the new owner\&.
.RE
.PP
\fInew_schema\fR
.RS 4
The new schema for the function\&.
.RE
.PP
DEPENDS ON EXTENSION \fIextension_name\fR
.br
NO DEPENDS ON EXTENSION \fIextension_name\fR
.RS 4
This form marks the function as dependent on the extension, or no longer dependent on that extension if
NO
is specified\&. A function that\*(Aqs marked as dependent on an extension is dropped when the extension is dropped, even if
CASCADE
is not specified\&. A function can depend upon multiple extensions, and will be dropped when any one of those extensions is dropped\&.
.RE
.PP
CALLED ON NULL INPUT
.br
RETURNS NULL ON NULL INPUT
.br
STRICT
.RS 4
CALLED ON NULL INPUT
changes the function so that it will be invoked when some or all of its arguments are null\&.
RETURNS NULL ON NULL INPUT
or
STRICT
changes the function so that it is not invoked if any of its arguments are null; instead, a null result is assumed automatically\&. See
CREATE FUNCTION (\fBCREATE_FUNCTION\fR(7))
for more information\&.
.RE
.PP
IMMUTABLE
.br
STABLE
.br
VOLATILE
.RS 4
Change the volatility of the function to the specified setting\&. See
CREATE FUNCTION (\fBCREATE_FUNCTION\fR(7))
for details\&.
.RE
.PP
[ EXTERNAL ] SECURITY INVOKER
.br
[ EXTERNAL ] SECURITY DEFINER
.RS 4
Change whether the function is a security definer or not\&. The key word
EXTERNAL
is ignored for SQL conformance\&. See
CREATE FUNCTION (\fBCREATE_FUNCTION\fR(7))
for more information about this capability\&.
.RE
.PP
PARALLEL
.RS 4
Change whether the function is deemed safe for parallelism\&. See
CREATE FUNCTION (\fBCREATE_FUNCTION\fR(7))
for details\&.
.RE
.PP
LEAKPROOF
.RS 4
Change whether the function is considered leakproof or not\&. See
CREATE FUNCTION (\fBCREATE_FUNCTION\fR(7))
for more information about this capability\&.
.RE
.PP
COST \fIexecution_cost\fR
.RS 4
Change the estimated execution cost of the function\&. See
CREATE FUNCTION (\fBCREATE_FUNCTION\fR(7))
for more information\&.
.RE
.PP
ROWS \fIresult_rows\fR
.RS 4
Change the estimated number of rows returned by a set\-returning function\&. See
CREATE FUNCTION (\fBCREATE_FUNCTION\fR(7))
for more information\&.
.RE
.PP
SUPPORT \fIsupport_function\fR
.RS 4
Set or change the planner support function to use for this function\&. See
Section\ \&38.11
for details\&. You must be superuser to use this option\&.
.sp
This option cannot be used to remove the support function altogether, since it must name a new support function\&. Use
\fBCREATE OR REPLACE FUNCTION\fR
if you need to do that\&.
.RE
.PP
\fIconfiguration_parameter\fR
.br
\fIvalue\fR
.RS 4
Add or change the assignment to be made to a configuration parameter when the function is called\&. If
\fIvalue\fR
is
DEFAULT
or, equivalently,
RESET
is used, the function\-local setting is removed, so that the function executes with the value present in its environment\&. Use
RESET ALL
to clear all function\-local settings\&.
SET FROM CURRENT
saves the value of the parameter that is current when
\fBALTER FUNCTION\fR
is executed as the value to be applied when the function is entered\&.
.sp
See
\fBSET\fR(7)
and
Chapter\ \&20
for more information about allowed parameter names and values\&.
.RE
.PP
RESTRICT
.RS 4
Ignored for conformance with the SQL standard\&.
.RE
.SH "EXAMPLES"
.PP
To rename the function
sqrt
for type
integer
to
square_root:
.sp
.if n \{\
.RS 4
.\}
.nf
ALTER FUNCTION sqrt(integer) RENAME TO square_root;
.fi
.if n \{\
.RE
.\}
.PP
To change the owner of the function
sqrt
for type
integer
to
joe:
.sp
.if n \{\
.RS 4
.\}
.nf
ALTER FUNCTION sqrt(integer) OWNER TO joe;
.fi
.if n \{\
.RE
.\}
.PP
To change the schema of the function
sqrt
for type
integer
to
maths:
.sp
.if n \{\
.RS 4
.\}
.nf
ALTER FUNCTION sqrt(integer) SET SCHEMA maths;
.fi
.if n \{\
.RE
.\}
.PP
To mark the function
sqrt
for type
integer
as being dependent on the extension
mathlib:
.sp
.if n \{\
.RS 4
.\}
.nf
ALTER FUNCTION sqrt(integer) DEPENDS ON EXTENSION mathlib;
.fi
.if n \{\
.RE
.\}
.PP
To adjust the search path that is automatically set for a function:
.sp
.if n \{\
.RS 4
.\}
.nf
ALTER FUNCTION check_password(text) SET search_path = admin, pg_temp;
.fi
.if n \{\
.RE
.\}
.PP
To disable automatic setting of
\fIsearch_path\fR
for a function:
.sp
.if n \{\
.RS 4
.\}
.nf
ALTER FUNCTION check_password(text) RESET search_path;
.fi
.if n \{\
.RE
.\}
.sp
The function will now execute with whatever search path is used by its caller\&.
.SH "COMPATIBILITY"
.PP
This statement is partially compatible with the
\fBALTER FUNCTION\fR
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
RESTRICT
key word, which is optional in
PostgreSQL\&.
.SH "SEE ALSO"
CREATE FUNCTION (\fBCREATE_FUNCTION\fR(7)), DROP FUNCTION (\fBDROP_FUNCTION\fR(7)), ALTER PROCEDURE (\fBALTER_PROCEDURE\fR(7)), ALTER ROUTINE (\fBALTER_ROUTINE\fR(7))
|