sql >> Database >  >> RDS >> PostgreSQL

Hoe controleer je welke functie een type gebruikt?

U kunt alle afhankelijkheden vinden in de systeemcatalogus pg_depend .

Dit retourneert alle functies afhankelijk van het type . D.w.z. niet alleen degenen met het type in de RETURNS clausule, maar ook die met het type als functieparameter:

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

Dit werkt ook voor tabelfuncties:

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

Met behulp van functies voor systeemcatalogusinformatie .

Er kunnen andere afhankelijkheden zijn (niet aan functies). Verwijder de laatste WHERE voorwaarde van mijn vraag om te testen (en pas de SELECT lijst natuurlijk).

En er is nog steeds de mogelijkheid dat het type expliciet wordt gebruikt (in een cast bijvoorbeeld) in query's in de functie-body of in dynamische SQL. U kunt dergelijke use-cases alleen identificeren door de tekst van de functie-body te ontleden. Er zijn geen expliciete afhankelijkheden geregistreerd in het systeem.

Gerelateerd:



  1. PDO doorlussen en fetchAll afdrukken

  2. datum/tijd Conversie tussen verschillende tijdzones

  3. MySQL Twee velden uit twee tabellen samenvoegen tot één veld in resultatenset

  4. php MySql-verbindingsfout