6. È®Àå SQL : ¹Ì¸®º¸±â

´ÙÀ½ÀåºÎÅÍ, ´ÙÀ½ÀÇ ³»¿ëÀ» Ãß°¡ÇÏ¿© POSTGRES SQL ÁúÀǾ È®ÀåÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀ» ¾Ë¾Æº¼ °ÍÀÌ´Ù.

6.1 È®ÀåÀº ¾î¶»°Ô ÀÛµ¿Çϳª

POSTGRES ´Â ±× ÀÛµ¿ÀÌ Ä«Å»·Î±× ¿î¿µ(catalog-driven)¹æ½ÄÀ̱⠶§¹®¿¡ È®Àå°¡´ÉÇÏ ´Ù. ¿©·¯ºÐµéÀÌ Ç¥ÁØ °ü°èÇü ½Ã½ºÅÛ¿¡ Ä£¼÷ÇÏ´Ù¸é, °ü°èÇü ½Ã½ºÅÛ¿¡¼­´Â µ¥ÀÌÅÍ º£À̽º¿Í Å×À̺í, Ä÷³ µî¿¡ °ü·ÃµÈ Á¤º¸¸¦ ½Ã½ºÅÛ Ä«Å»·Î±×¶ó°í ºÒ¸®¿ì´Â °÷¿¡ ÀúÀåÇÔÀ» Àß ¾Ë°ÍÀÌ´Ù. (¾î¶² ½Ã½ºÅÛ¿¡¼­´Â À̰ÍÀ» µ¥ÀÌÅÍ »çÀü (data dictionary) ¶ó°í ºÎ¸¥´Ù.) īŻ·Î±×´Â »ç¿ëÀÚ¿¡°Ô´Â ´Ù¸¥ °Í°ú ¸¶Âù°¡Áö·Î Ŭ·¡½º·Î Ç¥ÇöµÇ ³ª, DBMS ´Â ³»ºÎÀåºÎ¸¦ īŻ·Î±× ¾È¿¡ ÀúÀåÇÑ´Ù. ´Ù¸¥ Ç¥ÁØ °ü°èÇü ½Ã½ºÅÛ°ú POSTGRES °¡ ´Ù¸¥ Á¡Àº POSTGRES ´Â īŻ·Î±× ³»ºÎ¿¡ Á» ´õ ¸¹Àº Á¤º¸¸¦ ÀúÀåÇÑ´Ù ´Â Á¡ÀÌ´Ù. ÀúÀåµÇ´Â Á¤º¸´Â Å×À̺í°ú Ä÷³¿¡ °ü·ÃµÈ Á¤º¸ »Ó¸¸ÀÌ ¾Æ´Ï¶ó, Çü (types), ÇÔ¼ö(functions), Á¢±Ù ¹æ¹ý(access methods) µîµî¿¡ °üÇÑ Á¤º¸µµ Æ÷ÇÔµÈ ´Ù. ½Ã½ºÅÛ Ä«Å»·Î±×¿¡ °ü·ÃµÈ Ŭ·¡½º´Â »ç¿ëÀÚ°¡ º¯°æÇÒ ¼ö ÀÖÀ¸¸ç, POSTGRES ÀÇ ³»ºÎÀûÀÎ ÀÛµ¿Àº ÀÌ·¯ÇÑ Å¬·¡½º¿¡ ±â¹ÝÇÑ´Ù. ÀÌ Àǹ̴ »ç¿ëÀÚ°¡ POSTGRES ¸¦ È® ÀåÇÒ ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù. ºñ±³¸¦ ÇÏÀÚ¸é, ÀüÅëÀûÀÎ µ¥ÀÌÅͺ£À̽º ½Ã½ºÅÛÀº DBMS ³» ºÎÀÇ ÇϵåÄÚµåµÈ ÇÁ·Î½ÃÀú¸¦ º¯°æÇϰųª, DBMS °ø±ÞÀÚ°¡ Ưº°È÷ Á¦ÀÛÇÑ ¸ðµâÀ» Àû ÀçÇÔÀ¸·Î½á¸¸ È®Àå°¡´ÉÇØÁø´Ù.

POSTGRES ´Â ´Ù¸¥ ´ëºÎºÐÀÇ µ¥ÀÌÅÍ °ü¸®ÀÚ¿Í´Â ´Þ¸®, »ç¿ëÀÚ°¡ ÀÛ¼ºÇÑ Äڵ带 DBMS ³»ºÎ·Î µ¿Àû ÀûÀç(dynamic loading)¸¦ ÅëÇØ¼­ Æ÷ÇÔÇÒ ¼ö ÀÖ´Ù´Â Á¡ÀÌ´Ù. »ç¿ëÀÚ´Â ÀûÀç½Ã¿¡ »õ·Î¿î Çü(type)°ú ÇÔ¼ö°¡ Á¤ÀÇµÈ ¿ÀºêÁ§Æ® ÄÚµå ÆÄÀÏ (ÄÄÆÄÀÏµÈ .oÆÄÀÏ, ¶Ç´Â °øÀ¯ ¶óÀ̺귯¸®) ¸¦ ÁöÁ¤ÇÒ ¼ö ÀÖÀ¸¸ç, POSTGRES ´Â ¿äû ´ë·Î ÀûÀçÇÒ °ÍÀÌ´Ù. SQL·Î ÀÛ¼ºµÈ ÄÚµå´Â ´õ¿í ½±°Ô DBMS ¼­¹ö¿¡ Ãß°¡µÉ ¼ö ÀÖ´Ù.

POSTGRES ÀÇ ÀÌ·¯ÇÑ ¼öÁ¤ ´É·ÂÀº Ưº°È÷ »õ·Î¿î ÀÀ¿ëÇÁ·Î±×·¥ÀÇ ½Å¼ÓÇÑ ¿øÇüÀÛ¼º °ú ÀúÀ屸Á¶¿¡ ÀûÇÕÇÏ´Ù.

6.2 POSTGRES Çü(type) ½Ã½ºÅÛ

POSTGRES Çü ½Ã½ºÅÛÀº ¿©·¯°¡Áö ¹æ¹ýÀ¸·Î ¹«·ÂÈ­ ½Ãų ¼ö ÀÖ´Ù.

Çü(type)Àº ±âº»(base)Çü°ú º¹ÇÕ(composite)ÇüÀ¸·Î ³ª´­ ¼ö ÀÖ´Ù. ±âº»ÇüÀº int4 ¿Í °°ÀÌ, C ¿Í °°Àº ¾ð¾î¿¡¼­ »ç¿ëµÇ´Â °ÍµéÀÌ´Ù. ±âº»ÇüÀº º¸Åë "ÀÌ·ÐÀûÀÎ (abstract) µ¥ÀÌÅÍ Çü"À¸·Î ¾Ë·ÁÁø °Íµé°ú ÀÏÄ¡ÇÑ´Ù. POSTGRES ´Â »ç¿ëÀÚ°¡ Á¦°øÇÑ ¹æ¹ýÀ» ÅëÇØ ±âº»Çü À§¿¡¼­¸¸ ÀÛµ¿ÇÒ ¼ö ÀÖÀ¸¸ç, ±âº»ÇüÀÇ ÇൿÀ» »ç¿ëÀÚ°¡ ±â¼úÇÑ È®ÀåÀ¸·Î¸¸ ÀÌÇØÇÑ´Ù. º¹ÇÕÇüÀº »ç¿ëÀÚ°¡ Ŭ·¡½º¸¦ ¸¸µé¶§ »ý¼ºµÈ´Ù. 'EMP' ´Â º¹ÇÕÇüÀÇ ÇϳªÀÇ ¿¹ÀÌ´Ù. POSTGRES ´Â º¹ÇÕÇüÀ», Ŭ·¡½ºÀÇ ¸ðµç ÀνºÅϽº µéÀÌ ÀúÀåµÈ ÆÄÀÏ ³»ºÎÀÇ ÇѰ÷¿¡¸¸ ÀúÀåÇÏÁö¸¸, »ç¿ëÀÚ´Â ÁúÀǾ »ç¿ëÇÏ¿© º¹ÇÕ ÇüÀÇ ¼Ó¼ººÎºÐ¿¡¼­ ³»ºÎ¸¦ µé¿©´Ù º¼ ¼ö ÀÖ´Ù. ¾Æ¿ï·¯ ÇØ´ç ¼Ó¼º¿¡¼­ (¿¹¸¦ µéÀÚ¸é) À妽º¸¦ Á¤ÀÇÇÏ´Â ¹æ¹ýÀ¸·Î º¹±¸¸¦ ÃÖÀûÈ­ÇÒ ¼ö ÀÖ´Ù.

¾Æ¿ï·¯ POSTGRES ÀÇ ±âº»ÇüÀ» ³»Àå(built-in)Çü°ú »ç¿ëÀÚÁ¤ÀÇ(user-defined)ÇüÀ¸·Î ³ª´­¼ö ÀÖ´Ù. int4 ¿Í °°Àº ³»ÀåÇüÀº ½Ã½ºÅÛ»ó¿¡ ÄÄÆÄÀÏµÈ »óÅ·ΠÆ÷ÇԵǾî ÀÖ´Ù. »ç¿ëÀÚÁ¤ÀÇÇüÀº ¾Æ·¡¿¡¼­ ¼³¸íÇÏ´Â ¹æ¹ýÀ¸·Î »ç¿ëÀÚ°¡ ¸¸µç °ÍÀÌ´Ù.

