PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

PostgreSQL में pg_notify(text, text) का उपयोग करके सुनें/सूचित करें

मैंने 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 इसे लोअर केस के लिए बाध्य करता है। चैनल पैरामीटर टाइप टेक्स्ट का होता है बल्कि फिर 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. पता लगाएँ कि क्या पंक्ति को अद्यतन या सम्मिलित किया गया था

  2. Npgsql और इकाई फ्रेमवर्क के साथ पोस्टग्रेएसक्यूएल को अस्वीकार्य का उपयोग करके क्वेरी करें

  3. एकाधिक सम्मिलित तालिकाओं पर कुल कार्य

  4. sqlalchemy में संघर्ष पर Postgresql

  5. POSTGRESQL दो अलग-अलग तालिकाओं की प्राथमिक कुंजी का संदर्भ देने वाली विदेशी कुंजी