PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

LISTEN / NOTIFY bằng cách sử dụng pg_notify (text, text) trong PostgreSQL

Tôi đã thảo luận điều này trên danh sách gửi thư PostgreSQL (http://archives.postgresql.org/pgsql-bugs/2011-03/msg00041.php) và đã được thông báo về lý do cho hành vi.

Câu trả lời của họ là "..bạn phải trích dẫn kép các tên truy cập (nghe" Kiểm tra "). Nếu bạn muốn máy chủ không gấp chúng lại. Pg_notify lấy một chuỗi, không phải islname, sử dụng các quy tắc khác nhau." (Cảm ơn Merlin và Tom)

Điều này có nghĩa là những điều sau đây hoạt động vì kênh luôn buộc phải viết thường

LISTEN ERRORCHANNEL;

NOTIFY ERRORCHANNEL, 'something!';
NOTIFY eRrorChanNel, 'something!';

Nếu bạn thêm dấu ngoặc kép xung quanh tên kênh, trường hợp này sẽ được duy trì.

Vì vậy, với những điều sau đây, bạn sẽ nhận được thông báo đầu tiên nhưng không phải thông báo thứ hai:

LISTEN "ERRORCHANNEL";

NOTIFY "ERRORCHANNEL", 'something!'; 
NOTIFY "eRrorChanNel", 'something!';

Tương tự, cách sau sẽ hoạt động vì dấu ngoặc kép buộc phải duy trì trường hợp ERRORCHANNEL:

LISTEN "ERRORCHANNEL";

SELECT pg_notify('ERRORCHANNEL', 'something!');

Mặc dù điều này sẽ không hoạt động:

LISTEN ERRORCHANNEL;

SELECT pg_notify('ERRORCHANNEL', 'something!');

Trong trường hợp này, ERRORCHANNEL không có trong dấu ngoặc kép trong lệnh LISTEN nên PostgreSQL buộc nó phải viết thường. Tham số kênh thuộc loại văn bản chứ không phải là tên gọi lại, vì vậy trường hợp này được giữ nguyên trong hàm pg_notify (). Các kênh cùng nhau không khớp (ERRORCHANNE! =Errorchannel) nên không bao giờ nhận được thông báo.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. psql:FATAL:xác thực mật khẩu không thành công cho người dùng windows 8

  2. Truy vấn 'chạy' các cột liên tiếp trong Postgres

  3. Sự phát triển của khả năng chịu lỗi trong PostgreSQL:Du hành thời gian

  4. postgresql 9.3. Nhóm theo không có tất cả các cột

  5. Làm thế nào để bao gồm dữ liệu bị thiếu cho nhiều nhóm trong khoảng thời gian?