33.2. PostgreSQL ŸÀÔ ½Ã½ºÅÛ

PostgreSQL µ¥ÀÌÅÍ Å¸ÀÔÀº ±âº»Çü°ú º¹ÇÕÇü, µµ¸ÞÀÎ ±×¸®°í À¯»çÀÚ·áÇüÀÔ´Ï´Ù.

33.2.1. ±âº»Çü

±âº»ÇüÀº int4¿Í °°ÀÌ, SQL¾ð¾îº¸´Ù ³·Àº ¼öÁØÀÇ ¾ð¾î¿¡¼­ »ç¿ëµÇ´Â °ÍÀÔ´Ï´Ù. (´ëü·Î C¿Í °°Àº Àú¼öÁØ ¾ð¾î) ÀϹÝÀûÀ¸·Î ±âº»ÇüÀº Á¾Á¾ Ãß»óÀû µ¥ÀÌÅÍÇüÀ¸·Î ¾Ë·ÁÁø °Í°ú ÀÏÄ¡ÇÕ´Ï´Ù. PostgreSQL´Â »ç¿ëÀÚ¿¡ ÀÇÇØ Á¦°øµÈ ±â´É¸¦ ÅëÇØ ±âº»Çü »ó¿¡¼­¸¸ ÀÛµ¿ÇÒ ¼ö ÀÖÀ¸¸ç, »ç¿ëÀÚ°¡ ±â¼úÇÑ ±âº»ÇüÀ» È®ÀåÀ¸·Î½á ±âº»ÇüÀÇ ÇൿÀ» ÀÌÇØÇØ¾ß ÇÕ´Ï´Ù. ±âº»ÇüÀº Á»´õ ¼¼ºÎÀûÀ¸·Î ½ºÄ®¶ó(scalar)¿Í ¹è¿­ÇüÀ¸·Î ³ª´µ¾îÁý´Ï´Ù. °¢°¢ÀÇ ½ºÄ®¶óÇü¿¡ ´ëÀÀÇÏ´Â ¹è¿­ÇüÀº ÀÚµ¿ÀûÀ¸·Î »ý¼ºµÇ¸ç, ¹è¿­ÇüÀº ½ºÄ®¶óÇüÀÇ °¡º¯ Å©±â ¹è¿­À» º¸À¯ÇÒ ¼ö ÀÖ½À´Ï´Ù.

33.2.2. º¹ÇÕÇü

»ç¿ëÀÚ°¡ Å×À̺íÀ» »ý¼ºÇÏ°Ô µÇ¸é, º¹ÇÕÇü ¶Ç´Â Çà(row)ÇüÀÌ »ý¼ºµË´Ï´Ù. CREATE TYPE ¸¦ Á¤ÀÇÇϱâ À§ÇØ °ü·ÃÇÑ Å×À̺íÀ» °¡ÁöÁö ¾Ê´Â "µ¶¸³ÇüÀÇ"º¹ÇÕÇüÀ» »ç¿ëÇÏ´Â °Íµµ °¡´ÉÇÕ´Ï´Ù. º¹ÇÕÇüÀº °ü·ÃµÈ Çʵå¸íÀ» °¡Áö´Â ±âº»ÇüÀÇ ´Ü¼øÇÑ ¸®½ºÆ®ÀÔ´Ï´Ù. º¹ÇÕÇüÀÇ °ªÀº, Çà ȤÀº ÇʵåÄ¡ÀÇ ·¹ÄÚµåÀÔ´Ï´Ù. »ç¿ëÀÚ´Â SQLÄõ¸®¸¦ ÅëÇØ ±¸¼º Çʵ忡 Á¢±ÙÇÒ ¼ö ÀÖ½À´Ï´Ù. º¹ÇÕÇü¿¡ °üÇÑ ÀÚ¼¼ÇÑ Á¤º¸´Â Section 8.11¸¦ ÂüÁ¶ÇØ Áֽʽÿä.

33.2.3. µµ¸ÞÀÎ