6.3 POSTGRES ½Ã½ºÅÛ Ä«Å»·Î±×

ÀÌÁ¦, īŻ·Î±×ÀÇ ½ÇÁ¦ÀûÀÎ À±°ûÀ» »ìÆìº¸¸é¼­, ±âº» È®À强 °³³ä¿¡ ÀÔ¹®Çغ¸ÀÚ. ÀÌÀåÀ» °Ç³Ê¶Ù´Â °ÍÀº ¿©·¯ºÐ ¸¶À½ÀÌÁö¸¸, µÞºÎºÐ¿¡¼­ ¿©±â¿¡ ³ª¿À´Â Áö½ÄÀÌ ²À ÇÊ ¿äÇϱ⠶§¹®¿¡ ³ªÁßÀ» À§Çؼ­¶óµµ ÀÌ ºÎºÐÀ» Ç¥½ÃÇØµÎÀÚ.

½Ã½ºÅÛ Ä«Å»·Î±×ÀǸðµç ¸íĪÀº 'pg_' ·Î ½ÃÀÛÇÑ´Ù. ¾Æ·¡ÀÇ Å¬·¡½º´Â »ç¿ëÀÚ¿¡°Ô À¯¿ëÇÑ Á¤º¸ÀÌ´Ù. (´Ù¸¥ ½Ã½ºÅÛ Ä«Å»·Î±×µµ ¸¹ÀÌ ÀÖÀ¸³ª Á÷Á¢ ÁúÀÇ¿¡¼­ »ç¿ëÇÒ °æ¿ì´Â µå¹° °ÍÀÌ´Ù.)
 

īŻ·Î±× À̸§ ¼³¸í

pg_database

µ¥ÀÌÅͺ£À̽º

pg_class

Ŭ·¡½º

pg_attribute

Ŭ·¡½º ¼Ó¼º

pg_index

µÎ¹øÂ°(º¸Á¶) À妽º

pg_proc

ÇÁ·Î½ÃÀú (C ¿Í SQL)

pg_type

Çü (±âº»Çü°ú º¹ÇÕÇü)

pg_operator

¿ÀÆÛ·¹ÀÌÅÍ

pg_aggregate

ÁýÇÕ ¹× ÁýÇÕÇÔ¼ö

pg_am

¿¢¼¼½º ¹æ¹ý

pg_amop

¿¢¼¼½º ¹æ¹ý ¿ÀÆÛ·¹ÀÌÅÍ

pg_amproc

¿¢¼¼½º ¹æ¹ý Á¦°ø ÇÔ¼ö

pg_opclass

¿¢¼¼½º ¹æ¹ý ¿ÀÆÛ·¹ÀÌÅÍ Å¬·¡½º


·¹ÆÛ·±½º ¸Þ´º¾ó¿¡ ÀÌ·¯ÇÑ Ä«Å»·Î±×¿Í ¼Ó¼º¿¡ ´ëÇÑ Á» ´õ ÀÚ¼¼ÇÑ ¼³¸íÀÌ µé¾îÀÖ´Ù. ±×·¯³ª, ±×¸²3Àº ½Ã½ºÅÛ Ä«Å»·Î±×ÀÇ ÇÙ½É ½Çü¿Í ÀÌ·¯ÇÑ °ü°è¸¦ º¸¿©ÁÖ°í ÀÖ´Ù. ( ´Ù¸¥ ½Çü¸¦ ÂüÁ¶ÇÏÁö ¾Ê´Â ¼Ó¼ºÀº ÇØ´ç ¼Ó¼ºÀÌ ÇÁ¶óÀ̸Ӹ® ŰÀÇ ÀϺκÐÀÌ ¾Æ´Ò °æ¿ì¿¡´Â ¿©±â¿¡¼­ ³ªÅ¸³ªÁö ¾Ê´Â´Ù.)

ÀÌ µµÇ¥´Â ½ÇÁ¦·Î īŻ·Î±×ÀÇ ³»¿ëÀ» º¸±â ÀüÀ̳ª ´Ù¸¥ °Íµé°úÀÇ »óÈ£°ü°è¸¦ »ìÆìº¸±âÀü¿¡´Â ´Ù¼Ò°£ ÀÌÇØÇϱ⠾î·Á¿ï °ÍÀÌ´Ù. ÀÌ µµÇ¥¿¡¼­ Áß¿äÇÑ Á¡Àº ´ÙÀ½ °ú °°´Ù.

