PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

concat_ws . का अपरिवर्तनीय क्लोन बनाएं

पहले , फ़ंक्शन के लिए दो . की आवश्यकता होती है परिभाषा में पैरामीटर, जैसे रिचर्ड ने पहले ही सुझाव दिया है, और आपने तदनुसार अपना प्रश्न अपडेट किया है।

दूसरा , आप उस फ़ंक्शन को "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') . यह कॉल में उक्त निर्भरता को फिर से प्रस्तुत करेगा।

संबंधित:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL:एक बहुत बड़ी संख्या के हेक्स स्ट्रिंग को एक NUMERIC . में बदलें

  2. कैसे जांचें कि कोई पोस्टग्रेज उपयोगकर्ता मौजूद है या नहीं?

  3. PostgreSQL array_agg(INTEGER[])

  4. मुझे CSV आयात करते समय postgresql में टाइप पूर्णांक के लिए अमान्य इनपुट सिंटैक्स क्यों मिल रहा है?

  5. psycopg2 mysqldb.escape_string के बराबर है?