Za předpokladu, že víte, že se jedná o spouštěcí funkci (tj. RETURNS TRIGGER ), mělo by to stačit:
SELECT tgname, tgrelid::regclass
FROM pg_trigger
WHERE tgfoid = 'func1'::regproc
Pokud func1 je přetížený, museli byste použít např. tgfoid = 'func1(text,text)'::regprocedure .
Obecně se však může objevit také v pg_aggregate nebo pg_cast , nebo v definici pohledu, kontrolním omezení nebo tuctu dalších míst a nechcete je všechny kontrolovat.
Na konec se můžete dostat přes pg_depend
, který sleduje všechny závislosti objektů v databázi. Například:
SELECT classid::regclass
FROM pg_depend
WHERE refobjid = 'func1'::regproc
Pokud se toto vrátí např. pg_attrdef
, pak víte, že se používá ve výchozím nastavení sloupce. Ostatní pole v pg_depend vám přesně řekne, o jakou tabulku/sloupec se jedná. Všimněte si, že volání z jiné funkce není považováno za závislost, takže stále musíte zkontrolovat pg_proc.prosrc .
Existuje však jednodušší způsob, jak vystopovat většinu závislostí:
BEGIN;
DROP FUNCTION func1();
ROLLBACK;
Pokud func1 DROP (pravděpodobně) selže a chyba vám řekne přesně kde.
Ještě jednodušší, pokud máte po ruce shell:Stačí spustit pg_dump --schema-only a podívejte se, kde func1 objeví se.