33.6. ÇÔ¼öÀÇ º¯µ¿ ¼ºÇ°·ù

¸ðµç ÇÔ¼ö´Â, º¯µ¿¼º±¸ºÐÀ» °¡Áý´Ï´Ù. ÃëÇÒ ¼ö ÀÖ´Â ±¸ºÐÀº, VOLATILE, STABLE, ȤÀº IMMUTABLEÀÔ´Ï´Ù. CREATE FUNCTION ¸í·ÉÀ¸·Î ºÐ·ùÀÇ ÁöÁ¤ÀÌ ¾øÀ¸¸é ±âº»°ªÀ¸·Î VOLATILE°¡ µË´Ï´Ù. º¯µ¿¼º¿¡ °üÇÑ ºÐ·ù´Â, ±× ÇÔ¼ö¿¡ °üÇÑ ÃÖÀûÈ­¿¡ ¾à¼ÓÇÑ ÀÏÀÇ ÇüÅÂÀÔ´Ï´Ù.

ÃÖÀûÈ­ÀÇ °á°ú¸¦ ÃÖ¼±À¸·Î Çϱâ À§Çؼ­´Â, ÇÔ¼ö¿¡ ´ëÇØ¼­ À¯È¿ÇÏ°í °¡Àå ¾ö¹ÐÇÑ º¯µ¿¼º ±¸ºÐÀ» ºÙÀÌÁö ¾ÊÀ¸¸é ¾ÈµË´Ï´Ù.

ºÎÀÛ¿ëÀ» °¡Áö´Â ÇÔ¼ö´Â ¸ðµÎ, 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ÇÔ¼ö´Â È£ÃâÇÑ ÇÔ¼ö¿¡ ÀÇÇØ µ¥ÀÌÅͺ£À̽º·Î º¯°æÀ» Çß´ø °ÍÀ» ¾ËÁö ¸øÇÕ´Ï´Ù).