9.12. ½ÃÄö½º Á¶ÀÛ ÇÔ¼ö

º»Àý¿¡¼­´ÂPostgreSQLÀǽÃÄö½º °´Ã¼¿¡ ´ëÇØ ¿¬»êÀ» ½Ç½ÃÇÏ´Â ÇÔ¼ö¿¡ ´ëÇØ ¼³¸íÇÕ´Ï´Ù. ½ÃÄö½º °´Ã¼(½ÃÄö½º Á¦³×·¹ÀÌÅͶó°íµµ ´ÜÁö ½ÃÄö½º¶ó°íµµ ºÒ¸³´Ï´Ù)¶õCREATE SEQUENCE·Î ÀÛ¼ºµÇ´Â 1ÇàÀÇ Æ¯º°ÇÑ Å×À̺íÀÔ´Ï´Ù. ½ÃÄö½º °´Ã¼´Â Åë»ó Å×À̺íÀÇ Çà¿¡ ÀÏÀÇÀÇ ½Äº°ÀÚ¸¦ »ý¼ºÇϱâ À§Çؼ­ »ç¿ëµË´Ï´Ù. Table 9-34¿¡ ¿­°ÅµÇ°í ÀÖ´Â ½ÃÄö½º ÇÔ¼ö´Â, ½ÃÄö½º °´Ã¼¿¡¼­ºÎÅÍ ¿¬¼ÓÇÑ ½ÃÄö½º°ªÀ» ÃëµæÇϱâ À§ÇÑ , ¾ÈÀüÇÑ ¸ÖƼÀ¯Àú ¸Þ¼Òµå¸¦ Á¦°øÇÏ´Â ÇÔ¼öÀÔ´Ï´Ù.

Table 9-34. ½ÃÄö½º ÇÔ¼ö

ÇÔ¼ö ¹Ýȯ°ª ¼³¸í
currval(regclass) bigint ÁöÁ¤µÈ ½ÃÄö½º¿¡ ´ëÇØnextval·Î ¾òÀ» ¼ö ÀÖ´ø ÃÖ½ÅÀÇ °ªÀ» ¹ÝȯÇÑ´Ù
nextval(regclass) bigint ½ÃÄö½º¸¦ ÁøÇà½ÃÄÑ »õ·Î¿î °ªÀ» ¹ÝȯÇÑ´Ù
setval(regclass, bigint) bigint ½ÃÄö½ºÀÇ ÇöÀç°ªÀ» ¼³Á¤ÇÑ´Ù
setval(regclass, bigint, boolean) bigint ½ÃÄö½ºÀÇ ÇöÀç°ª°úis_calledÇ÷¡±×¸¦ ¼³Á¤ÇÑ´Ù

½ÃÄö½º ÇÔ¼ö È£Ãâ¿¡ ÀÇÇØ Á¶À۵Ǵ ½ÃÄö½º´ÂregclassÀμö·Î ÁöÁ¤µÇ°í ±×¸®°í ±×°ÍÀºpg_class½Ã½ºÅÛ Ä«Å»·Î±×³»ÀÇ ½ÃÄö½ºÀÇ OID¿¡ Áö³ªÁö ¾Ê½À´Ï´Ù. ¼öÀÛ¾÷À¸·Î OID¸¦ °Ë»ö ÇØ¼­´Â ¾ÈµË´Ï´Ù,±×·¯³ª,regclassµ¥ÀÌÅÍÇüÀÇ ÀÔ·Â º¯È¯±â°¡ ´ë½Å ±× ÀÛ¾÷À» ½Ç½ÃÇÕ´Ï´Ù. ´ÜÀÏ ÀοëºÎÈ£·Î µÑ·¯½ÎÀÎ ½ÃÄö½º¸íÀ» ±â¼úÇÕ´Ï´Ù, µû¶ó¼­ ±×°ÍÀº ¸®ÅÍ·² Á¤¼ö¿Í °°ÀÌ º¸ÀÔ´Ï´Ù. Åë»óÀÇSQLÀÇ ¸íĪ¿¡¼­ÀÇ Á¶ÀÛ°ú ȣȯ¼ºÀ» À¯ÁöÇϱâ À§Çؼ­, ¹®ÀÚ¿­ÀÌ ½ÃÄö½º¸íÀÌ ÀÌÁß ÀοëºÎÈ£·Î µÑ·¯½Î¿© ÀÖÁö ¾Ê´Â ÇÑ, ¹®ÀÚ¿­À» ¼Ò¹®ÀÚ·Î º¯È¯µË´Ï´Ù. µû¶ó¼­, ÀÌÇÏ¿Í °°ÀÌ µË´Ï´Ù.

nextval('foo')      operates on sequence foo

nextval('FOO')      operates on sequence foo

nextval('"Foo"')    operates on sequence Foo

ÇÊ¿äÇϸé, ÀÌÇÏ¿Í °°ÀÌ ½ÃÄö½º¸íÀ» ½ºÅ°¸¶·Î ¼ö½ÄÇÒ ¼ö ÀÖ½À´Ï´Ù.

nextval('myschema.foo')     operates on myschema.foo

nextval('"myschema". foo')   same as above
nextval('foo')              searches search path for foo

regclass¿¡ °üÇÑ º¸´Ù »ó¼¼ÇÑ Á¤º¸´ÂSection 8.12À» ÂüÁ¶ÇØ ÁÖ¼¼¿ä.

Note: PostgreSQL 8.1 ÀÌÀü¿¡ À־´Â, ½ÃÄö½º ÇÔ¼öÀÇ Àμö´ÂregclassÇüÀº ¾Æ´Ñ,textÇüÀ̾ú½À´Ï´Ù. ±×¸®°í »ó±âÀÇ ÅØ½ºÆ® ¹®ÀÚ¿­À¸·ÎºÎÅÍ OID°ªÀ¸·ÎÀÇ º¯È¯Àº °¢°¢ÀÇ È£Ãâ ½ÇÇà½Ã¿¡ ÀϾ½À´Ï´Ù. ÈĹæ ȣȯ¼ºÀ» À§ÇØ, ÀÌ ±¸Á¶´Â ¾ÆÁ÷ Á¸ÀçÇÕ´Ï´Ù¸¸, ³»ºÎÀûÀ¸·Î´Â ÇÔ¼ö°¡ ½ÇÇàµÇ±â Àü¿¡text·ÎºÎÅÍregclass¿¡ÀÇ ¾Ï¹¬Àû °­Á¦Çü º¯È¯À¸·Î¼­ ÇöÀç 󸮵ǰí ÀÖ½À´Ï´Ù.

¸®ÅÍ·² ¹®ÀÚ¿­À¸·Î¼­ ½ÃÄö½º ÇÔ¼öÀÇ Àμö¸¦ ±â¼úÇÒ ¶§´Â,regclassµ¥ÀÌÅÍÇüÀÇ Á¤¼ö°¡ µË´Ï´Ù. À̰ÍÀº ´ÜÁö OIDÀ̱⠶§¹®¿¡, ´ÙÀ½¿¡ À̸§ÀÌ ´Ù½Ã ¼³Á¤µÇ¾ú´Ùµç°¡, schemaÀÇ ÀçÇÒ´çµÇ¾úÀ½¿¡µµ ºÒ±¸Çϰí, ¿ø·¡ÀÇ ½Äº°µÈ ½ÃÄö½º¸¦ °è½ÂÇÕ´Ï´Ù. ÀÌ"Á¤Àû ¹ÙÀεù"ÀÇ ÇൿÀº, Åë»ó ¿­ÀÇ µðÆúÆ®¿Í ºä ÂüÁ¶ÇÏ´Â ½ÃÄö½º¿¡ ÀÖ¾î ¸Å·ÂÀÌ ÀÖ½À´Ï´Ù. ±×·¯³ª, ¶§¶§·Î ½ÇÇà½Ã¿¡ ½ÃÄö½º ÂüÁ¶°¡ ÇØ°áµÇ´Â "µ¿Àû ¹ÙÀεù"ÀÌ ¹Ù¶÷Á÷ÇÕ´Ï´Ù. µ¿Àû ¹ÙÀεùÀÇ ÇൿÀ» ¾òÀ¸·Á¸é , Á¤¼ö¸¦regclass°¡ ¾Æ´Ï¶ó, text»ó¼ö·Î¼­ ±× »ó¼ö¸¦ ÀúÀå½Ãŵ´Ï´Ù.

nextval('foo'::text)      
foo is looked up at runtime

