PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie überprüfe ich, welche Funktion einen Typ verwendet?

Alle Abhängigkeiten finden Sie im Systemkatalog pg_depend .

Dies gibt alle Funktionen je nach Typ zurück . Dh nicht nur die mit dem Typ im RETURNS -Klausel, sondern auch solche mit dem Typ als Funktionsparameter:

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

Dies funktioniert auch für Tabellenfunktionen:

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

Verwenden von Systemkatalog-Informationsfunktionen .

Es kann andere Abhängigkeiten geben (nicht zu Funktionen). Entfernen Sie das letzte WHERE Bedingung aus meiner zu testenden Abfrage (und passen Sie die SELECT Liste, natürlich).

Und es besteht immer noch die Möglichkeit, dass der Typ explizit (zB in einem Cast) in Abfragen im Funktionsrumpf oder in dynamischem SQL verwendet wird. Sie können solche Anwendungsfälle nur identifizieren, indem Sie den Text des Funktionskörpers analysieren. Es sind keine expliziten Abhängigkeiten im System registriert.

Verwandte: