Dengan asumsi Anda tahu itu adalah fungsi pemicu (yaitu RETURNS TRIGGER ), ini harus dilakukan:
SELECT tgname, tgrelid::regclass
FROM pg_trigger
WHERE tgfoid = 'func1'::regproc
Jika func1 kelebihan beban, Anda perlu menggunakan mis. tgfoid = 'func1(text,text)'::regprocedure .
Namun secara umum, mungkin juga muncul di pg_aggregate , atau pg_cast , atau dalam definisi tampilan, atau batasan centang, atau selusin tempat lainnya, dan Anda tidak ingin harus memeriksa semuanya.
Anda dapat mengetahuinya melalui pg_depend
, yang melacak semua dependensi objek dalam database. Misalnya:
SELECT classid::regclass
FROM pg_depend
WHERE refobjid = 'func1'::regproc
Jika ini kembali mis. pg_attrdef
, maka Anda tahu itu digunakan dalam kolom default. Bidang lain di pg_depend akan memberi tahu Anda tabel/kolom mana itu. Perhatikan bahwa panggilan dari fungsi lain tidak dianggap sebagai ketergantungan, jadi Anda masih perlu memeriksa pg_proc.prosrc .
Namun ada cara yang lebih sederhana untuk melacak sebagian besar dependensi:
BEGIN;
DROP FUNCTION func1();
ROLLBACK;
Jika func1 sedang digunakan, DROP akan (mungkin) gagal, dan kesalahan akan memberi tahu Anda di mana tepatnya.
Lebih mudah lagi, jika Anda memiliki shell yang berguna:Hanya dengan menjalankan pg_dump --schema-only dan lihat di mana func1 muncul.