µ¿Àû ¹ÙÀεùÀº PostgreSQLÀÇ ¸±¸®½º 8.1 ÀÌÀü¿¡ Áö¿øµÈ ÇൿÀ̾úÀ¸¹Ç·Î, ±¸·¡ÀÇ ¾ÖÇø®ÄÉÀ̼ÇÀÇ ½Ã¸àƽ½º¸¦ À¯ÁöÇÏ°í ½ÍÀº °æ¿ì ÀÌ¿Í °°ÀÌ ÇÒ Çʿ䰡 ÀÖÀ» °æ¿ìµµ ÀÖ½À´Ï´Ù.

¹°·Ð, ½ÃÄö½º ÇÔ¼öÀÇ Àμö´Â »ó¼ö¿Í ÇÔ²², ½ÄÀÌ µÉ ¼öµµ ÀÖ½À´Ï´Ù. ÅØ½ºÆ®½ÄÀÇ °æ¿ì, ¾Ï¹¬Àû °­Á¦Çü º¯È¯À¸·Î ·±Å¸ÀÓ °Ë»öÀÌ ½ÇÇàµË´Ï´Ù.

»ç¿ëÇÒ ¼ö ÀÖ´Â ½ÃÄö½º ÇÔ¼ö·Î´Â ÀÌÇÏÀÇ °ÍÀÌ ÀÖ½À´Ï´Ù.

nextval

½ÃÄö½º ¿ÀºêÁ§Æ®¸¦ ÁøÇàÇÏ¿©, ±× ´ÙÀ½ÀÇ °ª¿¡ ±× °ªÀ» ¹ÝȯÇÕ´Ï´Ù. À̰ÍÀº ÀÚµ¿ÀûÀ¸·Î 󸮵˴ϴÙ. º¹¼öÀÇ ¼¼¼ÇÀÌ µ¿½Ã¿¡nextval¸¦ ½ÇÇàÇß´Ù°í ÇØµµ, °¢°¢ÀÇ ¼¼¼ÇÀº °³º°ÀÇ ½ÃÄö½º°ªÀ» ¹Ýµå½Ã ¹Þ½À´Ï´Ù.

currval

ÇöÀçÀÇ ¼¼¼Ç¿¡¼­, ÀÌ ½ÃÄö½ºÀÇ nextval¿¡ ÀÇÇØ ÃëµæµÈ °¡Àå ÃÖ±Ù°ªÀ» ¹ÝȯÇÕ´Ï´Ù(¼¼¼Ç³»¿¡¼­ ±× ½ÃÄö½º¿¡ ´ëÇØnextval°¡ È£ÃâµÇÁö ¾ÊÀº °æ¿ì¿¡´Â, ¿¡·¯°¡ º¸°íµË´Ï´Ù). À̰ÍÀº ·ÎÄÃÀÇ ¼¼¼Ç°ªÀ» ¹ÝȯÇÏ´Â °ÍÀ¸·ÎºÎÅÍ, ÇöÀçÀÇ ¼¼¼ÇÀÌ ½ÇÇàÇÏ°í ³ª¼­ ´Ù¸¥ ¼¼¼ÇÀÌnextval¸¦ ½ÇÇàÇϰųª ÇÏÁö ¾Ê¾Æµµ, ¿¹ÃøÇÒ ¼ö ÀÖ´Â ´äÀ» °¡Á®¿Â´Ù´Â °Í¿¡ ÁÖÀÇÇØ ÁÖ¼¼¿ä.

lastval

ÇöÀçÀÇ ¼¼¼ÇÀÇnextval·Î ¹ÝȯµÇ´Â ÃÖ½ÅÀÇ °ªÀ» ¹ÝȯÇÕ´Ï´Ù. ÀÌ ÇÔ¼ö´Â,nextval°¡ ÇöÀçÀÇ ¼¼¼Ç ³»¿¡¼­ »ç¿ëµÈ ¸¶Áö¸· ½ÃÄö½ºÀÇ °ªÀ» ÆäÄ¡ ÇÏ´Â Àμö·Î¼­ÀÇ ½ÃÄö½º¸íÀ» ÃëÇÏ´Â °ÍÀ» Á¦¿ÜÇϰí´Â,currval¿Í µ¿µîÇÕ´Ï´Ù. ÇöÀçÀÇ ¼¼¼Ç³»¿¡¼­ nextval°¡ ¾ÆÁ÷ È£ÃâµÇÁö ¾ÊÀº °æ¿ì, ¿¡·¯°¡ µË´Ï´Ù.

setval

