पहले , फ़ंक्शन के लिए दो . की आवश्यकता होती है परिभाषा में पैरामीटर, जैसे रिचर्ड ने पहले ही सुझाव दिया है, और आपने तदनुसार अपना प्रश्न अपडेट किया है।
दूसरा , आप उस फ़ंक्शन को "any" . के साथ बना सकते हैं LANGUAGE internal . का उपयोग करके इनपुट करें . हालांकि, इसका मतलब यह नहीं है कि आपको ऐसा करना चाहिए।
concat_ws() केवल STABLE है किसी कारण से। दूसरों के बीच, date . का टेक्स्ट प्रतिनिधित्व या timestamp लोकेल / डेटस्टाइल सेटिंग्स पर निर्भर करता है, इसलिए परिणाम अपरिवर्तनीय नहीं है . इस पर बनने वाले इंडेक्स चुपचाप टूट सकते हैं। text . तक सीमित इनपुट, इसे घोषित करना सुरक्षित है IMMUTABLE .चूंकि आपको केवल text . की आवश्यकता है इनपुट (या varchar , जिसमें text . के लिए एक अंतर्निहित कास्ट है ), इसे अपने उपयोग के मामले तक सीमित रखें और सुरक्षित रहें:
CREATE OR REPLACE FUNCTION immutable_concat_ws(text, VARIADIC text[])
RETURNS text AS 'text_concat_ws' LANGUAGE internal IMMUTABLE PARALLEL SAFE;
इसे PARALLEL SAFE as के रूप में चिह्नित करें इस फ़ंक्शन को शामिल करते समय समानता को खराब नहीं करने के लिए। मैनुअल:
इस तरह के काम करने के प्रलोभन का विरोध करें immutable_concat_ws('|', now()::text, 'foo') . यह कॉल में उक्त निर्भरता को फिर से प्रस्तुत करेगा।
संबंधित: