मैं एक एप्लिकेशन के लिए एक सेटअप स्क्रिप्ट लिख रहा हूं जो किसी अन्य एप्लिकेशन के लिए एक ऐडऑन है, इसलिए मैं यह जांचना चाहता हूं कि क्या अन्य एप्लिकेशन के लिए टेबल मौजूद हैं। यदि नहीं, तो मैं उपयोगकर्ता को एक उपयोगी त्रुटि देना चाहता हूं। हालाँकि, मुझे नहीं पता कि स्कीमा क्या तालिकाओं को धारण करेगा।
DO LANGUAGE plpgsql $$
BEGIN
PERFORM 1
FROM
pg_catalog.pg_class c
JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE
n.nspname = current_setting('search_path')
AND c.relname = 'foo'
AND c.relkind = 'r'; -- not sure if I actually need this or not...
IF NOT FOUND THEN
RAISE 'This application depends on tables created by another application';
END IF;
END;
$$;
हालाँकि, डिफ़ॉल्ट रूप से current_setting('search_path')
एक TEXT देता है "$user",public
, जो बहुत उपयोगी नहीं है।
केवल एक चीज जो मैं सोच सकता हूं, वह है टेबल से चयन करने की कोशिश करना और अपवाद को पकड़ना। यह काम करेगा, लेकिन मुझे नहीं लगता कि यह बहुत ही सुरुचिपूर्ण है और मैंने पढ़ा है कि इसका उपयोग करना महंगा है (हालांकि शायद इस परिदृश्य में यह ठीक होगा क्योंकि मैं केवल इसे एक बार चला रहा हूं?)।