PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak sprawdzić, gdzie używana jest funkcja?

Zakładając, że wiesz, że jest to funkcja wyzwalacza (np. RETURNS TRIGGER ), to powinno wystarczyć:

SELECT tgname, tgrelid::regclass
FROM pg_trigger
WHERE tgfoid = 'func1'::regproc

Jeśli func1 jest przeciążony, trzeba by użyć m.in. tgfoid = 'func1(text,text)'::regprocedure .

Ale ogólnie może również pojawić się w pg_aggregate lub pg_cast , lub w definicji widoku, lub w ograniczeniu sprawdzającym, lub w kilkunastu innych miejscach, a nie chcesz sprawdzać ich wszystkich.

Możesz przejść do sedna tego poprzez pg_depend , który śledzi wszystkie zależności obiektów w bazie danych. Na przykład:

SELECT classid::regclass
FROM pg_depend
WHERE refobjid = 'func1'::regproc

Jeśli to zwróci np. pg_attrdef , wiesz, że jest używany w domyślnej kolumnie. Pozostałe pola w pg_depend powie dokładnie, która to tabela/kolumna. Zauważ, że wywołanie z innej funkcji nie jest uważane za zależność, więc nadal musisz sprawdzić pg_proc.prosrc .

Istnieje jednak prostszy sposób na wyśledzenie większości zależności:

BEGIN;
DROP FUNCTION func1();
ROLLBACK;

Jeśli func1 jest używany, DROP (prawdopodobnie) się nie powiedzie, a błąd powie dokładnie, gdzie.

Jeszcze łatwiej, jeśli masz pod ręką powłokę:wystarczy uruchomić pg_dump --schema-only i zobacz gdzie func1 pojawia się.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. JPA generowanie duplikatów kluczy

  2. Synchronizuj dane postgreSql z ElasticSearch

  3. Jak mogę zweryfikować w Postgresql, czy JSON jest prawidłowy?

  4. Upuszczenie roli PostgreSQL nie powiodło się z powodu domyślnych uprawnień

  5. Refaktoryzuj klucz obcy do pól