µµ¸ÞÀÎÀº ƯÁ¤ÇÑ ±âº»ÇüÀ» ±â¹ÝÀ¸·Î Çϸç, ¿©·¯°¡Áö ¸ñÀûÀ» À§ÇØ ±× ±âº»Çü°ú ȣȯÀÌ °¡´ÉÇÕ´Ï´Ù. ±×·¯³ª, µµ¸ÞÀÎÀº ÀáÀçÀûÀÎ ±âº»ÇüÀÌ Çã°¡µÇ´Â ¹üÀ§¿¡¼­ À¯È¿ °ªÀ» ÇÑÁ¤ÇÏ´Â Á¦¾àÀ» °¡Áú ¼ö ÀÖ½À´Ï´Ù.

µµ¸ÞÀÎÀº SQL Ä¿¸àµå CREATE DOMAIN ¸¦ »ç¿ëÇØ »ý¼ºµË´Ï´Ù. µµ¸ÞÀÎÀÇ »ý¼º°ú »ç¿ëÀº º» Àå¿¡¼­ ¼³¸íÇÏÁö ¾Ê°Ú½À´Ï´Ù.

33.2.4. À¯»çÀÚ·áÇü

Ưº°ÇÑ ¸ñÀûÀ» À§ÇØ »ç¿ëµÇ´Â ¸î °³ÀÇ "À¯»çÀÚ·áÇü"ÀÌ ÀÖ½À´Ï´Ù. À¯»çÀÚ·áÇüÀº Å×À̺íÀÇ Ä÷³ÀÌÀ̳ª º¹ÇÕÇüÀÇ ¼Ó¼ºÀ¸·Î Ç¥ÇöµÇÁö ¾ÊÁö¸¸, Àμö³ª ÇÔ¼öÀÇ °á°ú ŸÀÔÀ» ¼±¾ðÇÒ ¶§ »ç¿ëµÇ¾îÁý´Ï´Ù. À̴ ŸÀÔ ½Ã½ºÅÛ ³»¿¡¼­ Ưº°ÇÑ ÇÔ¼ö Ŭ·¡½º¸¦ ±¸º°Çϱâ À§ÇÑ ¸ÅÄ¿´ÏÁòÀ» Á¦°øÇÕ´Ï´Ù. ±âÁ¸ÀÇ À¯»çÇüÀº Table 8-20¿¡ ¿­°ÅµÇ¾î ÀÖ½À´Ï´Ù.

33.2.5. ´ÙÇü(Polymorphic) ŸÀÔ

Ưº°ÇÑ ¸ñÀûÀ» °¡Áö´Â µÎ°¡Áö À¯»çÀÚ·áÇüÀ¸·Î´Â anyelement¿Í anyarray°¡ ÀÖ½À´Ï´Ù. ÀÌ µÎ ÀÚ·áÇüÀº ÅëÇÕÇØ¼­ ´ÙÇü ŸÀÔÀ¸·Î ºÒ¸³´Ï´Ù. ÀÌ Å¸ÀÔÀ» »ç¿ëÇÑ´Ù°í ¸ðµç ÇÔ¼ö´Â ´ÙÇü ÇÔ¼öÀ¸·Î ºÒ¸®°Ô µË´Ï´Ù. ´ÙÇü ÇÔ¼ö´Â ´Ù¾çÇÑ µ¥ÀÌÅÍ Å¸ÀÔ¿¡¼­ ½ÇÇàµË´Ï´Ù. µ¥ÀÌÅÍ Å¸ÀÔÀº ½ÇÁ¦ ƯÁ¤ È£Ãâ·Î °Ç³×¹ÞÀº µ¥ÀÌÅÍ Å¸ÀÔ¿¡ ÀÇÇØ °áÁ¤µÇ¾î Áý´Ï´Ù.

