CREATE RULE

Name

CREATE RULE -- »õ·Î¿î ÀçÀÛ¼º ·êÀ» Á¤ÀÇÇÕ´Ï´Ù

Synopsis

CREATE [ OR REPLACE ] RULE 
name
 AS ON 
event

    TO 
table
 [ WHERE 
condition
 ]
    DO [ ALSO | INSTEAD ] { NOTHING | 
command
 | ( 
command
 ; 
command
 ... ) }

¼³¸í

CREATE RULE¿¡ ÀÇÇØ, ÁöÁ¤ÇÑ Å×ÀÌºí ¶Ç´Â ºä¿¡ Àû¿ëÇÏ´Â ·êÀ» »õ·Ó°Ô Á¤ÀÇÇÒ ¼ö ÀÖ½À´Ï´Ù. CREATE OR REPLACE RULE¸¦ »ç¿ëÇϸé, »õ·Î¿î ·êÀÇ ÀÛ¼º, ¶Ç´Â, µ¿ÀÏ Å×À̺íÀÇ µ¿ÀÏ À̸§ÀÇ ±âÁ¸ ·êÀ» ´ëüÇÒ ¼ö ÀÖ½À´Ï´Ù.

PostgreSQLÀÇ ·ê ½Ã½ºÅÛÀ» »ç¿ëÇϸé, µ¥ÀÌÅͺ£À̽º Å×ÀÌºí¿¡ ´ëÇÑ »ðÀÔ, °»½Å, »èÁ¦ ½Ã¿¡ ´ëü·Î¼­ ½ÇÇàÇÏ´Â ¾×¼ÇÀ» Á¤ÀÇÇÒ ¼ö ÀÖ½À´Ï´Ù. °£´ÜÇÏ°Ô ¸»Çϸé, ÁöÁ¤µÈ Å×ÀÌºí¿¡ ´ëÇØ¼­ ÁöÁ¤µÈ Ä¿¸àµå°¡ ½ÇÇàµÇ¾úÀ» ¶§, ·ê¿¡ ÀÇÇØ Ãß°¡ÀÇ Ä¿¸àµå°¡ ½ÇÇàµÈ´Ù°í ÇÏ´Â °ÍÀÔ´Ï´Ù. ±× ¿Ü¿¡µµ,INSTEAD·ê¿¡ ÀÇÇØ ÁöÁ¤µÈ Ä¿¸àµå¸¦ ´Ù¸¥ Ä¿¸àµå·Î ´ëü Çϰųª, ÀüÇô Ä¿¸àµå¸¦ ½ÇÇàÇÏÁö ¾Ê°Ô ÇÏ´Â Àϵµ °¡´ÉÇÕ´Ï´Ù. ¶Ç, ·êÀº Å×À̺긣ºä¸¦ ½ÇÀåÇϱâ À§Çؼ­µµ »ç¿ëµË´Ï´Ù. Áß¿äÇÑ °ÍÀº, ·êÀº ½ÇÁ¦·Î Ä¿¸àµå¸¦ º¯È¯ÇÏ´Â ¸ÅÄ¿´ÏÁò, ¹Ù²Ù¾î ¸»Çϸé, Ä¿¸àµåÀÇ ¸ÅÅ©·ÎÀÎ °ÍÀÔ´Ï´Ù. ·ê¿¡ ÀÇÇÑ º¯È¯Àº Ä¿¸àµåÀÇ ½ÇÇàÀü¿¡ ¹ß»ýÇÕ´Ï´Ù. °¢ ¹°¸®ÇàÀ» °³º°ÀûÀ¸·Î Á¶ÀÛÇÏ°í ½ÍÀº °æ¿ì, ·êÀº ¾Æ´Ï°í ¹æ¾Æ¼è¸¦ »ç¿ëÇÏ´Â ÆíÀÌ ÁÁÀ» °ÍÀÔ´Ï´Ù. ·ê ½Ã½ºÅÛ¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ °ÍÀº,Chapter 35¿¡ ±âÀçµÇ¾î ÀÖ½À´Ï´Ù.

