Jag har diskuterat detta på PostgreSQL-sändlistan (http://archives.postgresql.org/pgsql-bugs/2011-03/msg00041.php) och blev informerad om orsaken till beteendet.
Deras svar är att "..du måste dubbelcitera relnames (lyssna "Test"). om du vill att servern inte ska skifta dem. pg_notify tar en sträng, inte arelname, som använder olika regler." (Tack Merlin och Tom)
Det betyder att följande fungerar eftersom kanalen alltid tvingas till små bokstäver
LISTEN ERRORCHANNEL;
NOTIFY ERRORCHANNEL, 'something!';
NOTIFY eRrorChanNel, 'something!';
Om du skulle lägga till dubbla citattecken runt kanalnamnet, kommer fallet att behållas.
Så med följande får du det första meddelandet men inte det andra:
LISTEN "ERRORCHANNEL";
NOTIFY "ERRORCHANNEL", 'something!';
NOTIFY "eRrorChanNel", 'something!';
På samma sätt kommer följande att fungera eftersom de dubbla citattecken tvingar fallet med ERRORCHANNEL att bibehållas:
LISTEN "ERRORCHANNEL";
SELECT pg_notify('ERRORCHANNEL', 'something!');
Även om detta inte kommer att fungera:
LISTEN ERRORCHANNEL;
SELECT pg_notify('ERRORCHANNEL', 'something!');
I den här situationen står ERRORCHANNEL inte inom citattecken i kommandot LISTEN så PostgreSQL tvingar det till gemener. Kanalparametern är av typen text istället för relname så fallet lämnas orörd i funktionen pg_notify(). Tillsammans stämmer inte kanalerna överens (ERRORCHANNE !=errorchannel) så meddelandet tas aldrig emot.