½ÃÄö½º ¿ÀºêÁ§Æ®ÀÇ °è¼ö°ªÀ» Àç¼³Á¤ ÇÕ´Ï´Ù. 2°³ÀÇ ÆÄ¶ó¹ÌÅ͸¦ ¼ÒÀ¯ÇÏ´Â Çü½Ä¿¡¼­´Â, ½ÃÄö½ºÀÇlast_valueÇʵ尡 ÁöÁ¤µÈ °ªÀ¸·Î ¼³Á¤ÇØ,is_calledÇʵ带true·Î ¼³Á¤ÇÕ´Ï´Ù. ÀÌ Àǹ̴Â, ´ÙÀ½ÀÇnextval°¡ °ªÀ» ¹ÝȯÇϱâ Àü¿¡ ½ÃÄö½º¸¦ ÁøÇà½ÃŲ´Ù´Â °ÍÀÔ´Ï´Ù. 3°³ÀÇ ÆÄ¶ó¹ÌÅÍ Çü½ÄÀÇ °æ¿ì,is_called¸¦true ȤÀºfalse·Î ¼³Á¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. false·Î ¼³Á¤µÇ¾úÀ» °æ¿ì, ´ÙÀ½ÀÇnextval°¡ ÁöÁ¤µÈ Á¤È®ÇÑ °ªÀ» ¹ÝȯÇÏ¿©, ½ÃÄö½ºÀÇ ÁøÇàÀº °è¼ÓµÇ´Ânextval·Î ½ÃÀ۵˴ϴÙ. ¿¹¸¦ µé¸é,

SELECT setval('foo', 42);           Next nextval will return 43
SELECT setval('foo', 42, true);     Same as above
SELECT setval('foo', 42, false);    Next nextval will return 42

setval¿¡ ÀÇÇØ ¹ÝȯµÇ´Â °á°ú´Â Á¦ 2¹øÂ°ÀÇ ÀμöÀÇ °ªÀÔ´Ï´Ù.

µðÆúÆ®ÀÇ ÆÄ¶ó¹ÌÅÍ¿¡ ÀÇÇØ ½ÃÄö½º ¿ÀºêÁ§Æ®°¡ ÀÛ¼ºµÇ°í ÀÖ´Ù¸é,nextvalÀÇ È£Ãâ·Î 1À¸·ÎºÎÅÍ ½ÃÀ۵Ǵ ¿¬¼ÓÀûÀÎ °ªÀ» ¹ÝȯÇÕ´Ï´Ù. ±× ¿ÜÀÇ ÇൿÀº CREATE SEQUENCE Ä¿¸àµåÀÇ Æ¯º°ÇÑ ÆÄ¶ó¹ÌÅ͸¦ »ç¿ëÇÏ¿© ÃëµæÇÒ ¼ö ÀÖ½À´Ï´Ù. º¸´Ù ÀÚ¼¼ÇÑ Á¤º¸´Â Ä¿¸àµåÀÇ ·¹ÆÛ·±½º ÆäÀÌÁö¸¦ ÂüÁ¶ÇØ ÁֽʽÿÀ.

Important: µ¿ÀÏÇÑ ½ÃÄö½º·ÎºÎÅÍ ¼öÄ¡¸¦ ÃëµæÇÏ´Â µ¿½Ã¿¡ ½ÇÇàµÇ´Â Æ®·£Àè¼Ç³¢¸®ÀÇ ºí·ÏÀ» ¹æÁöÇϱâ À§ÇØ,nextval¿¬»êÀº °áÄÚ ·Ñ¹é(rollback) µÇÁö ¾Ê½À´Ï´Ù. ÀÌ·¸°Ô ¸»ÇÏ´Â °ÍÀº, ºñ·Ïnextval¸¦ ½ÇÇàÇÑ Æ®·£Àè¼ÇÀÌ ÈÄ¿¡ Áß´ÜÇß´Ù°í ÇØµµ, °ªÀÌ ÀÎÃâµÇ¸é, ±×°ÍÀº »ç¿ëµÈ °ÍÀ¸·Î °£ÁÖÇÕ´Ï´Ù. Áï, Áß´ÜµÈ Æ®·£Àè¼ÇÀº, ÇÒ´çµÈ °ªÀÇ ½ÃÄö½º ³»¿¡¼­ »ç¿ëµÇÁö ¾ÊÀº"°á¼Õ"À» ³²±æ °¡´É¼ºÀÌ ÀÖ½À´Ï´Ù. setval¿¬»êÀº °áÄÚ ·Ñ¹éÇÏÁö ¾Ê½À´Ï´Ù.