2017-05-29 6 views
1

Ich habe einen Typen in meinem Server definiert:PostgreSQL - woher weiß ich, welche Funktion einen Typ verwendet?

CREATE TYPE typ_gbom AS 
(
    ab citext, 
    id integer, 
    name citext, 
    user citext, 
    comment citext 
); 
ALTER TYPE typ_gbom 
    OWNER TO postgres; 

Ich möchte alle Funktionen finden, die diese Art zurück.

alle Funktion Bedeutung, die hat:

CREATE OR REPLACE FUNCTION a() 
    RETURNS setof typ_gbom AS 

oder

CREATE OR REPLACE FUNCTION a() 
    RETURNS typ_gbom AS 

Ich habe versucht:

select * from pg_proc where prosrc ilike '%typ_gbom%' 

Aber das funktioniert nicht, ist dies nur auf der Suche in dem Funktionscode selbst und nicht in seiner Struktur.

Wie kann ich herausfinden, ob dieser Typ verwendet wird?

Antwort

3

Sie können pg_depend für diesen Einsatz:

select n.nspname as function_schema, p.proname as function_name 
from pg_proc p 
    join pg_namespace n on n.oid = p.pronamespace 
    join pg_depend d on d.objid = p.oid and d.classid = 'pg_proc'::regclass 
    join pg_type typ on typ.oid = d.refobjid 
    join pg_namespace ts on ts.oid = typ.typnamespace 
where ts.nspname = 'public' --<< change to your schema name 
    and typ.typname = 'typ_gbom' 
0

gibt es einige Funktionen, die Funktion Metadaten zurück. wir können sie verwenden, um die gewünschten Informationen zu extrahieren

SELECT 
    p.proname as func_name, 
    pg_catalog.pg_get_function_result(p.oid) as result_type, 
    pg_catalog.pg_get_function_arguments(p.oid) as argument_types, 
CASE 
    WHEN p.proisagg THEN 'agg' 
    WHEN p.proiswindow THEN 'window' 
    WHEN p.prorettype = 'pg_catalog.trigger'::pg_catalog.regtype THEN 'trigger' 
    ELSE 'normal' 
END as func_type 
FROM pg_catalog.pg_proc p 
WHERE pg_catalog.pg_function_is_visible(p.oid) 
    AND pg_catalog.pg_get_function_result(p.oid) IN ('typ_gbom', 'SETOF typ_gbom') 
+0

Das würde nur die Funktionen _return_ diesen Typ zurückgeben. Aber würde keine Funktionen enthalten, die diesen Typ als Argument haben. –

+0

aber das ist, was der Op sagte er will: 'Ich möchte alle Funktionen finden, die diesen Typ zurückgeben –

Verwandte Themen