पहले , फ़ंक्शन के लिए दो . की आवश्यकता होती है परिभाषा में पैरामीटर, जैसे रिचर्ड ने पहले ही सुझाव दिया है, और आपने तदनुसार अपना प्रश्न अपडेट किया है।
दूसरा , आप उस फ़ंक्शन को "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')
. यह कॉल में उक्त निर्भरता को फिर से प्रस्तुत करेगा।
संबंधित: