{"Entry":{"collection":"catalog","key":"pg_proc","name":"pg_proc","aliases":[],"metadata":{"changed_in":["8.0","8.1","8.3","8.4","9.0","9.1","9.2","9.5","9.6","11","12","14"],"changes":[{"added":["proargnames"],"attributes":[],"description_changed":true,"descriptions":[{"from":"Access privileges","name":"proacl","to":"Access privileges; see GRANT and REVOKE for details."}],"from":"7.4","listing":[],"order":false,"removed":[],"status":"changed","to":"8.0","types":[],"unlisted":[]},{"added":["proallargtypes","proargmodes"],"attributes":[],"description_changed":true,"descriptions":[{"from":"An array with the names of the function arguments. Arguments without a name are set to empty strings in the array. If none of the arguments have a name, this field may be null.","name":"proargnames","to":"An array with the names of the function arguments. Arguments without a name are set to empty strings in the array. If none of the arguments have a name, this field will be null. Note that subscripts correspond to positions of proallargtypes not proargtypes."},{"from":"An array with the data types of the function arguments","name":"proargtypes","to":"An array with the data types of the function arguments. This includes only input arguments (including INOUT arguments), and thus represents the call signature of the function."}],"from":"8.0","listing":[],"order":false,"removed":[],"status":"changed","to":"8.1","types":[{"from":"int4","name":"proowner","to":"oid"}],"unlisted":[]},{"added":[],"attributes":[],"description_changed":true,"descriptions":[{"from":"Access privileges; see GRANT and REVOKE for details.","name":"proacl","to":"Access privileges; see GRANT and REVOKE for details"},{"from":"An array with the data types of the function arguments. This includes all arguments (including OUT and INOUT arguments); however, if all the arguments are IN arguments, this field will be null. Note that subscripting is 1-based, whereas for historical reasons proargtypes is subscripted from 0.","name":"proallargtypes","to":"An array with the data types of the function arguments. This includes all arguments (including OUT and INOUT arguments); however, if all the arguments are IN arguments, this field will be null. Note that subscripting is 1-based, whereas for historical reasons proargtypes is subscripted from 0"},{"from":"An array with the modes of the function arguments, encoded as i for IN arguments, o for OUT arguments, b for INOUT arguments. If all the arguments are IN arguments, this field will be null. Note that subscripts correspond to positions of proallargtypes not proargtypes.","name":"proargmodes","to":"An array with the modes of the function arguments, encoded as i for IN arguments, o for OUT arguments, b for INOUT arguments. If all the arguments are IN arguments, this field will be null. Note that subscripts correspond to positions of proallargtypes not proargtypes"},{"from":"An array with the names of the function arguments. Arguments without a name are set to empty strings in the array. If none of the arguments have a name, this field will be null. Note that subscripts correspond to positions of proallargtypes not proargtypes.","name":"proargnames","to":"An array with the names of the function arguments. Arguments without a name are set to empty strings in the array. If none of the arguments have a name, this field will be null. Note that subscripts correspond to positions of proallargtypes not proargtypes"},{"from":"An array with the data types of the function arguments. This includes only input arguments (including INOUT arguments), and thus represents the call signature of the function.","name":"proargtypes","to":"An array with the data types of the function arguments. This includes only input arguments (including INOUT arguments), and thus represents the call signature of the function"},{"from":"Additional information about how to invoke the function. Again, the interpretation is language-specific.","name":"probin","to":"Additional information about how to invoke the function. Again, the interpretation is language-specific"},{"from":"Function returns null if any call argument is null. In that case the function won't actually be called at all. Functions that are not \"strict\" must be prepared to handle null inputs.","name":"proisstrict","to":"Function returns null if any call argument is null. In that case the function won't actually be called at all. Functions that are not \"strict\" must be prepared to handle null inputs"},{"from":"This tells the function handler how to invoke the function. It might be the actual source code of the function for interpreted languages, a link symbol, a file name, or just about anything else, depending on the implementation language/call convention.","name":"prosrc","to":"This tells the function handler how to invoke the function. It might be the actual source code of the function for interpreted languages, a link symbol, a file name, or just about anything else, depending on the implementation language/call convention"}],"from":"8.1","listing":[],"order":false,"removed":[],"status":"reworded","to":"8.2","types":[],"unlisted":[]},{"added":["procost","prorows","proconfig"],"attributes":[],"description_changed":true,"descriptions":[{"from":"provolatile tells whether the function's result depends only on its input arguments, or is affected by outside factors. It is i for \"immutable\" functions, which always deliver the same result for the same inputs. It is s for \"stable\" functions, whose results (for fixed inputs) do not change within a scan. It is v for \"volatile\" functions, whose results may change at any time. (Use v also for functions with side-effects, so that calls to them cannot get optimized away.)","name":"provolatile","to":"provolatile tells whether the function's result depends only on its input arguments, or is affected by outside factors. It is i for \"immutable\" functions, which always deliver the same result for the same inputs. It is s for \"stable\" functions, whose results (for fixed inputs) do not change within a scan. It is v for \"volatile\" functions, whose results might change at any time. (Use v also for functions with side-effects, so that calls to them cannot get optimized away.)"}],"from":"8.2","listing":[],"order":false,"removed":[],"status":"changed","to":"8.3","types":[],"unlisted":[]},{"added":["provariadic","proiswindow","pronargdefaults","proargdefaults"],"attributes":[],"description_changed":false,"descriptions":[{"from":"An array with the modes of the function arguments, encoded as i for IN arguments, o for OUT arguments, b for INOUT arguments. If all the arguments are IN arguments, this field will be null. Note that subscripts correspond to positions of proallargtypes not proargtypes","name":"proargmodes","to":"An array with the modes of the function arguments, encoded as i for IN arguments, o for OUT arguments, b for INOUT arguments, v for VARIADIC arguments, t for TABLE arguments. If all the arguments are IN arguments, this field will be null. Note that subscripts correspond to positions of proallargtypes not proargtypes"},{"from":"An array with the data types of the function arguments. This includes only input arguments (including INOUT arguments), and thus represents the call signature of the function","name":"proargtypes","to":"An array with the data types of the function arguments. This includes only input arguments (including INOUT and VARIADIC arguments), and thus represents the call signature of the function"},{"from":"Number of arguments","name":"pronargs","to":"Number of input arguments"}],"from":"8.3","listing":[],"order":false,"removed":[],"status":"changed","to":"8.4","types":[],"unlisted":[]},{"added":[],"attributes":[],"description_changed":true,"descriptions":[{"from":"An array with the data types of the function arguments. This includes all arguments (including OUT and INOUT arguments); however, if all the arguments are IN arguments, this field will be null. Note that subscripting is 1-based, whereas for historical reasons proargtypes is subscripted from 0","name":"proallargtypes","to":"An array with the data types of the function arguments. This includes all arguments (including OUT and INOUT arguments); however, if all the arguments are IN arguments, this field will be null. Note that subscripting is 1-based, whereas for historical reasons proargtypes is subscripted from 0."},{"from":"Expression trees (in nodeToString() representation) for default values. This is a list with pronargdefaults elements, corresponding to the last N input arguments (i.e., the last N proargtypes positions). If none of the arguments have defaults, this field will be null","name":"proargdefaults","to":"Expression trees (in nodeToString() representation) for default values. This is a list with pronargdefaults elements, corresponding to the last N input arguments (i.e., the last N proargtypes positions). If none of the arguments have defaults, this field will be null."},{"from":"An array with the modes of the function arguments, encoded as i for IN arguments, o for OUT arguments, b for INOUT arguments, v for VARIADIC arguments, t for TABLE arguments. If all the arguments are IN arguments, this field will be null. Note that subscripts correspond to positions of proallargtypes not proargtypes","name":"proargmodes","to":"An array with the modes of the function arguments, encoded as i for IN arguments, o for OUT arguments, b for INOUT arguments, v for VARIADIC arguments, t for TABLE arguments. If all the arguments are IN arguments, this field will be null. Note that subscripts correspond to positions of proallargtypes not proargtypes."},{"from":"An array with the names of the function arguments. Arguments without a name are set to empty strings in the array. If none of the arguments have a name, this field will be null. Note that subscripts correspond to positions of proallargtypes not proargtypes","name":"proargnames","to":"An array with the names of the function arguments. Arguments without a name are set to empty strings in the array. If none of the arguments have a name, this field will be null. Note that subscripts correspond to positions of proallargtypes not proargtypes."},{"from":"An array with the data types of the function arguments. This includes only input arguments (including INOUT and VARIADIC arguments), and thus represents the call signature of the function","name":"proargtypes","to":"An array with the data types of the function arguments. This includes only input arguments (including INOUT and VARIADIC arguments), and thus represents the call signature of the function."},{"from":"Additional information about how to invoke the function. Again, the interpretation is language-specific","name":"probin","to":"Additional information about how to invoke the function. Again, the interpretation is language-specific."},{"from":"Function returns null if any call argument is null. In that case the function won't actually be called at all. Functions that are not \"strict\" must be prepared to handle null inputs","name":"proisstrict","to":"Function returns null if any call argument is null. In that case the function won't actually be called at all. Functions that are not \"strict\" must be prepared to handle null inputs."},{"from":"This tells the function handler how to invoke the function. It might be the actual source code of the function for interpreted languages, a link symbol, a file name, or just about anything else, depending on the implementation language/call convention","name":"prosrc","to":"This tells the function handler how to invoke the function. It might be the actual source code of the function for interpreted languages, a link symbol, a file name, or just about anything else, depending on the implementation language/call convention."}],"from":"8.4","listing":[],"order":false,"removed":[],"status":"changed","to":"9.0","types":[{"from":"bytea","name":"probin","to":"text"}],"unlisted":[]},{"added":[],"attributes":[],"description_changed":false,"descriptions":[],"from":"9.0","listing":[],"order":false,"removed":[],"status":"changed","to":"9.1","types":[{"from":"text","name":"proargdefaults","to":"pg_node_tree"}],"unlisted":[]},{"added":["protransform","proleakproof"],"attributes":[],"description_changed":false,"descriptions":[],"from":"9.1","listing":[],"order":false,"removed":[],"status":"changed","to":"9.2","types":[],"unlisted":[]},{"added":["protrftypes"],"attributes":[{"attribute":"not_null","from":false,"name":"prosrc","to":true}],"description_changed":false,"descriptions":[],"from":"9.4","listing":[],"order":false,"removed":[],"status":"changed","to":"9.5","types":[],"unlisted":[]},{"added":["proparallel"],"attributes":[],"description_changed":true,"descriptions":[{"from":"Calls to this function can be simplified by this other function (see Section 35.9.11)","name":"protransform","to":"Calls to this function can be simplified by this other function (see Section 36.9.11)"}],"from":"9.5","listing":[],"order":false,"removed":[],"status":"changed","to":"9.6","types":[],"unlisted":[]},{"added":[],"attributes":[],"description_changed":true,"descriptions":[{"from":"Function returns null if any call argument is null. In that case the function won't actually be called at all. Functions that are not \"strict\" must be prepared to handle null inputs.","name":"proisstrict","to":"Function returns null if any call argument is null. In that case the function won't actually be called at all. Functions that are not “strict” must be prepared to handle null inputs."},{"from":"Function is a security definer (i.e., a \"setuid\" function)","name":"prosecdef","to":"Function is a security definer (i.e., a “setuid” function)"},{"from":"Calls to this function can be simplified by this other function (see Section 36.9.11)","name":"protransform","to":"Calls to this function can be simplified by this other function (see Section 37.9.10)"},{"from":"provolatile tells whether the function's result depends only on its input arguments, or is affected by outside factors. It is i for \"immutable\" functions, which always deliver the same result for the same inputs. It is s for \"stable\" functions, whose results (for fixed inputs) do not change within a scan. It is v for \"volatile\" functions, whose results might change at any time. (Use v also for functions with side-effects, so that calls to them cannot get optimized away.)","name":"provolatile","to":"provolatile tells whether the function's result depends only on its input arguments, or is affected by outside factors. It is i for “immutable” functions, which always deliver the same result for the same inputs. It is s for “stable” functions, whose results (for fixed inputs) do not change within a scan. It is v for “volatile” functions, whose results might change at any time. (Use v also for functions with side-effects, so that calls to them cannot get optimized away.)"}],"from":"9.6","listing":[],"order":false,"removed":[],"status":"reworded","to":"10","types":[],"unlisted":[]},{"added":["prokind"],"attributes":[],"description_changed":true,"descriptions":[{"from":"Calls to this function can be simplified by this other function (see Section 37.9.10)","name":"protransform","to":"Calls to this function can be simplified by this other function (see Section 38.10.10)"}],"from":"10","listing":[],"order":false,"removed":["proisagg","proiswindow"],"status":"changed","to":"11","types":[],"unlisted":[]},{"added":["prosupport"],"attributes":[{"attribute":"hidden","from":true,"name":"oid","to":false}],"description_changed":true,"descriptions":[{"from":"Access privileges; see GRANT and REVOKE for details","name":"proacl","to":"Access privileges; see Section 5.7 for details"}],"from":"11","listing":[],"order":false,"removed":["protransform"],"status":"changed","to":"12","types":[],"unlisted":[]},{"added":[],"attributes":[],"description_changed":false,"descriptions":[{"from":"An array with the data types of the function arguments. This includes all arguments (including OUT and INOUT arguments); however, if all the arguments are IN arguments, this field will be null. Note that subscripting is 1-based, whereas for historical reasons proargtypes is subscripted from 0.","name":"proallargtypes","to":"An array of the data types of the function arguments. This includes all arguments (including OUT and INOUT arguments); however, if all the arguments are IN arguments, this field will be null. Note that subscripting is 1-based, whereas for historical reasons proargtypes is subscripted from 0."},{"from":"An array with the modes of the function arguments, encoded as i for IN arguments, o for OUT arguments, b for INOUT arguments, v for VARIADIC arguments, t for TABLE arguments. If all the arguments are IN arguments, this field will be null. Note that subscripts correspond to positions of proallargtypes not proargtypes.","name":"proargmodes","to":"An array of the modes of the function arguments, encoded as i for IN arguments, o for OUT arguments, b for INOUT arguments, v for VARIADIC arguments, t for TABLE arguments. If all the arguments are IN arguments, this field will be null. Note that subscripts correspond to positions of proallargtypes not proargtypes."},{"from":"An array with the names of the function arguments. Arguments without a name are set to empty strings in the array. If none of the arguments have a name, this field will be null. Note that subscripts correspond to positions of proallargtypes not proargtypes.","name":"proargnames","to":"An array of the names of the function arguments. Arguments without a name are set to empty strings in the array. If none of the arguments have a name, this field will be null. Note that subscripts correspond to positions of proallargtypes not proargtypes."},{"from":"An array with the data types of the function arguments. This includes only input arguments (including INOUT and VARIADIC arguments), and thus represents the call signature of the function.","name":"proargtypes","to":"An array of the data types of the function arguments. This includes only input arguments (including INOUT and VARIADIC arguments), and thus represents the call signature of the function."},{"from":"Data type OIDs for which to apply transforms.","name":"protrftypes","to":"An array of the argument/result data type(s) for which to apply transforms (from the function's TRANSFORM clause). Null if none."}],"from":"12","listing":[],"order":false,"removed":[],"status":"reworded","to":"13","types":[],"unlisted":[]},{"added":["prosqlbody"],"attributes":[],"description_changed":true,"descriptions":[{"from":"Optional planner support function for this function (see Section 37.11)","name":"prosupport","to":"Planner support function for this function (see Section 38.11), or zero if none"}],"from":"13","listing":[],"order":false,"removed":[],"status":"changed","to":"14","types":[],"unlisted":[]},{"added":[],"attributes":[],"description_changed":true,"descriptions":[{"from":"Access privileges; see Section 5.7 for details","name":"proacl","to":"Access privileges; see Section 5.8 for details"},{"from":"Planner support function for this function (see Section 38.11), or zero if none","name":"prosupport","to":"Planner support function for this function (see Section 36.11), or zero if none"}],"from":"16","listing":[],"order":false,"removed":[],"status":"reworded","to":"17","types":[],"unlisted":[]},{"added":[],"attributes":[],"description_changed":false,"descriptions":[{"from":"The function has no side effects. No information about the arguments is conveyed except via the return value. Any function that might throw an error depending on the values of its arguments is not leak-proof.","name":"proleakproof","to":"The function has no side effects. No information about the arguments is conveyed except via the return value. Any function that might throw an error depending on the values of its arguments is not leakproof."}],"from":"17","listing":[],"order":false,"removed":[],"status":"reworded","to":"18","types":[],"unlisted":[]},{"added":[],"attributes":[],"description_changed":false,"descriptions":[{"from":"Access privileges; see Section 5.8 for details","name":"proacl","to":"Access privileges; see Section 5.9 for details"}],"from":"18","listing":[],"order":false,"removed":[],"status":"reworded","to":"19","types":[],"unlisted":[]}],"column_count":30,"content_hash":"6eace9b96778cbdc1201b0a923260d639261b7cf78f82c0c2ec4b077e881de67","first_version":"7.4","imported_at":"2026-09-30T00:40:55.709025+08:00","kind":"catalog","last_version":"20","name":"pg_proc","position":57,"present_in":["7.4","8.0","8.1","8.2","8.3","8.4","9.0","9.1","9.2","9.3","9.4","9.5","9.6","10","11","12","13","14","15","16","17","18","19","20"],"relation_oid":null,"relkind":"r","shared":false,"source_rev":"english-manuals:fc501feeb941adb173a51e415b57c62c65193bb952688703f38b64445f2a45cf","summary":"The catalog pg_proc stores information about functions, procedures, aggregate functions, and window functions (collectively also known as routines).","summary_zh":""}},"Definition":{"Collection":"catalog","Key":"pg_proc","SourceDatabase":"center","Version":"18","SourceTable":"catalog","SourceKey":"pg_proc","SourceRevision":"english-manuals:fc501feeb941adb173a51e415b57c62c65193bb952688703f38b64445f2a45cf","Facts":{"columns":[{"array_dimensions":0,"attnum":1,"description":"Row identifier","description_zh":"","documented":true,"documented_name":"oid","hidden":false,"name":"oid","not_null":true,"references":"","type":"oid","type_modifier":-1,"type_oid":26},{"array_dimensions":0,"attnum":2,"description":"Name of the function","description_zh":"","documented":true,"documented_name":"proname","hidden":false,"name":"proname","not_null":true,"references":"","type":"name","type_modifier":-1,"type_oid":19},{"array_dimensions":0,"attnum":3,"description":"The OID of the namespace that contains this function","description_zh":"","documented":true,"documented_name":"pronamespace","hidden":false,"name":"pronamespace","not_null":true,"references":"pg_namespace.oid","type":"oid","type_modifier":-1,"type_oid":26},{"array_dimensions":0,"attnum":4,"description":"Owner of the function","description_zh":"","documented":true,"documented_name":"proowner","hidden":false,"name":"proowner","not_null":true,"references":"pg_authid.oid","type":"oid","type_modifier":-1,"type_oid":26},{"array_dimensions":0,"attnum":5,"description":"Implementation language or call interface of this function","description_zh":"","documented":true,"documented_name":"prolang","hidden":false,"name":"prolang","not_null":true,"references":"pg_language.oid","type":"oid","type_modifier":-1,"type_oid":26},{"array_dimensions":0,"attnum":6,"description":"Estimated execution cost (in units of cpu_operator_cost); if proretset, this is cost per row returned","description_zh":"","documented":true,"documented_name":"procost","hidden":false,"name":"procost","not_null":true,"references":"","type":"float4","type_modifier":-1,"type_oid":700},{"array_dimensions":0,"attnum":7,"description":"Estimated number of result rows (zero if not proretset)","description_zh":"","documented":true,"documented_name":"prorows","hidden":false,"name":"prorows","not_null":true,"references":"","type":"float4","type_modifier":-1,"type_oid":700},{"array_dimensions":0,"attnum":8,"description":"Data type of the variadic array parameter's elements, or zero if the function does not have a variadic parameter","description_zh":"","documented":true,"documented_name":"provariadic","hidden":false,"name":"provariadic","not_null":true,"references":"pg_type.oid","type":"oid","type_modifier":-1,"type_oid":26},{"array_dimensions":0,"attnum":9,"description":"Planner support function for this function (see Section 36.11), or zero if none","description_zh":"","documented":true,"documented_name":"prosupport","hidden":false,"name":"prosupport","not_null":true,"references":"pg_proc.oid","type":"regproc","type_modifier":-1,"type_oid":24},{"array_dimensions":0,"attnum":10,"description":"f for a normal function, p for a procedure, a for an aggregate function, or w for a window function","description_zh":"","documented":true,"documented_name":"prokind","hidden":false,"name":"prokind","not_null":true,"references":"","type":"char","type_modifier":-1,"type_oid":18},{"array_dimensions":0,"attnum":11,"description":"Function is a security definer (i.e., a “setuid” function)","description_zh":"","documented":true,"documented_name":"prosecdef","hidden":false,"name":"prosecdef","not_null":true,"references":"","type":"bool","type_modifier":-1,"type_oid":16},{"array_dimensions":0,"attnum":12,"description":"The function has no side effects. No information about the arguments is conveyed except via the return value. Any function that might throw an error depending on the values of its arguments is not leakproof.","description_zh":"","documented":true,"documented_name":"proleakproof","hidden":false,"name":"proleakproof","not_null":true,"references":"","type":"bool","type_modifier":-1,"type_oid":16},{"array_dimensions":0,"attnum":13,"description":"Function returns null if any call argument is null. In that case the function won't actually be called at all. Functions that are not “strict” must be prepared to handle null inputs.","description_zh":"","documented":true,"documented_name":"proisstrict","hidden":false,"name":"proisstrict","not_null":true,"references":"","type":"bool","type_modifier":-1,"type_oid":16},{"array_dimensions":0,"attnum":14,"description":"Function returns a set (i.e., multiple values of the specified data type)","description_zh":"","documented":true,"documented_name":"proretset","hidden":false,"name":"proretset","not_null":true,"references":"","type":"bool","type_modifier":-1,"type_oid":16},{"array_dimensions":0,"attnum":15,"description":"provolatile tells whether the function's result depends only on its input arguments, or is affected by outside factors. It is i for “immutable” functions, which always deliver the same result for the same inputs. It is s for “stable” functions, whose results (for fixed inputs) do not change within a scan. It is v for “volatile” functions, whose results might change at any time. (Use v also for functions with side-effects, so that calls to them cannot get optimized away.)","description_zh":"","documented":true,"documented_name":"provolatile","hidden":false,"name":"provolatile","not_null":true,"references":"","type":"char","type_modifier":-1,"type_oid":18},{"array_dimensions":0,"attnum":16,"description":"proparallel tells whether the function can be safely run in parallel mode. It is s for functions which are safe to run in parallel mode without restriction. It is r for functions which can be run in parallel mode, but their execution is restricted to the parallel group leader; parallel worker processes cannot invoke these functions. It is u for functions which are unsafe in parallel mode; the presence of such a function forces a serial execution plan.","description_zh":"","documented":true,"documented_name":"proparallel","hidden":false,"name":"proparallel","not_null":true,"references":"","type":"char","type_modifier":-1,"type_oid":18},{"array_dimensions":0,"attnum":17,"description":"Number of input arguments","description_zh":"","documented":true,"documented_name":"pronargs","hidden":false,"name":"pronargs","not_null":true,"references":"","type":"int2","type_modifier":-1,"type_oid":21},{"array_dimensions":0,"attnum":18,"description":"Number of arguments that have defaults","description_zh":"","documented":true,"documented_name":"pronargdefaults","hidden":false,"name":"pronargdefaults","not_null":true,"references":"","type":"int2","type_modifier":-1,"type_oid":21},{"array_dimensions":0,"attnum":19,"description":"Data type of the return value","description_zh":"","documented":true,"documented_name":"prorettype","hidden":false,"name":"prorettype","not_null":true,"references":"pg_type.oid","type":"oid","type_modifier":-1,"type_oid":26},{"array_dimensions":1,"attnum":20,"description":"An array of the data types of the function arguments. This includes only input arguments (including INOUT and VARIADIC arguments), and thus represents the call signature of the function.","description_zh":"","documented":true,"documented_name":"proargtypes","hidden":false,"name":"proargtypes","not_null":true,"references":"pg_type.oid","type":"oidvector","type_modifier":-1,"type_oid":30},{"array_dimensions":1,"attnum":21,"description":"An array of the data types of the function arguments. This includes all arguments (including OUT and INOUT arguments); however, if all the arguments are IN arguments, this field will be null. Note that subscripting is 1-based, whereas for historical reasons proargtypes is subscripted from 0.","description_zh":"","documented":true,"documented_name":"proallargtypes","hidden":false,"name":"proallargtypes","not_null":false,"references":"pg_type.oid","type":"oid[]","type_modifier":-1,"type_oid":1028},{"array_dimensions":1,"attnum":22,"description":"An array of the modes of the function arguments, encoded as i for IN arguments, o for OUT arguments, b for INOUT arguments, v for VARIADIC arguments, t for TABLE arguments. If all the arguments are IN arguments, this field will be null. Note that subscripts correspond to positions of proallargtypes not proargtypes.","description_zh":"","documented":true,"documented_name":"proargmodes","hidden":false,"name":"proargmodes","not_null":false,"references":"","type":"char[]","type_modifier":-1,"type_oid":1002},{"array_dimensions":1,"attnum":23,"description":"An array of the names of the function arguments. Arguments without a name are set to empty strings in the array. If none of the arguments have a name, this field will be null. Note that subscripts correspond to positions of proallargtypes not proargtypes.","description_zh":"","documented":true,"documented_name":"proargnames","hidden":false,"name":"proargnames","not_null":false,"references":"","type":"text[]","type_modifier":-1,"type_oid":1009},{"array_dimensions":0,"attnum":24,"description":"Expression trees (in nodeToString() representation) for default values. This is a list with pronargdefaults elements, corresponding to the last N input arguments (i.e., the last N proargtypes positions). If none of the arguments have defaults, this field will be null.","description_zh":"","documented":true,"documented_name":"proargdefaults","hidden":false,"name":"proargdefaults","not_null":false,"references":"","type":"pg_node_tree","type_modifier":-1,"type_oid":194},{"array_dimensions":1,"attnum":25,"description":"An array of the argument/result data type(s) for which to apply transforms (from the function's TRANSFORM clause). Null if none.","description_zh":"","documented":true,"documented_name":"protrftypes","hidden":false,"name":"protrftypes","not_null":false,"references":"pg_type.oid","type":"oid[]","type_modifier":-1,"type_oid":1028},{"array_dimensions":0,"attnum":26,"description":"This tells the function handler how to invoke the function. It might be the actual source code of the function for interpreted languages, a link symbol, a file name, or just about anything else, depending on the implementation language/call convention.","description_zh":"","documented":true,"documented_name":"prosrc","hidden":false,"name":"prosrc","not_null":true,"references":"","type":"text","type_modifier":-1,"type_oid":25},{"array_dimensions":0,"attnum":27,"description":"Additional information about how to invoke the function. Again, the interpretation is language-specific.","description_zh":"","documented":true,"documented_name":"probin","hidden":false,"name":"probin","not_null":false,"references":"","type":"text","type_modifier":-1,"type_oid":25},{"array_dimensions":0,"attnum":28,"description":"Pre-parsed SQL function body. This is used for SQL-language functions when the body is given in SQL-standard notation rather than as a string literal. It's null in other cases.","description_zh":"","documented":true,"documented_name":"prosqlbody","hidden":false,"name":"prosqlbody","not_null":false,"references":"","type":"pg_node_tree","type_modifier":-1,"type_oid":194},{"array_dimensions":1,"attnum":29,"description":"Function's local settings for run-time configuration variables","description_zh":"","documented":true,"documented_name":"proconfig","hidden":false,"name":"proconfig","not_null":false,"references":"","type":"text[]","type_modifier":-1,"type_oid":1009},{"array_dimensions":1,"attnum":30,"description":"Access privileges; see Section 5.8 for details","description_zh":"","documented":true,"documented_name":"proacl","hidden":false,"name":"proacl","not_null":false,"references":"","type":"aclitem[]","type_modifier":-1,"type_oid":1034}],"description":"The catalog pg_proc stores information about functions, procedures, aggregate functions, and window functions (collectively also known as routines). See CREATE FUNCTION, CREATE PROCEDURE, and Section 36.3 for more information.\n\nIf prokind indicates that the entry is for an aggregate function, there should be a matching row in pg_aggregate.","description_zh":"","doc":{"anchor":"id-1.10.4.41.5","file":"catalog-pg-proc.html","lang":"en","sha256":"79c93a4d63710981af39452e57ccd12dc7994fee432a212cf0de8a9470b9dc9f","slug":"18"},"kind":"catalog","lang":"en","measured_attributes":true,"metadata_release":"18.6","runtime_columns":["oid","proname","pronamespace","proowner","prolang","procost","prorows","provariadic","prosupport","prokind","prosecdef","proleakproof","proisstrict","proretset","provolatile","proparallel","pronargs","pronargdefaults","prorettype","proargtypes","proallargtypes","proargmodes","proargnames","proargdefaults","protrftypes","prosrc","probin","prosqlbody","proconfig","proacl"],"runtime_verified":false,"source":"english-manual"},"ManualEvidence":{"doc":{"anchor":"id-1.10.4.41.5","file":"catalog-pg-proc.html","lang":"en","sha256":"79c93a4d63710981af39452e57ccd12dc7994fee432a212cf0de8a9470b9dc9f","slug":"18"}},"MeasuredEvidence":{"measured_attributes":true,"metadata_release":"18.6","runtime_columns":["oid","proname","pronamespace","proowner","prolang","procost","prorows","provariadic","prosupport","prokind","prosecdef","proleakproof","proisstrict","proretset","provolatile","proparallel","pronargs","pronargdefaults","prorettype","proargtypes","proallargtypes","proargmodes","proargnames","proargdefaults","protrftypes","prosrc","probin","prosqlbody","proconfig","proacl"],"runtime_verified":false}},"Text":{"Collection":"catalog","Key":"pg_proc","SourceDatabase":"pgweb","Version":"18","Locale":"zh-Hans","Title":"pg_proc","Summary":"目录pg_proc存放有关函数、过程、聚合函数以及窗口函数（统称为例程）的信息。更多信息请参考CREATE FUNCTION、CREATE PROCEDURE和第 36.3 节。\n\n如果prokind显示该条目用于一个聚合函数，在pg_aggregate中应该有一个相匹配的行。","BodyHTML":"\u003cp\u003e目录pg_proc存放有关函数、过程、聚合函数以及窗口函数（统称为例程）的信息。更多信息请参考CREATE FUNCTION、CREATE PROCEDURE和第 36.3 节。\n\n如果prokind显示该条目用于一个聚合函数，在pg_aggregate中应该有一个相匹配的行。\u003c/p\u003e","SourceRevision":"2026-09-27@419045e","ContentHash":"49de0c55d6b7ff76c5c999cad6894b1537f4b1bc221bf3b6931dd870afb38ecf","Payload":{"columns":[{"description_zh":"行标识符","name":"oid","type":"oid","zh_from":"doc"},{"description_zh":"函数的名字","name":"proname","type":"name","zh_from":"doc"},{"description_zh":"函数所属的名字空间的OID","name":"pronamespace","type":"oid","zh_from":"doc"},{"description_zh":"函数的拥有者","name":"proowner","type":"oid","zh_from":"doc"},{"description_zh":"此函数的实现语言或调用接口","name":"prolang","type":"oid","zh_from":"doc"},{"description_zh":"估计的执行代价（以cpu_operator_cost为单位），如果proretset为真，这是每行返回的代价","name":"procost","type":"real","zh_from":"doc"},{"description_zh":"估计的结果行数量（如果proretset为假，该值为0）","name":"prorows","type":"real","zh_from":"doc"},{"description_zh":"可变参数数组的元素类型；如果函数没有可变参数，则为零","name":"provariadic","type":"oid","zh_from":"doc"},{"description_zh":"该函数的规划器支持函数（参见第 36.11 节），如果没有则为零","name":"prosupport","type":"regproc","zh_from":"doc"},{"description_zh":"f表示普通函数，p表示过程，a表示聚合函数，w表示窗口函数","name":"prokind","type":"\"char\"","zh_from":"doc"},{"description_zh":"函数是否为安全定义者函数（即“setuid”函数）","name":"prosecdef","type":"boolean","zh_from":"doc"},{"description_zh":"该函数没有副作用。除返回值外，不会泄露任何关于参数的信息。任何可能因参数值而报错的函数都不是 leakproof。","name":"proleakproof","type":"boolean","zh_from":"doc"},{"description_zh":"任一调用实参为 NULL 时，函数返回 NULL。在这种情况下，实际上根本不会调用该函数。非“严格”函数必须能够处理 NULL 输入。","name":"proisstrict","type":"boolean","zh_from":"doc"},{"description_zh":"函数是否返回一个集合（即，指定数据类型的多个值）","name":"proretset","type":"boolean","zh_from":"doc"},{"description_zh":"provolatile 表示函数的结果是否仅依赖输入实参，还是也受外部因素影响。i 表示“不变的”函数，相同输入总是产生相同结果。s 表示“稳定的”函数，对于固定输入，其结果在一次扫描内不变。v 表示“易失的”函数，其结果随时可能变化。（有副作用的函数也应使用 v，以免对它们的调用在优化时被消除。）","name":"provolatile","type":"\"char\"","zh_from":"doc"},{"description_zh":"proparallel 表示函数是否可以在并行模式下安全运行。s 表示可以不受限制地在并行模式下安全运行的函数。r 表示可以在并行模式下运行、但仅限并行组领导者执行的函数；并行工作者进程不能调用这些函数。u 表示在并行模式下不安全的函数；此类函数的存在会强制采用串行执行计划。","name":"proparallel","type":"\"char\"","zh_from":"doc"},{"description_zh":"输入参数的个数","name":"pronargs","type":"smallint","zh_from":"doc"},{"description_zh":"具有默认值的参数个数","name":"pronargdefaults","type":"smallint","zh_from":"doc"},{"description_zh":"返回值的数据类型","name":"prorettype","type":"oid","zh_from":"doc"},{"description_zh":"一个函数参数的数据类型的数组。这只包括输入参数（含INOUT和VARIADIC参数），因此也表现了函数的调用签名。","name":"proargtypes","type":"oidvector","zh_from":"doc"},{"description_zh":"一个函数参数的数据类型的数组。这包括所有参数（含OUT和INOUT参数）。但是，如果所有参数都是IN参数，此字段为 NULL。注意下标是从1开始，然而由于历史原因proargtypes的下标是从0开始。","name":"proallargtypes","type":"oid[]","zh_from":"doc"},{"description_zh":"一个函数参数的模式的数组。这里包括：i表示IN参数，o表示OUT参数，b表示INOUT参数，v表示VARIADIC参数，t表示TABLE参数。如果所有的参数都是IN参数，此字段为 NULL。注意这里的下标对应着proallargtypes而不是proargtypes中的位置。","name":"proargmodes","type":"\"char\"[]","zh_from":"doc"},{"description_zh":"一个函数参数的名字的数组。没有名字的参数在数组中设置为空字符串。如果没有一个参数有名字，此字段为 NULL。注意这里的下标对应着proallargtypes而不是proargtypes中的位置。","name":"proargnames","type":"text[]","zh_from":"doc"},{"description_zh":"默认值的表达式树（以 nodeToString() 表示）。这是一个包含 pronargdefaults 个元素的列表，对应最后 N 个输入参数（即最后 N 个 proargtypes 位置）。如果没有参数具有默认值，则此字段为 NULL。","name":"proargdefaults","type":"pg_node_tree","zh_from":"doc"},{"description_zh":"需要应用转换的参数／结果数据类型数组（来自函数的 TRANSFORM 子句）。如果没有，则为 NULL。","name":"protrftypes","type":"oid[]","zh_from":"doc"},{"description_zh":"此字段告诉函数处理器如何调用该函数。它可以是解释型语言函数的实际源代码、链接符号、文件名或其他内容，具体取决于实现语言和调用约定。","name":"prosrc","type":"text","zh_from":"doc"},{"description_zh":"关于如何调用函数的附加信息。其解释是与语言相关的。","name":"probin","type":"text","zh_from":"doc"},{"description_zh":"预解析的 SQL 函数体。当 SQL 语言函数的函数体采用 SQL 标准表示法给出，而非字符串字面量时，使用此字段。其他情况下为 NULL。","name":"prosqlbody","type":"pg_node_tree","zh_from":"doc"},{"description_zh":"函数对于运行时配置变量的本地设置值","name":"proconfig","type":"text[]","zh_from":"doc"},{"description_zh":"访问权限，详见第 5.8 节","name":"proacl","type":"aclitem[]","zh_from":"doc"}],"description_zh":"目录pg_proc存放有关函数、过程、聚合函数以及窗口函数（统称为例程）的信息。更多信息请参考CREATE FUNCTION、CREATE PROCEDURE和第 36.3 节。\n\n如果prokind显示该条目用于一个聚合函数，在pg_aggregate中应该有一个相匹配的行。","zh_from":"doc"}},"RequestedLocale":"zh-Hans","Fallback":false,"Versions":["10","11","12","13","14","15","16","17","18","19","20","7.4","8.0","8.1","8.2","8.3","8.4","9.0","9.1","9.2","9.3","9.4","9.5","9.6"],"Locales":["en","zh-Hans"],"Signatures":null,"Spellings":null,"SQLState":null,"Evidence":null}
