create_function ::= CREATE [ OR REPLACE ] FUNCTION function_name ( [ parameter_list ] ) RETURNS return_type LANGUAGE language_name [ SECURITY { DEFINER | INVOKER } ] [ volatility ] [ STRICT ] AS function_body function_name ::= [schema.]name parameter_list ::= parameter [, ...] parameter ::= [ parameter_mode ] [ parameter_name ] parameter_type [ DEFAULT default_value ] parameter_mode ::= IN | OUT | INOUT argument_list ::= data_type [, ...] return_type ::= data_type | SETOF data_type | TABLE ( column_name data_type [, ...] ) | trigger language_name ::= plpgsql | sql | c | internal volatility ::= IMMUTABLE | STABLE | VOLATILE function_body ::= 'definition' | $$definition$$ | $tag$definition$tag$
CREATE FUNCTION
CREATE OR REPLACE FUNCTION [schema.]function_name( parameter_name parameter_type[ DEFAULT default_value][, ...] ) RETURNS return_type LANGUAGE language_name SECURITY { DEFINER | INVOKER } [ IMMUTABLE | STABLE | VOLATILE ] [ STRICT ] AS $tag$function_body$tag$;
CREATE OR REPLACE FUNCTION
INVOKER
DROP FUNCTION IF EXISTS function_name(argument_types);