Çö½ÃÁ¡¿¡¼­´Â,ON SELECT·êÀº, Á¶°ÇÀ» °¡ÁöÁö ¾Ê´ÂINSTEAD·êÀ̾î¾ß ÇÕ´Ï´Ù. ±×¸®°í,ON SELECT·êÀÌ °¡Áö´Â ¾×¼ÇÀº, ´Üµ¶ÀÇSELECTÄ¿¸àµå¸¸À¸·Î ±¸¼ºµÉ Çʿ䰡 ÀÖ½À´Ï´Ù. µû¶ó¼­,ON SELECT·êÀ» »ç¿ëÇϸé, È¿À²ÀûÀ¸·Î Å×À̺íÀ» ºä·Î º¯È¯ ÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ ºä¿¡¼­´Â, Å×À̺íÀÇ ³»¿ëÀº ¾Æ´Ï°í, ·ê¿¡ Æ÷ÇԵǴÂSELECTÄ¿¸àµå°¡ ¹ÝȯÇÏ´Â ÇàÀÌ, ºäÀÇ ³»¿ëÀ¸·Î¼­ Á¦½ÃµË´Ï´Ù. ´Ù¸¸, Å×À̺í ÀÛ¼ºÇÏ¿©, °Å±â¿¡ ON SELECT·êÀ» Á¤ÀÇÇÏ´Â °Íº¸´Ù´Â,CREATE VIEWÄ¿¸àµå¸¦ »ý¼ºÇÏ´Â °ÍÀ» ÃßõÇÕ´Ï´Ù.

ON INSERT,ON UPDATE,ON DELETE·ê(¸ñÀûÀ» ÃæÁ·½ÃŰ´Â °Í)À» Çʿ信 µû¶ó¼­ Á¤ÀÇÇØ, ºä¿¡ ´ëÇÑ °»½Å Á¶ÀÛÀ» ´Ù¸¥ Å×ÀÌºí¿¡ ´ëÇÑ ÀûÀýÇÑ °»½Å Á¶ÀÛ¿¡ ġȯÇÏ´Â °ÍÀ¸·Î, °»½Å °¡´ÉÇÑ ½ÇÀçÇÏÁö ¾Ê´Â ºä¸¦ ÀÛ¼ºÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. INSERT RETURNINGµîÀ» Áö¿øÇÏ°í ½ÍÀ¸¸é, ÀÌ·¯ÇÑ ·ê¿¡ ÀûÀýÇÑRETURNING±¸¸¦ È®½ÇÈ÷ Àû¾î ÁÖ¼¼¿ä.

ºäÀÇ °»½Å¿¡ Á¶°ÇºÎ ·êÀ» »ç¿ëÇÏ·Á°í ÇÏ´Â °æ¿ì, ÇÔÁ¤ÀÌ ÀÖ½À´Ï´Ù. ±× ºä¿¡ Çã°¡ÇÏ´Â °¢°¢ÀÇ Á¶ÀÛ¿¡, Á¶°ÇÀ» °¡ÁöÁö ¾Ê´ÂINSTEAD·êÀ» ÁغñÇÒ Çʿ䰡 ÀÖ´Â ÀÏÀÔ´Ï´Ù. ·êÀÌ Á¶°ÇºÎÀ̰ųªINSTEAD°¡ ¾Æ´Ñ °æ¿ì, ½Ã½ºÅÛÀº °»½Å Á¶ÀÛÀ» °ÅºÎÇÕ´Ï´Ù. ±× °æ¿ì, ½Ã½ºÅÛÀÌ, °æ¿ì¿¡ µû¶ó¼­´Â, ºäÀÇ ´õ¹Ì Å×ÀÌºí¿¡ ´ëÇÑ Á¶ÀÛÀÌ µÉ °¡´É¼ºÀÌ ÀÖ´Ù´Â °ÍÀ» °£ÁÖÇϱ⠶§¹®ÀÔ´Ï´Ù. »ç¿ëÇÏ´Â ¸ðµç ÄÉÀ̽º¿¡ ´ëÇØ Á¶°ÇºÎ ·êÀ» ÀÛ¼ºÇÏ´Â °æ¿ì´Â, Á¶°ÇÀ» °¡ÁöÁö ¾Ê´ÂDO INSTEAD NOTHING·êÀ» Ãß°¡ÇØ, ´õ¹Ì Å×ÀÌºí¿¡ ´ëÇÑ °»½ÅÀº È£ÃâµÇÁö ¾Ê´Â °ÍÀ» ½Ã½ºÅÛ¿¡ ¸í½ÃÇÕ´Ï´Ù. °Ô´Ù°¡ Á¶°ÇºÎ ·ê¿¡´Â,INSTEAD¸¦ ÁöÁ¤ÇÏÁö ¾Ê°Ô ÇÕ´Ï´Ù. ÀÌ·¯ÇÑ Á¶°ÇÀÌ ÃæÁ· µÇ¾úÀ» °æ¿ì, µðÆúÆ®ÀÇINSTEAD NOTHING¾×¼Ç¿¡ ·ê¿¡ Æ÷ÇԵǴ ¾×¼ÇÀÌ Ãß°¡µË´Ï´Ù. (±×·¯³ª ÇöÀç, ÀÌ ¹æ¹ý¿¡¼­´ÂRETURNINGÄõ¸®¸¦ Áö¿øÇÏ´Â °ÍÀÌ Àß µ¿ÀÛÇÏÁö ¾Ê½À´Ï´Ù. )

¸Å°³º¯¼ö

name

»ý¼ºÇÏ´Â ·êÀÇ À̸§ÀÔ´Ï´Ù. ÀÌ À̸§Àº, °°Àº Å×À̺íÀÇ ´Ù¸¥ ·ê°ú´Â ´Ù¸¥ À̸§À¸·Î ÁöÁ¤ÇØ¾ß ÇÕ´Ï´Ù. µ¿ÀÏ Å×ÀÌºí¿¡ À̺¥Æ®ÀÇ Á¾·ù°¡ °°Àº ·êÀÌ ´Ù¼ö ÀÖÀ» °æ¿ì, ¾ËÆÄºª À̸§ ¼øÀ¸·Î Àû¿ëµË´Ï´Ù.

event

À̺¥Æ®´Â,SELECT,INSERT,UPDATE,DELETE ÁßÀÇ Çϳª°¡ µË´Ï´Ù.

table

·êÀ» Àû¿ëÇÏ´Â Å×ÀÌºí ¶Ç´Â ºäÀÇ À̸§(°ËÁõÀ» °ÅÄ£ ½ºÅ°¸¶)ÀÔ´Ï´Ù.

condition

ÀÓÀÇÀÇSQLÁ¶°Ç½ÄÀÔ´Ï´Ù(booleanÇüÀ» ¹ÝȯÇÕ´Ï´Ù). Á¶°Ç½Ä¿¡¼­´Â,NEW¹×OLDÀÌ¿ÜÀÇ Å×À̺íÀº ÂüÁ¶ÇÒ ¼ö ¾ø½À´Ï´Ù. ¶Ç, Áý°è ÇÔ¼ö¸¦ Æ÷ÇÔÇÒ ¼ö ¾ø½À´Ï´Ù.

INSTEAD

INSTEAD´Â, ¿ø·¡ÀÇ Ä¿¸àµåÀÇ ´ë½Å¿¡ ÀÌ Ä¿¸àµå°¡ ½ÇÇàµÇ´Â °ÍÀ» ³ªÅ¸³À´Ï´Ù.

ALSO

ALSO´Â ¿ø·¡ÀÇ Ä¿¸àµå¿¡ in addition to Ãß°¡ÀûÀÎ Ä¿¸àµå°¡ ½ÇÇàµÇ´Â °ÍÀ» ³ªÅ¸³À´Ï´Ù.

ALSOµµINSTEADµµ ÁöÁ¤µÇÁö ¾ÊÀº °æ¿ì,ALSO°¡ µðÆúÆ®ÀÔ´Ï´Ù.

command

·êÀÇ ¾×¼ÇÀ» ±¸¼ºÇÏ´Â ´ÜÀÏ ¶Ç´Â º¹¼öÀÇ Ä¿¸àµåÀÔ´Ï´Ù. À¯È¿ÇÑ Ä¿¸àµå´Â,SELECT,INSERT,UPDATE,DELETE, ¶Ç´Â NOTIFYÀÔ´Ï´Ù.

condition ¿Í command ÀÇ ³»ºÎ¿¡¼­´Â, ´ë»óÀ¸·Î ÇÏ´Â Å×À̺íÀÇ °ªÀ» ÂüÁ¶Çϱâ À§Çؼ­, Ưº°ÇÑ Å×À̺í¸íNEW¿ÍOLD¸¦ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. NEW´Â,ON INSERT¿ÍON UPDATE·ê¿¡ À¯È¿ÇÕ´Ï´Ù. »ðÀÔ ¶Ç´Â °»½ÅµÇ´Â »õ·Î¿î ÇàÀ» ÂüÁ¶ÇÕ´Ï´Ù. OLD´Â,ON UPDATE¿ÍON DELETE·ê¿¡ À¯È¿ÇÕ´Ï´Ù. °»½Å ¶Ç´Â »èÁ¦µÇ´Â ±âÁ¸ÀÇ ÇàÀ» ÂüÁ¶ÇÕ´Ï´Ù.

ÁÖ¼®

·êÀ» »ý¼º ¶Ç´Â º¯°æÇϱâ À§Çؼ­´Â, Å×À̺íÀÇ ¼ÒÀ¯ÀÚ¿©¾ß ÇÕ´Ï´Ù.

ºä»óÀÇINSERT,UPDATE,DELETE·ê¿¡¼­´Â,RETURNING±¸¸¦ Ãß°¡ÇØ, ºäÀÇ ¿­À» µ¹·ÁÁÙ ¼ö°¡ ÀÖ½À´Ï´Ù. ·êÀÌ °¢°¢ÀÇ INSERT RETURNING,UPDATE RETURNING,DELETE RETURNINGÄ¿¸àµå¿¡ ÀÇÇØ Æ®¸®°Å µÆÀ» °æ¿ì, ÀÌ ±¸´Â Ãâ·ÂÀ» °è»êÇÏ´Â °Í¿¡ »ç¿ëµË´Ï´Ù. RETURNING¾øÀÌ ·êÀÌ Æ®¸®°Å µÇ¾úÀ» °æ¿ì, ·êÀÇRETURNING±¸´Â ¹«½ÃµË´Ï´Ù. ÇöÀçÀÇ ½ÇÇà¿¡¼­´Â, ¹«Á¶°ÇÀÇINSTEAD·ê¸¸ÀÌRETURNING¸¦ Æ÷ÇÔÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. °Ô´Ù°¡ µ¿ÀÏ À̺¥Æ®¿ëÀÇ ¸ðµç ·ê Áß ¿¡¼­ ¸¹¾Æ¾ß 1°³ÀÇRETURNING±¸¸¦ °¡Áú ¼ö°¡ ÀÖ½À´Ï´Ù. (À̰Ϳ¡ ÀÇÇØ È®½ÇÈ÷, °á°ú¸¦ °è»êÇϱâ À§Çؼ­ »ç¿ëµÇ´ÂRETURNING±¸ÀÇ È帰¡ 1°³¿¡¸¸ µË´Ï´Ù. ) ºä»óÀÇRETURNINGÄõ¸®´Â, ÀÌ¿ë °¡´ÉÇÑ ¸ðµç ·ê¿¡¼­ RETURNING°¡ Á¸ÀçÇÏÁö ¾Ê´Â °æ¿ì, °ÅÀýµË´Ï´Ù.

¼øÈ¯ÀûÀÎ ·êÀº ÇÇÇϵµ·Ï ÁÖÀÇÇØ ÁÖ¼¼¿ä. ¿¹¸¦ µé¸é, ¾Æ·¡¿Í °°Àº 2°³ÀÇ ·ê Á¤ÀÇ °¢°¢ÀÌPostgreSQL¿¡ ¹Þ¾Æµé¿©Á³À» °æ¿ì, ·êÀÌ Àç±ÍÀûÀ¸·Î Àü°³µÇ±â ¶§¹®¿¡,SELECTÄ¿¸àµå°¡,PostgreSQL¿¡ ¿¡·¯¸¦ Ç¥½Ã½Ãŵ´Ï´Ù.

CREATE RULE "_RETURN" AS
    ON SELECT TO t1
    DO INSTEAD 
        SELECT * FROM t2;

CREATE RULE "_RETURN" AS
    ON SELECT TO t2
    DO INSTEAD 
        SELECT * FROM t1;

SELECT * FROM t1;

ÇöÀç, ·êÀÇ ¾×¼Ç¿¡NOTIFYÄ¿¸àµå°¡ Æ÷ÇԵǴ °æ¿ì,NOTIFYÄ¿¸àµå´Â ¹«Á¶°Ç ½ÇÇàµË´Ï´Ù. Áï, ·êÀ» Àû¿ëÇØ¾ß ÇÒ ÇàÀÌ Á¸ÀçÇÏÁö ¾Ê¾Æµµ,NOTIFY°¡ ¹ßÇàµË´Ï´Ù. ¿¹¸¦ µé¸é,

CREATE RULE notify_me AS ON UPDATE TO mytable DO ALSO NOTIFY mytable;

UPDATE mytable SET name = 'foo' WHERE id = 42;

id = 42¶ó°í ÇÏ´Â Á¶°Ç¿¡ ÀÏÄ¡ÇÏ´Â ÇàÀÇ À¯¹«¿¡ °ü°è¾øÀÌ,UPDATE°¡ ÇàÇØÁö´Â µ¿¾È, 1°³ÀÇNOTIFYÀ̺¥Æ®°¡ ¼Û½ÅµË´Ï´Ù. À̰ÍÀº ½ÇÇà»óÀÇ Á¦ÇÑÀ̸ç, Àå·¡ÀÇ ¸±¸®½º¿¡¼­´Â ¼öÁ¤µÉÁöµµ ¸ð¸¨´Ï´Ù.

ȣȯ¼º

Àüü Äõ¸® ÀçÀÛ¼º ½Ã½ºÅÛ °°ÀÌ,CREATE RULE´ÂPostgreSQLÀÇ È®ÀåÀÔ´Ï´Ù.