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$ ]
