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. psql:FATAL:उपयोगकर्ता विंडोज़ 8 के लिए पासवर्ड प्रमाणीकरण विफल रहा

  2. गोलंग कंटेनर से पोस्टग्रेज डॉकटर कंटेनर से कनेक्ट नहीं हो सकता

  3. एक बड़े Django QuerySet के माध्यम से बड़ी मात्रा में स्मृति का उपभोग क्यों कर रहा है?

  4. क्या आप CREATE TABLE परिभाषा में एक इंडेक्स बना सकते हैं?

  5. PostgreSQL 13 का अवलोकन libpq sslpassword कनेक्शन पैरामीटर