sql >> Databáze >  >> RDS >> PostgreSQL

Jak zjistit, kde se funkce používá

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.



  1. Vytvořte tabulku dvou typů v PostgreSQL

  2. Jak získat název změněné tabulky ve spouštěči události Postgres?

  3. jak implementovat Northwind v Django

  4. Vložte 0 nebo 1 do MySQL na základě hodnoty zaškrtávacího políčka