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.