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.