The list of all the queries

The name of the routine does not match with the action of the routine

Query goal: Find user-defined non-trigger SQL and PL/pgSQL routines where the beginning of the name of the routine indicates a certain action inside the routine (INSERT, UPDATE, or DELETE) but there is no such statement in the routine body.
Query type: Problem detection (Each row in the result could represent a flaw in the design)
Query reliability: Low (Many false-positive results)
Query license: MIT License
Data source: INFORMATION_SCHEMA+system catalog
SQL query: Click on query to copy it

SELECT 
routine_schema, 
routine_name, 
pg_get_function_identity_arguments(translate(substring(routines.specific_name,'_[0-9]+$'),'_','')::int::oid) AS parameters,
data_type AS return_type, 
is_deterministic, 
routine_type,
security_type,
external_language,
regexp_replace(pg_get_functiondef(translate(substring(routines.specific_name,'_[0-9]+$'),'_','')::int::oid),'[\r\n]','<br>','g')  AS routine_src
FROM 
information_schema.routines
WHERE routine_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 external_language IN ('PLPGSQL','SQL') 
AND routine_name NOT IN ('f_assume_you_must_use_files', 'f_check_format_comma_separated_list', 'f_check_password', 'f_default_value_with_no_match')
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 = routines.specific_name)
AND (data_type<>'trigger' OR data_type IS NULL)
AND 
(
(routine_name~*'^(registreeri|lisa|logi|register|add|log)' 
AND pg_get_functiondef(translate(substring(routines.specific_name,'_[0-9]+$'),'_','')::int::oid)!~*'[[:space:]]*(INSERT|UPDATE)[[:space:]]')
OR
(routine_name~*'^(uuenda|muuda|update|change)' 
AND pg_get_functiondef(translate(substring(routines.specific_name,'_[0-9]+$'),'_','')::int::oid)!~*'[[:space:]]*UPDATE[[:space:]]')
OR
(routine_name~*'^(kustuta|eemalda|tyhista|delete|remove|cancel)' 
AND pg_get_functiondef(translate(substring(routines.specific_name,'_[0-9]+$'),'_','')::int::oid)!~*'[[:space:]]*(DELETE|UPDATE)[[:space:]]')
)
ORDER BY routine_schema, routine_name, parameters;

Collections where the query belongs to

Collection nameCollection description
Find problems automaticallyQueries, that results point to problems in the database. Each query in the collection produces an initial assessment. However, a human reviewer has the final say as to whether there is a problem or not .

Categories where the query belongs to

Category nameCategory description
NamingQueries of this category provide information about the style of naming.
User-defined routinesQueries of this category provide information about the user-defined routines

The list of all the queries