PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

LISTEN/NOTIFY с помощта на pg_notify(текст, текст) в PostgreSQL

Обсъдих това в пощенския списък на 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), така че известието никога не се получава.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgresql -- почистване на HTML тагове в средата на низа

  2. Как се среща с математика, която игнорира годината?

  3. Функции с променлив брой входни параметри

  4. ifelse &grepl команди при използване на dplyr за SQL in-db операции

  5. Как мога да преместя данни от една таблица в друга при миграция на релси?