WITH params AS (SELECT
specific_schema AS routine_schema,
regexp_replace(specific_name,'_[0-9]*$','') AS routine_name,
pg_get_function_identity_arguments(translate(substring(specific_name,'_[0-9]+$'),'_','')::int::oid) AS parameters,
parameter_name,
ordinal_position,
data_type
FROM
information_schema.parameters
WHERE specific_schema NOT IN (SELECT schema_name
FROM INFORMATION_SCHEMA.schemata
WHERE schema_name<>'public' AND
schema_owner='postgres' AND schema_name IS NOT NULL)
AND NOT EXISTS (SELECT 1
FROM pg_catalog.pg_depend d inner join pg_catalog.pg_proc pc ON d.objid=pc.oid
WHERE EXISTS (SELECT 1 FROM pg_catalog.pg_extension e WHERE d.refobjid=e.oid) AND
pc.proname || '_' || pc.oid = parameters.specific_name))
SELECT routine_schema, routine_name, parameters, parameter_name AS suspected_name, ordinal_position, data_type
FROM params
WHERE (parameter_name~*'(andme(?!baas)|(?<!eel)data(?!base)|info|parameter|parameeter)'
OR parameter_name~*'^([^[:alpha:]]*|(in|out)[_]*)(id|tyyp|tuup|kood|aeg|kp|type|code|time|date|fk|pk|value|info|data|number|param)([^[:alpha:]]*|[_]*(in|out))$'
OR parameter_name~*'^([^[:alpha:]]*|(in|out)[_]*)(nimi|nimetus|kommentaar(id){0,1}|kirjeldus(ed){0,1}|staatus|seisund|olek|tyyp|tüüp|name(s){0,1}|comment(s){0,1}|description(s){0,1}|explanation(s){0,1}|state|status|type)([^[:alpha:]]*|[_]*(in|out))$'
)
ORDER BY routine_schema, routine_name, parameters, ordinal_position;