PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как да намерите къде се използва функцията

Ако приемем, че знаете, че това е задействаща функция (т.е. RETURNS TRIGGER ), това трябва да го направи:

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

Ако func1 е претоварен, ще трябва да използвате напр. tgfoid = 'func1(text,text)'::regprocedure .

Но като цяло може да се появи и в pg_aggregate , или pg_cast , или в дефиниция на изглед, или ограничение за проверка, или дузина други места и не искате да трябва да ги проверявате всички.

Можете да стигнете до дъното на това чрез pg_depend , който проследява всички зависимости на обекти в базата данни. Например:

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

Ако това се върне напр. pg_attrdef , тогава знаете, че се използва в колона по подразбиране. Другите полета в pg_depend ще ви каже точно коя таблица/колона е. Обърнете внимание, че извикването от друга функция не се счита за зависимост, така че все пак трябва да проверите pg_proc.prosrc .

Но има по-лесен начин за проследяване на повечето зависимости:

BEGIN;
DROP FUNCTION func1();
ROLLBACK;

Ако func1 се използва, DROP (вероятно) ще се провали и грешката ще ви каже точно къде.

Дори по-лесно, ако имате подръка обвивка:Само за да стартирате pg_dump --schema-only и вижте къде func1 се появява.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. sudo gem install pg няма да работи

  2. Ruby on Rails:Има ли начин да се изтеглят елементи от базата данни и да се върнат в определен ред?

  3. персонализирайте пейджър в psql

  4. Курсори с postgres, къде се съхраняват данните и колко извиквания към БД

  5. Извличане на редове от множество таблици с UNION ALL или използване на една таблица в производството?