Обсъдих това в пощенския списък на 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 го принуждава да бъде с малки букви. Параметърът на канала е от тип text, а не от relname, така че регистърът остава недокоснат във функцията pg_notify(). Заедно каналите не съвпадат (ERRORCHANNE !=errorchannel), така че известието никога не се получава.