Saya telah membahas ini di milis PostgreSQL ( http://archives.postgresql.org/pgsql-bugs/2011-03/msg00041.php ) dan diberitahu tentang alasan perilaku tersebut.
Jawaban mereka adalah bahwa "..Anda harus menggandakan kutipan relnames (dengarkan "Test"). jika Anda ingin server tidak melipatnya. pg_notify mengambil string, bukan arelname, yang menggunakan aturan yang berbeda." (Terima kasih Merlin dan Tom)
Ini berarti bahwa yang berikut ini berfungsi karena saluran selalu dipaksa menjadi huruf kecil
LISTEN ERRORCHANNEL;
NOTIFY ERRORCHANNEL, 'something!';
NOTIFY eRrorChanNel, 'something!';
Jika Anda menambahkan tanda kutip ganda di sekitar nama saluran, kasusnya akan dipertahankan.
Jadi, dengan yang berikut ini, Anda akan menerima pemberitahuan pertama tetapi tidak yang kedua:
LISTEN "ERRORCHANNEL";
NOTIFY "ERRORCHANNEL", 'something!';
NOTIFY "eRrorChanNel", 'something!';
Demikian pula, berikut ini akan berfungsi karena tanda kutip ganda memaksa kasus ERRORCHANNEL dipertahankan:
LISTEN "ERRORCHANNEL";
SELECT pg_notify('ERRORCHANNEL', 'something!');
Meskipun ini tidak akan berhasil:
LISTEN ERRORCHANNEL;
SELECT pg_notify('ERRORCHANNEL', 'something!');
Dalam situasi ini ERRORCHANNEL tidak dalam tanda kutip ganda dalam perintah LISTEN sehingga PostgreSQL memaksanya menjadi huruf kecil. Parameter saluran bertipe teks, bukan relname, sehingga case tidak tersentuh dalam fungsi pg_notify(). Bersama-sama saluran tidak cocok (ERRORCHANNE !=errorchannel) sehingga pemberitahuan tidak pernah diterima.