(1) ÀÌÈÄÀÇ ¿©·¯Àå¿¡¼­, ½Ã½ºÅÛÀ» È®ÀåÇÏ´Â µ¥ ÇÊ¿äÇÑ Á¤º¸¸¦ º¸¿©ÁÖ´Â ½Ã½ºÅÛ Ä«Å»·Î±×»ó¿¡¼­ ´Ù¾çÇÑ join ÁúÀǸ¦ º¸°Ô µÉ °ÍÀÌ´Ù. ÀÌ µµÇ¥¸¦ »ìÆìº¸¸é¼­ Á» ´õ ÀÌÇØÇÒ ¼ö ÀÖµµ·Ï ÀÌ·¯ÇÑ join ÁúÀÇ(º¸Åë ¼¼°³³ª ³×°³ÀÇ join)¸¦ Á¶±Ý ¸¸µé¾îº¸´Â °Íµµ ÁÁÀ» °ÍÀÌ´Ù. ÁúÀÇ¿¡¼­ »ç¿ëµÈ ¼Ó¼ºÀÌ ´Ù¸¥ Ŭ·¡½º¿¡¼­´Â ¿ÜºÎ ŰÀÇ ÇüŸ¦ ÀÌ·é´Ù´Â °ÍÀ» ¾Ë ¼ö ÀÖ´Ù.

(2) ´Ù¸¥ ¸¹Àº Ư¡ (Ŭ·¡½º, ¼Ó¼º, ÇÔ¼ö, Çü, ¿¢¼¼½º ¹æ¹ý µî)µéµµ ÀÌ ½ºÄɸ¶ ¿¡¼­ ¼­·Î Çù·ÂÇÑ´Ù. 'create' ¸í·ÉÀ¸·Î °£´ÜÈ÷ ÀÌ·¯ÇÑ Ä«Å»·Î±×ÀÇ ¸¹Àº ºÎºÐÀ» ¼öÁ¤ÇÒ ¼ö ÀÖ´Ù.

[±×¸² 3] POSTGRES ÀÇ ÇÙ½É ½Ã½ºÅÛ Ä«Å»·Î±×

(3) ŸÀÔ°ú ÇÁ·Î½ÃÀú (ÁÖ6)´Â ÀÌ ½ºÄɸ¶ÀÇ Áß½ÉÀÌ´Ù. °ÅÀÇ ¸ðµç īŻ·Î±×´Â ÀÌ·¯ÇÑ Å¬·¡½ºÀÇ Çϳª ¶Ç´Â ¾çÂÊ ¸ðµÎ¿¡ ÀÖ´Â ÀνºÅϽº¸¦ ÂüÁ¶ÇÑ´Ù. ¿¹¸¦ µéÀÚ¸é, POSTGRES ´Â ÀÚÁÖ ´Ù¸¥ īŻ·Î±×ÀÇ À¯ÀÏÇÑ ÀνºÅϽº¸¦ ½Äº°Çϱâ À§ÇØ Çü ½Ã±×³×ÃÄ(ÇÔ¼ö¿Í ¿ÀÆÛ·¹ÀÌÅÍÀÇ)¸¦ »ç¿ëÇÑ´Ù.

ÁÖ6) ¿©±â¼­´Â ´Ù¼Ò°£ÀÇ È£È¯¼ºÀ» À§ÇØ 'procedure(ÇÁ·Î½ÃÀú)'¿Í 'function(ÇÔ¼ö)' ¶ó´Â ´Ü¾î¸¦ »ç¿ëÇÑ´Ù.

(4) ºÐ¸íÇÑ Àǹ̸¦ °¡Áö´Â ¸¹Àº ¼Ó¼º°ú °ü°è°¡ ÀÖÀ¸³ª, ±×·¸Áö ¾ÊÀº °Í(¿¢¼¼½º ¹æ¹ý °ú ÇÔ²² µ¿ÀÛÇϴ ƯÁ¤ÇÑ °Í) µµ ¸¹´Ù. 'pg_am', 'pg_amop', 'pg_amproc', 'pg_operator', 'pg_opclass' »çÀÌÀÇ °ü°è´Â ÀÌÇØÇϱⰡ ¸Å¿ì ±î´Ù·Ó±â ¶§¹®¿¡, ±âº»ÀûÀÎ È®Àå¿¡ ´ëÇØ ¾Ë¾Æº» µÚ¿¡ Á»´õ ½Éµµ±í°Ô (types°ú operators ¿¡ ´ëÇØ ÀÚ¼¼ÇÏ°Ô ¼³¸íÇÏ´Â Àå¿¡¼­) ¾Ë¾Æº¼ °ÍÀÌ´Ù.