´ÙÇü ÀÎÀÚ¿Í °á°ú´Â ¼­·Î °ü°èµÇ¾î ÀÖ°í, Äõ¸®°¡ ´ÙÇü ÇÔ¼ö¸¦ È£ÃâÇÒ ¶§, ƯÁ¤ µ¥ÀÌÅÍ Å¸ÀÔÀÌ °áÁ¤µË´Ï´Ù. anyelement·Î¼­ ¼±¾ðµÈ °¢°¢ÀÇ Æ÷Áö¼Ç(ÀÎÀÚ ¶Ç´Â ¹Ýȯ°ª)¿¡¼­´Â ½ÇÁ¦ÀûÀÎ ¾î¶² ƯÁ¤ÇÑ µ¥ÀÌÅÍ Å¸ÀÔÀÌ¶óµµ ÁöÁ¤ÇÒ ¼ö ÀÖÁö¸¸, À̵éÀº ¸ðµÎ ¾î¶°ÇÑ È£Ãâ¿¡ ´ëÇØ¼­¶óµµ µ¿ÀÏÇÑ ½ÇÁú ŸÀÔÀÌ¿©¾ß ÇÕ´Ï´Ù. anyarray·Î¼­ ¼±¾ðµÈ Æ÷Áö¼Ç¿¡¼­´Â ÀÓÀÇÀÇ ¹è¿­ µ¥ÀÌÅÍ Å¸ÀÔÀ» °¡Áú ¼ö ÀÖÀ¸³ª, ÀüºÎ °°Àº ŸÀÔÀÌ¿©¾ß¸¸ ÇÕ´Ï´Ù. anyarray¿Í anyelementÀ¸·Î ¼±¾ðµÈ À§Ä¡°¡ ÀÖ´Ù¸é, anyarray À§Ä¡ ³»ÀÇ ½ÇÁú ¹è¿­ ŸÀÔÀº ¸ðµç ¿ä¼ÒµéÀÌ anyelementÀ§Ä¡ ³»¿¡ Á¸ÀçÇÏ´Â µ¿ÀÏÇÑ Å¸ÀÔÀ̾î¾ß ÇÕ´Ï´Ù.

ÀÌ¿Í °°ÀÌ, ÇÑ °³ ÀÌ»óÀÇ ÀÎÀÚ Æ÷Áö¼ÇÀÌ ´ÙÇü ŸÀÔÀ¸·Î ¼±¾ðµÇ¸é, °á°úÀûÀ¸·Î ½ÇÁ¦ ÀÎÀÚ Å¸ÀÔÀÇ Æ¯Á¤ °áÇÕ¸¸ÀÌ Çã¶ôµË´Ï´Ù. ¿¹¸¦ µé¸é, equal(anyelement, anyelement)À¸·Î ¼±¾ðµÈ ÇÔ¼ö´Â °°Àº µ¥ÀÌÅÍ Å¸ÀÔÀÎ ÀÌ»ó, µÎ °³ÀÇ ÀÔ·Â °ªÀ» °¡Áö°Ô µÉ °ÍÀÔ´Ï´Ù.

ÇÔ¼öÀÇ ¹Ýȯ°ªÀ» ´ÙÇü ŸÀÔÀ¸·Î ¼±¾ðÇÒ ¶§, Àû¾îµµ ÇÑ °³ÀÇ ÀÎÀÚ Æ÷Áö¼Ç ¶ÇÇÑ ´ÙÇüÀ̾î¾ß ÇÕ´Ï´Ù. ±×¸®°í ÀÎÀڷμ­ ÁÖ¾îÁø ½ÇÁ¦ µ¥ÀÌÅÍ Å¸ÀÔÀº ±× È£ÃâÀÇ ½ÇÁ¦ °á°ú ŸÀÔÀ» °áÁ¤ÇÕ´Ï´Ù. ¿¹¸¦ µé¾î, ¹è¿­ ÷ÀÚ ¸ÅÄ¿´ÏÁòÀÌ ¾ø¾úÀ» °æ¿ì, subscript(anyarray, integer) returns anyelement¸¦ ÀÌ¿ëÇÏ¿© ÷ÀÚ ¸ÅÄ¿´ÏÁòÀ» ½ÇÇàÇÏ´Â ÇÔ¼ö¸¦ Á¤ÀÇÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ ¼±¾ðÀº ½ÇÁúÀûÀ¸·Î ÃÖÃÊÀÇ ÀÎÀÚ°¡ ¹è¿­ÇüÀÌ µÇ°í, ÆÄ¼­(parser)°¡ ÃÖÃÊÀÇ ÀÎÀÚ Å¸ÀÔÀ¸·ÎºÎÅÍ Á¤È®ÇÑ °á°ú ŸÀÔÀ» Ãß·ÐÇϵµ·Ï ÇÕ´Ï´Ù.