मान लें कि आप जानते हैं कि यह एक ट्रिगर फ़ंक्शन है (यानी 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
. कहां है बदल जाता है।