| PostgreSQL 8.3.3¹®¼ | ||||
|---|---|---|---|---|
| Prev | Fast Backward | Chapter 29. libpq - C ¶óÀ̺귯¸® | Fast Forward | Next |
PostgreSQL´Â LISTEN¿Í NOTIFYÄ¿¸Çµå¸¦ »ç¿ëÇÑ, ºñµ¿±â Å뺸¸¦ Áö¿øÇÕ´Ï´Ù. Ŭ¶óÀÌ¾ðÆ® ¼¼¼ÇÀº LISTENÄ¿¸Çµå¸¦ »ç¿ëÇØ ƯÁ¤ÇÑ Å뺸 Á¶°ÇÀ» µî·ÏÇÕ´Ï´Ù. (Å뺸 °¨½Ã¸¦ ±×¸¸µÎ·Á¸éUNLISTENÄ¿¸Çµå¸¦ »ç¿ëÇÕ´Ï´Ù. ) ÀÓÀÇÀÇ ¼¼¼ÇÀ¸·Î Á¶°Ç¸í¿¡ ÀÇÇÑNOTIFYÄ¿¸Çµå°¡ ½ÇÇàµÇ¸é, ƯÁ¤ Á¶°ÇÀ» °¨½ÃÇÏ´Â ¸ðµç ¼¼¼ÇÀº ºñµ¿±â¿¡°Ô Å뺸¸¦ ¹Þ½À´Ï´Ù. Å뺸¿øÀ¸·ÎºÎÅÍ Å뺸¸¦ ¹Þ´Â ÂÊÀº ´õ ÀÌ»óÀÇ Á¤º¸¸¦ °Ç³×¹ÞÁö ¾Ê½À´Ï´Ù. µû¶ó¼, º¸Åë Åë½ÅÇØ¾ß ÇÏ´Â ½ÇÁ¦ µ¥ÀÌÅÍ´Â µ¥ÀÌÅͺ£À̽º Å×À̺íÀ» °³ÀÔ½ÃÄÑ Àü¼ÛµË´Ï´Ù. ÀϹÝÀûÀ¸·Î, Á¶°Ç¸íÀº °ü·ÃÇÏ´Â ¸±·¹À̼Ǹí°ú °°Àº °ÍÀÌÁö¸¸, ¹Ýµå½Ã °ü·ÃÇÏ´Â ¸±·¹À̼ÇÀÌ ÇÊ¿äÇÏÁö´Â ¾Ê½À´Ï´Ù.
libpq¾îÇø®ÄÉÀ̼ÇÀº º¸ÅëÀÇ SQL¿¡ ÀÇÇÑ Äõ¸®¿Í °°ÀÌLISTEN¿Í UNLISTENÄ¿¸Çµå¸¦ ¹ßÇàÇÒ ¼ö ÀÖ½À´Ï´Ù.
NOTIFY¸Þ¼¼ÁöÀÇ µµÂøÀº °è¼ÓµÇ¾îPQnotifies¸¦ È£ÃâÇÏ¸é °ËÃâÇÒ ¼ö ÀÖ½À´Ï´Ù.
PQnotifies´Â ¼¹ö·ÎºÎÅÍ ¼ö½ÅÇÑ Å뺸 ¸Þ¼¼ÁöÀÇ Ã³¸®µÇÁö ¾ÊÀº ¸®½ºÆ®·ÎºÎÅÍ ´ÙÀ½ÀÇ Å뺸¸¦ ¸®ÅϹ޽À´Ï´Ù.
º¸·ù ÁßÀÎ Å뺸°¡ ¾øÀ¸¸é null Æ÷ÀÎÅ͸¦ ¹ÝȯÇÕ´Ï´Ù.
PQnotifies °¡ Å뺸¸¦ µ¹·ÁÁÖ¸é, ±× Å뺸´Â ó¸®µÈ °ÍÀ¸·Î Àνĵǰí Å뺸 ¸®½ºÆ®¿¡¼ Á¦°ÅµË´Ï´Ù.
PGnotify *PQnotifies(PGconn *conn);
typedef struct pgNotify {
char *relname; /* notification condition name */
int be_pid; /* process ID of notifying server process */
char *extra; /* notification parameter */
} PGnotify;
-->
char *relname; /* Å뺸 Á¶°Ç¸í */
int be_pid; /* Å뺸ÇÏ´Â ¼¹ö ÇÁ·Î¼¼½ºÀÇ ÇÁ·Î¼¼½º ID */
char *extra; /* Å뺸 ÆÄ¶ó¹ÌÅÍ */
} PGnotify;
PQnotifies·Î ¹ÝȯµÈPGnotify¿ÀºêÁ§Æ®ÀÇ Ã³¸®°¡ ³¡³ª¸é, PQfreemem¸¦ »ç¿ëÇØ È®½ÇÈ÷ ÇØÁ¦ÇØ Áֽʽÿä.
PGnotify Æ÷ÀÎÅ͸¦ ÇØÁ¦ÇÏ´Â °ÍÀº Áß¿äÇÕ´Ï´Ù.
relname¿Í extraÇʵå´Â ´Ù¸¥ ÇÒ´çÀ» ³ªÅ¸³»°í ÀÖÁö ¾Ê½À´Ï´Ù.
(ÇöÀç, extraÇʵå´Â »ç¿ëµÇÁö ¾Ê°í, Ç×»ó ºñ¿©ÀÖ´Â ¹®ÀÚ¿ÀÇ Æ÷ÀÎÅͰ¡ µË´Ï´Ù. )
Example 29-2´Â ºñµ¿±â Å뺸¸¦ »ç¿ëÇÑ »ùÇà ÇÁ·Î±×·¥À» ³ªÅ¸³»°í ÀÖ½À´Ï´Ù.
PQnotifies()´Â ½ÇÁ¦·Î ¼¹öÀÇ µ¥ÀÌÅ͸¦ Àо´Â °ÍÀº ¾Æ´Õ´Ï´Ù.
À̰ÍÀº ´ÜÁö, ´Ù¸¥libpqÇÔ¼ö°¡ Èí¼öÇß´ø Å뺸 ¸Þ¼¼Áö¸¦ ¹ÝȯÇÒ »ÓÀÔ´Ï´Ù.
libpq ÀÌÀü ¸±¸®½º¿¡¼´Â Å뺸 ¸Þ¼¼Áö¸¦ ÀûÀýÇÑ ½ÃÁ¡¿¡ È®½ÇÈ÷ ¹ÞÀ¸·Á¸é , ºó Äõ¸®¶óµµ ÀÏÁ¤½Ã°£¸¶´Ù º¸³»°í,
PQexec()¸¦ ½ÇÇàÇÒ ¶§¸¶´ÙPQnotifies()¸¦ üũÇÒ ¼ö ¹Û¿¡ ¾ø¾ú½À´Ï´Ù.
Áö±Ýµµ ÀÌ ¹æ¹ýÀº µ¿ÀÛÇÏÁö¸¸, ó¸® ´É·ÂÀÌ ³¶ºñ µÇ¹Ç·Î ±×¸¸µÎ¾î¾ß ÇÕ´Ï´Ù.
½ÇÇàÇØ¾ß ÇÒ Äõ¸®°¡ ¾øÀ» ¶§ Å뺸 ¸Þ¼¼Áö¸¦ üũÇÏ´Â ÁÁÀº ¹æ¹ýÀº ¿ì¼±PQconsumeInput()¸¦ È£ÃâÇϰí PQnotifies()¸¦ üũÇÏ´Â °ÍÀÔ´Ï´Ù.
¼¹ö·ÎºÎÅÍÀÇ µ¥ÀÌÅÍÀÇ µµÂøÀ»select()·Î ±â´Ù¸± ¼ö ÀÖ¾î, ºÒÇÊ¿äÇÑ µ¿ÀÛÀ¸·ÎCPUÆÄ¿ö¸¦ ¼ÒºñÇØ ¹ö¸®´Â ÀÏÀÌ ¾ø½À´Ï´Ù
(select()¸¦ »ç¿ëÇÏ´Â ÆÄÀÏ ±â¼úÀÚÀÇ ¹øÈ£ Ãëµæ¿¡ ´ëÇØ¼´Â PQsocket()¸¦ ÂüÁ¶ÇØ Áֽʽÿä).
µ¡ºÙ¿© À̰ÍÀº Äõ¸®¿¡PQsendQuery¿Í PQgetResult¸¦ »ç¿ëÇßÀ» ¶§µµ, Ä£¼÷ÇÑPQexec¸¦ »ç¿ëÇßÀ» ¶§µµ µ¿ÀÛÇÕ´Ï´Ù.
±×·¯³ª Å뺸°¡ Ä¿¸ÇµåÀÇ Ã³¸® Áß¿¡ µµÂøÇÏ´ÂÁö ¾Æ´ÑÁö, PQgetResult³ª PQexecÀÇ ½ÇÇà ¸¶´ÙPQnotifies()¸¦ Á¶»çÇÏ´Â °ÍÀ» ÀØÁö ¾Êµµ·Ï ÇØ¾ßÇÕ´Ï´Ù.