sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Cómo verificar qué función usa un tipo?

Puede encontrar todas las dependencias en el catálogo del sistema pg_depend .

Esto devuelve todas las funciones dependiendo del tipo . Es decir. no solo aquellos con el tipo en RETURNS cláusula, pero también aquellos con el tipo como parámetro de función:

SELECT objid::regproc                            AS function_name
     , pg_get_functiondef(objid)                 AS function_definition
     , pg_get_function_identity_arguments(objid) AS function_args
     , pg_get_function_result(objid)             AS function_returns
FROM   pg_depend
WHERE  refclassid = 'pg_type'::regclass
AND    refobjid   = 'my_type'::regtype    -- insert your type name here
AND    classid    = 'pg_proc'::regclass;  -- only find functions

Esto también funciona para funciones de tabla:

...
RETURNS TABLE (foo my_type, bar int)

Uso de funciones de información del catálogo del sistema .

Puede haber otras dependencias (no a funciones). Eliminar el último WHERE condición de mi consulta para probar (y adaptar el SELECT lista, obviamente).

Y todavía existe la posibilidad de que el tipo se use explícitamente (en una conversión, por ejemplo) en consultas en el cuerpo de la función o en SQL dinámico. Solo puede identificar dichos casos de uso analizando el texto del cuerpo de la función. No hay dependencias explícitas registradas en el sistema.

Relacionado: