| PostgreSQL 8.3.3¹®¼ | ||||
|---|---|---|---|---|
| Prev | Fast Backward | Chapter 33. SQL È®Àå | Fast Forward | Next |
¸ðµç ÇÔ¼ö´Â, º¯µ¿¼º±¸ºÐÀ» °¡Áý´Ï´Ù. ÃëÇÒ ¼ö ÀÖ´Â ±¸ºÐÀº, VOLATILE, STABLE, ȤÀº IMMUTABLEÀÔ´Ï´Ù. CREATE FUNCTION ¸í·ÉÀ¸·Î ºÐ·ùÀÇ ÁöÁ¤ÀÌ ¾øÀ¸¸é ±âº»°ªÀ¸·Î VOLATILE°¡ µË´Ï´Ù. º¯µ¿¼º¿¡ °üÇÑ ºÐ·ù´Â, ±× ÇÔ¼ö¿¡ °üÇÑ ÃÖÀûÈ¿¡ ¾à¼ÓÇÑ ÀÏÀÇ ÇüÅÂÀÔ´Ï´Ù.
VOLATILEÇÔ¼ö´Â, µ¥ÀÌÅͺ£À̽ºÀÇ º¯°æÀ» Æ÷ÇÔÇÑ, ÀüºÎ¸¦ ½Ç½ÃÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. µ¿ÀÏ ÀÎÀÚ·Î °è¼ÓÇØ È£ÃâÇß´Ù°í ÇØµµ ´Ù¸¥ °á°ú¸¦ µ¹·ÁÁÙ ¼ö ÀÖ½À´Ï´Ù. ÃÖÀûÈ´Â ÀÌ·¯ÇÑ ÇÔ¼öÀÇ Çൿ¿¡ ´ëÇÏ´Â ÀüÁ¦¸¦ °¡ÁöÁö ¾Ê½À´Ï´Ù. º¯µ¿ ÇÔ¼ö¸¦ »ç¿ëÇÑ Äõ¸®´Â, ±× ÇàÀÇ °ªÀ» ÇÊ¿ä·Î ÇÏ´Â ¸ðµç Çà¿¡ ´ëÇØ ±× ÇÔ¼ö¸¦ ÀçÆò°¡ÇÕ´Ï´Ù.
STABLEÇÔ¼ö´Â µ¥ÀÌÅͺ£À̽º¸¦ º¯°æÇÒ ¼ö°¡ ¾ø½À´Ï´Ù. ¶Ç, ´ÜÀÏÀÇ ¸í·É¹®³»¿¡¼ ¸ðµç Çà¿¡ ´ëÇØ¼ µ¿ÀÏÇÑ ÀÎÀÚ¸¦ °Ç³×ÁÖ¾úÀ» °æ¿ì¿¡ µ¿ÀÏÇÑ °á°ú¸¦ µ¹·ÁÁÖ´Â °ÍÀÌ º¸ÁõµÇ°í ÀÖ½À´Ï´Ù. ÀÌ ±¸ºÐ¿¡ ÀÇÇØ, ÃÖÀûÈ´Â º¹¼öÀÇ ÇÔ¼öÀÇ È£ÃâÀ» 1°³ÀÇ È£ÃâÇØ ÃÖÀûÈÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. ƯÈ÷, À妽º °Ë»ö Á¶°Ç ³»¿¡¼ ÀÌ·¯ÇÑ ÇÔ¼ö¸¦ Æ÷ÇÔÇÑ ½ÄÀ» »ç¿ëÇÏ´Â °ÍÀº ¾ÈÀüÇÕ´Ï´Ù (À妽º °Ë»öÀº Çà ¸¶´Ù ÇÑ ¹øÀº ¾Æ´Ï°í, ÇÑ ¹ø¸¸ °ªÀÇ ºñ±³ÀÇ Æò°¡¸¦ ½Ç½ÃÇϱ⠶§¹®¿¡, À妽º °Ë»ö Á¶°Ç³»¿¡¼ VOLATILEÇÔ¼ö¸¦ »ç¿ëÇÏ´Â °ÍÀº Àǹ̰¡ ¾ø½À´Ï´Ù).
IMMUTABLEÇÔ¼ö´Â µ¥ÀÌÅͺ£À̽º¸¦ º¯°æÇÒ ¼ö°¡ ¾ø½À´Ï´Ù. ¶Ç, µ¿ÀÏ ÀÎÀÚ¿¡ ´ëÇÑ È£ÃâÀº Ç×»ó µ¿ÀÏÇÑ °á°ú¸¦ µ¹·ÁÁÖ´Â °ÍÀÌ º¸ÁõµÇ°í ÀÖ½À´Ï´Ù. Äõ¸®°¡ Á¤¼öÀÇ ÀÎÀÚ·Î ÀÌ·¯ÇÑ ÇÔ¼ö¸¦ È£ÃâÇßÀ» °æ¿ì, ÃÖÀûÈ´Â ÀÌ ÇÔ¼ö¸¦ »çÀü¿¡ Æò°¡ÇÒ ¼ö ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¸é, SELECT ... WHERE x = 2 + 2 ¶ó°í ÇÏ´Â Äõ¸®´Â, SELECT ... WHERE x = 4¿Í °°ÀÌ ´Ü¼øÈ ÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. À̰ÍÀº, ¹èÈÄ¿¡ ÀÖ´Â Á¤¼ö °¡»ê ¿¬»êÀÚ°¡ IMMUTABLE·Î¼ ¼±¾ðµÇ°í Àֱ⠶§¹®¿¡ÀÔ´Ï´Ù.
ÃÖÀûÈÀÇ °á°ú¸¦ ÃÖ¼±À¸·Î Çϱâ À§Çؼ´Â, ÇÔ¼ö¿¡ ´ëÇØ¼ À¯È¿ÇÏ°í °¡Àå ¾ö¹ÐÇÑ º¯µ¿¼º ±¸ºÐÀ» ºÙÀÌÁö ¾ÊÀ¸¸é ¾ÈµË´Ï´Ù.
ºÎÀÛ¿ëÀ» °¡Áö´Â ÇÔ¼ö´Â ¸ðµÎ, VOLATILE¸¦ ºÙÀÌÁö ¾ÊÀ¸¸é ¾ÈµË´Ï´Ù. ÀÌ·¯ÇÑ ÇÔ¼ö´Â ÃÖÀûÈÇÒ ¼ö°¡ ¾ø±â ¶§¹®ÀÔ´Ï´Ù. ÇÔ¼ö°¡ ºÎÀÛ¿ëÀ» °¡ÁöÁö ¾Ê¾Ò´Ù°í ÇØµµ, ´ÜÀÏ Äõ¸®³»¿¡¼ °ªÀÌ º¯µ¿ÇÏ´Â °æ¿ì´Â VOLATILE¸¦ ºÙÀÌÁö ¾ÊÀ¸¸é ¾ÈµË´Ï´Ù. ¿¹¸¦ µé¸é, random(), currval(), timeofday() µî ÀÔ´Ï´Ù.
°èȹ ÀÛ¼ºÀ» ½Ç½ÃÇØ, °ð¹Ù·Î ½ÇÇàµÇ´Â °Í °°Àº ´ÜÀÏÀÇ ´ëÈ½Ä Äõ¸®¸¦ »ý°¢ÇßÀ» °æ¿ì, »ó´ëÀûÀ¸·Î STABLE±¸ºÐ°ú IMMUTABLE±¸ºÐ°úÀÇ Â÷ÀÌ´Â ±×´ÙÁö ¾ø½À´Ï´Ù. ÀÌ·¯ÇÑ °æ¿ì, ÇÔ¼ö°¡ °èȹ ÀÛ¼ºÁß¿¡ ÇÑ ¹ø ½ÇÇàµÇ´ÂÁö, Äõ¸® ½ÇÇàÁß¿¡ ÇÑ ¹ø ½ÇÇàµÉÁö´Â ±×´ÙÁö ¹®Á¦°¡ µÇÁö ¾Ê½À´Ï´Ù. ±×·¯³ª, °èȹÀÌ º¸Á¸µÇ¾î ´ÙÀ½¿¡ ÀçÀÌ¿ëµÇ´Â °æ¿ì´Â Å« Â÷À̰¡ ³ªÅ¸³³´Ï´Ù. »ç½Ç, ÇÔ¼ö°¡ °èȹ ÀÛ¼º ´Ü°è¿¡¼ »¡¸® Á¤¼ö¸¦ º¸°ü À¯ÁöÇÒ ¼ö°¡ ¾ø´Â °æ¿ì¿¡ IMMUTABLE¸¦ ºÙÀ̸é, ±× ÈÄ¿¡ ÀÌ °èȹÀ» »ç¿ëÇÒ ¶§¿¡ ³°¾Æ¼ Àǹ̰¡ ¾ø´Â °ªÀÌ ÀçÀÌ¿ëµÇ¾î ¹ö¸®°Ô µË´Ï´Ù. À̰ÍÀº, ÁغñµÈ ¸í·É¹®À̳ª °èȹÀ» ij½¬ÇÏ´Â ÇÔ¼ö ¾ð¾î(PL/pgSQLµî)¸¦ »ç¿ëÇÏ´Â °æ¿ì´Â À§ÇèÇÕ´Ï´Ù.
MVCCÀÇ ½º³À¼¦ ±â´ÉÀ» À§ÇØ, µ¿½Ã ½ÇÇàÀÇ Äõ¸®¿¡ ÀÇÇØ º°µµ º¯°æµÇ°í ÀÖÀ» °¡´É¼ºÀÌ ÀÖ´Â Å×ÀÌºí¿¡ ´ëÇØ¼ ¼±ÅÃÇϰí ÀÖ¾ú´Ù°í ÇØµµ,
SELECT¸í·É¸¸À» Æ÷ÇÔÇÑ ÇÔ¼ö´Â, ¾ÈÀüÇÏ°Ô STABLE·Î ÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù.
PostgreSQL´Â, È£Ãâ¿øÀÇ Äõ¸®¿ëÀ¸·Î È®¸³µÈ ½º³À¼¦À» »ç¿ëÇØ STABLEÇÔ¼ö¸¦ ½ÇÇàÇÕ´Ï´Ù.
±× ¶§¹®¿¡, ±× Äõ¸®ÀÇ »çÀÌ, µ¥ÀÌÅͺ£À̽º¿¡ ´ëÇØ¼ °íÁ¤µÈ ½ÃÁ¡¿¡¼ °ªÀ» ÂüÁ¶ÇÏ°Ô µË´Ï´Ù.
¶Ç, ¾î´À Æ®·£Àè¼ÇÀÇ »çÀ̰ªÀÌ ¹Ù²îÁö ¾ÊÀ¸¹Ç·Î, current_timestamp°èÀÇ ÇÔ¼ö´Â STABLE·Î¼ ÀûÀýÇÑ °Í¿¡ ÁÖÀÇÇØ ÁÖ¼¼¿ä.
IMMUTABLEÇÔ¼ö ³»ÀÇ SELECT¸í·Éµµ °°Àº ½º³À¼¦ ±â´ÉÀ» »ç¿ëÇÕ´Ï´Ù. ´Ù¸¸, ÀϹÝÀûÀ¸·Î, IMMUTABLE³»¿¡¼ µ¥ÀÌÅͺ£À̽ºÀÇ Å×À̺íÀ» ¼±ÅÃÇÏ´Â °ÍÀº ±ÇÀ¯ÇÏÁö ¾Ê½À´Ï´Ù. Å×À̺íÀÇ ³»¿ëÀÌ ¹Ù²î¾î ¹ö·ÈÀ» °æ¿ì¿¡ ±× º¸Æí¼ºÀÌ ¸Á°¡Á® ¹ö¸®±â ¶§¹®¿¡ÀÔ´Ï´Ù. ±×·¯³ª, PostgreSQL¿¡¼´Â, °Á¦ÀûÀ¸·Î ¼±ÅÃÇÒ ¼ö ¾ø°ÔµË´Ï´Ù.
ÀÚÁÖ ÀÖ´Â ¿¡·¯´Â, ¼³Á¤ ¸Å°³º¯¼ö¿¡ ÀÇÁ¸ÇÏ´Â °á°ú°¡ µÇ´Â ÇÔ¼ö¿¡ IMMUTABLE¸¦ ºÙÀÌ´Â °ÍÀÔ´Ï´Ù. ¿¹¸¦ µé¸é, ŸÀÓ½ºÅÛÇÁ¸¦ Á¶ÀÛÇÏ´Â ÇÔ¼ö´Â, ¾Æ¸¶ timezoneÀÇ ¼³Á¤¿¡ ÀÇÁ¸ÇÑ °á°ú°¡ µË´Ï´Ù. ¾ÈÀüÀ» À§Çؼ, ÀÌ·¯ÇÑ ÇÔ¼ö´Â ´ë½Å¿¡ STABLE¸¦ ºÙ¿© ÁÖ¼¼¿ä.
Note: PostgreSQL¸±¸®½º 8.0º¸´Ù ÀüÀÇ ¸±¸®½º¿¡¼´Â, STABLEÇÔ¼ö¿Í IMMUTABLEÇÔ¼ö°¡ µ¥ÀÌÅͺ£À̽º¸¦ º¯°æÇÒ ¼ö ¾ø´Ù°í ÇÏ´Â ÇÊ¿ä Á¶°ÇÀÌ ½Ã½ºÅÛ¿¡ ÀÇÇØ ±ÝÁöµÇÁö ¾Ê¾Ò½À´Ï´Ù. ¸±¸®½º 8.0¿¡¼´Â, ÀÌ ±¸ºÐÀÇ SQL ÇÔ¼ö³ª ¼ö¼Ó ¾ð¾î ÇÔ¼ö¿¡ ´ëÇØ¼ SELECTÀÌ¿ÜÀÇ SQL ¸í·ÉÀ» Æ÷ÇÔÇÏÁö ¾Ê´Â °ÍÀ» ÇÊ¿ä Á¶°ÇÀ¸·Î ÇÔÀ¸·Î½á, À̰ÍÀ» ±ÝÁöÇϰí ÀÖ½À´Ï´Ù (ÀÌ·¯ÇÑ ÇÔ¼ö´Â ¾ÆÁ÷ µ¥ÀÌÅͺ£À̽º¸¦ º¯°æÇÏ´Â VOLATILEÇÔ¼ö¸¦ È£ÃâÇÒ ¼ö Àֱ⠶§¹®¿¡, À̰ÍÀº ¿ÏÀüÇÑ ¹æ¾î Å×½ºÆ®´Â ¾Æ´Õ´Ï´Ù. À̰ÍÀ» ½Ç½ÃÇϸé, STABLE ȤÀº IMMUTABLEÇÔ¼ö´Â È£ÃâÇÑ ÇÔ¼ö¿¡ ÀÇÇØ µ¥ÀÌÅͺ£À̽º·Î º¯°æÀ» Çß´ø °ÍÀ» ¾ËÁö ¸øÇÕ´Ï´Ù).