Ik heb dit besproken op de PostgreSQL-mailinglijst (http://archives.postgresql.org/pgsql-bugs/2011-03/msg00041.php) en werd geïnformeerd over de redenering voor het gedrag.
Hun antwoord is dat "..je relnames moet dubbel citeren (luister "Test"). als je wilt dat de server ze niet vouwt. pg_notify neemt een string, geen arelname, die andere regels gebruikt." (Bedankt Merlijn en Tom)
Dit betekent dat het volgende werkt omdat het kanaal altijd kleine letters moet gebruiken
LISTEN ERRORCHANNEL;
NOTIFY ERRORCHANNEL, 'something!';
NOTIFY eRrorChanNel, 'something!';
Als je dubbele aanhalingstekens zou toevoegen rond de kanaalnaam, zou de case behouden blijven.
Dus met het volgende zou u de eerste melding ontvangen, maar niet de tweede:
LISTEN "ERRORCHANNEL";
NOTIFY "ERRORCHANNEL", 'something!';
NOTIFY "eRrorChanNel", 'something!';
Op dezelfde manier zal het volgende werken omdat de dubbele aanhalingstekens dwingen het geval van ERRORCHANNEL te handhaven:
LISTEN "ERRORCHANNEL";
SELECT pg_notify('ERRORCHANNEL', 'something!');
Hoewel dit niet werkt:
LISTEN ERRORCHANNEL;
SELECT pg_notify('ERRORCHANNEL', 'something!');
In deze situatie staat ERRORCHANNEL niet tussen dubbele aanhalingstekens in het LISTEN-commando, dus PostgreSQL dwingt het naar kleine letters. De kanaalparameter is van het type tekst in plaats van relname, dus het geval blijft onaangeroerd in de functie pg_notify(). Samen komen de kanalen niet overeen (ERRORCHANNE !=errorchannel) dus de melding wordt nooit ontvangen.