मैंने PostgreSQL मेलिंग सूची (http://archives.postgresql.org/pgsql-bugs/2011-03/msg00041.php) पर इस पर चर्चा की है और व्यवहार के तर्क पर सूचित किया गया था।
उनका उत्तर यह है कि "..आपको डबल कोट रिलेनाम ("टेस्ट" सुनें) करना होगा। यदि आप चाहते हैं कि सर्वर केस को फोल्ड न करे। pg_notify एक स्ट्रिंग लेता है, न कि arelname, जो विभिन्न नियमों का उपयोग करता है।" (धन्यवाद मर्लिन और टॉम)
इसका मतलब है कि निम्नलिखित काम करता है क्योंकि चैनल को हमेशा केस कम करने के लिए मजबूर किया जाता है
LISTEN ERRORCHANNEL;
NOTIFY ERRORCHANNEL, 'something!';
NOTIFY eRrorChanNel, 'something!';
यदि आप चैनल के नाम के चारों ओर दोहरे उद्धरण जोड़ते हैं, तो मामला कायम रहेगा।
तो, निम्नलिखित के साथ, आपको पहली सूचना प्राप्त होगी लेकिन दूसरी नहीं:
LISTEN "ERRORCHANNEL";
NOTIFY "ERRORCHANNEL", 'something!';
NOTIFY "eRrorChanNel", 'something!';
इसी तरह, निम्नलिखित काम करेंगे क्योंकि दोहरे उद्धरण ERRORCHANNEL के मामले को बनाए रखने के लिए मजबूर करते हैं:
LISTEN "ERRORCHANNEL";
SELECT pg_notify('ERRORCHANNEL', 'something!');
हालांकि यह काम नहीं करेगा:
LISTEN ERRORCHANNEL;
SELECT pg_notify('ERRORCHANNEL', 'something!');
इस स्थिति में ERRORCHANNEL LISTEN कमांड में दोहरे उद्धरण चिह्नों में नहीं है, इसलिए PostgreSQL इसे लोअर केस के लिए बाध्य करता है। चैनल पैरामीटर टाइप टेक्स्ट का होता है बल्कि फिर relname इसलिए केस को pg_notify() फंक्शन में अछूता छोड़ दिया जाता है। साथ में चैनल मेल नहीं खाते (ERRORCHANNE !=errorchannel) इसलिए सूचना कभी प्राप्त नहीं होती है।