CREATE [ OR REPLACE ] FUNCTION $name$ ( [ { [ $routine_argmode$ ] [ $argname$ ] $argtype$ [ { DEFAULT | = } $default_expr$ ] } [ , ... ] ] ) [ RETURNS [SETOF] $rettype$ | RETURNS TABLE ( { $column_name$ $column_type$ } [ , ... ] ) ] { LANGUAGE $lang_name$ | TRANSFORM { FOR TYPE $type_name$ } [ , ... ] | WINDOW | { IMMUTABLE | STABLE | VOLATILE } | [ NOT ] LEAKPROOF | { CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT } | { [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER } | PARALLEL { UNSAFE | RESTRICTED | SAFE } | COST $execution_cost$ | ROWS $result_rows$ | SUPPORT $support_function$ | SET $configuration_parameter$ { TO $value$ | = $value$ | FROM CURRENT } | AS '$definition$' | AS '$obj_file$', '$link_symbol$' } ... [ $sql_body$ ]