ÀÌÁ¦ ±âº»ÀûÀÎ µ¥ÀÌÅÍ °ü¸®¿Í´Â ±¸º°µÇ´Â POSTGRES ÀÇ Æ¯Â¡¿¡ ´ëÇØ¼ ³íÀÇÇØ º¼ °ÍÀÌ´Ù. ÀÌ·¯ÇÑ Æ¯Â¡¿¡´Â »ó¼Ó, ½Ã°£ ¿©Çà, ºñ¿øÀÚÈ µ¥ÀÌÅÍ °ªµé (array- ¿Í set-valued ¼Ó¼º) µîÀÌ ÀÖ´Ù. ÀÌÀå¿¡¼ ³ª¿À´Â ¿¹´Â ±³Àç(tutorial) µð·ºÅ丮¿¡ 'advance.sql' ¿¡ ³ª¿ÍÀÖ´Ù. (À̰ÍÀ» ¾î¶»°Ô »ç¿ëÇÏ´Â Áö´Â ¾ÕÀåÀÇ ¼·Ð ºÎºÐÀ» ÂüÁ¶ÇÏÀÚ.)
µÎ°³ÀÇ Å¬·¡½º¸¦ ¸¸µé¾î º¸ÀÚ. 'capitals' Ŭ·¡½º´Â ÇϳªÀÇ µµ½Ã, ÁÖÀÇ ¼öµµ ¸¦ Æ÷ÇÔÇÑ´Ù. ÀÚ¿¬½º·´°Ô, 'capitals' Ŭ·¡½º´Â 'cities' ·ÎºÎÅÍ »ó¼Ó¹Þ¾Æ¾ß ÇÑ ´Ù.
CREATE TABLE cities (
name text,
population float,
altitude int -- (in ft)
);
CREATE TABLE capitals (
state char2
) INHERITS (cities);
ÀÌ °æ¿ì¿¡, 'capitals' ÀÇ ÀνºÅϽº´Â ±×ÀÇ ºÎ¸ð·ÎºÎÅÍ ¸ðµç ¼Ó¼º ('name', 'population', 'altitude') ¸¦ »ó¼Ó¹Þ´Â´Ù. ¼Ó¼º 'name' ÀÇ Å¸ÀÔÀº 'text' ÀÌ´Ù. 'text' ´Â °¡º¯ ±æÀÌÀÇ ¾Æ½ºÅ° ¹®ÀÚ¿¿¡ »ç¿ëµÇ´Â POSTGRES ¿¡ ³»ÀåµÇ¾î Àִ ŸÀÔ ÀÌ´Ù. ¼Ó¼º 'population' ÀÇ Å¸ÀÔÀº 'float4' À̸ç, ÀÌ Å¸ÀÔÀº ´õºí Á¤¹ÐµµÀÇ ºÎµ¿¼Ò¼ö¿¡ »ç¿ëµÇ´Â POSTGRES ³»ÀåÇüÀÌ´Ù. ÁÖÀÇ ¼öµµ(state capitals)´Â ¶Ç´Ù¸¥ ¼Ó¼ºÀ¸·Î ÁÖ¸¦ ³ªÅ¸³»´Â 'state' ¸¦ °¡Áö°í ÀÖ´Ù. POSTGRES ¿¡¼, ÇϳªÀÇ Å¬·¡ ½º´Â 0°³ ÀÌ»óÀÇ Å¬·¡½º·ÎºÎÅÍ »ó¼Ó¹ÞÀ» ¼ö ÀÖ°í,(ÁÖ4)ÇϳªÀÇ ÁúÀÇ´Â ¾î¶² Ŭ·¡½ºÀÇ ¸ðµç ÀνºÅϽº³ª À̰Ͱú ÇÔ²² ÀνºÅϽºÀÇ ÀÚ¼Õ±îÁö ÂüÁ¶ÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¸é, ¾Æ·¡ÀÇ ÁúÀÇ´Â °íµµ 500 ÇÇÆ® º¸´Ù ³ôÀº °÷¿¡ ÀÖ´Â µµ½Ã¸¦ °Ë»öÇÏ´Â °ÍÀÌ´Ù.
ÁÖ4) »ó¼Óü°è´Â ¹Ù·Î acyclic ±×·¡ÇÁÀÌ´Ù.
SELECT name, altitude FROM cities WHERE altitude > 500; name |altitude ---------+-------- Las Vegas| 2174 Mariposa | 1953 (2 rows)
500 ÇÇÆ® ÀÌ»ó¿¡ ÀÖ´Â ¸ðµç µµ½Ã¸¦ ÁÖÀÇ ¼öµµ¸¦ Æ÷ÇÔÇÏ¿© ã°íÀÚ ÇÑ´Ù¸é, ÇØ´ç ÁúÀÇ´Â ´ÙÀ½°ú °°´Ù.
SELECT c.name, c.altitude FROM cities* c WHERE c.altitude > 500;
°á°ú´Â ´ÙÀ½°ú °°´Ù.
name |altitude ---------+-------- Las Vegas| 2174 Mariposa | 1953 Madison | 845 (3 rows)
'cities' ´ÙÀ½ÀÇ '*' ´Â 'cities' ¿Í 'cities' ¿¡¼ »ó¼Ó¹ÞÀº ¸ðµç Ŭ·¡½º¸¦ ³ªÅ¸ ³½´Ù. ÀÌ¹Ì ¾Õ¿¡¼ »ìÆìº» ¸¹Àº ¸í·É - select, update, delete - Àº 'alter' ¸í·É°ú À¯»çÇÑ ÀÌ·¯ÇÑ '*' Ç¥±â¸¦ Á¦°øÇÑ´Ù.
POSTGRES ´Â ½Ã°£ ¿©Çà¿¡ ´ëÇÑ Ç¥±â¹ýÀ» Áö¿øÇÑ´Ù. ÀÌ·¯ÇÑ Æ¯Â¡Àº »ç¿ëÀÚ·Î ÇÏ¿©±Ý ¿ª»çÀûÀÎ ÁúÀǸ¦ ÇÒ ¼ö ÀÖµµ·Ï ÇÑ´Ù. ¿¹¸¦ µé¸é, Mariposa µµ½ÃÀÇ ÇöÀçÀÇ Àα¸¸¦ °Ë»öÇÏ·Á¸é, ´ÙÀ½°ú °°ÀÌ »ç¿ëÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.
SELECT * FROM cities WHERE name = 'Mariposa'; name |population|altitude --------+----------+-------- Mariposa| 1320| 1953 (1 row)
POSTGRES ´Â ÀÚµ¿ÀûÀ¸·Î ÇöÀç ½ËÁ¡¿¡¼ÀÇ À¯È¿ÇÑ Mariposa µµ½ÃÀÇ ·¹Äڵ带 ãÀ» °ÍÀÌ´Ù. ¿©±â¿¡¼ ½Ã°£¹üÀ§¸¦ ºÎ¿©ÇÒ ¼ö ÀÖ´Ù. Mariposa µµ½ÃÀÇ °ú°ÅÀÇ Àα¸¸¦ ¾Ë¾Æº¸·Á¸é,´ÙÀ½°ú °°ÀÌ ÁúÀÇÇÏ¸é µÈ´Ù.
SELECT name, population FROM cities['epoch', 'now'] WHERE name = 'Mariposa';
'epoch' ´Â ½Ã½ºÅÛ ½Ã°£ÀÇ ½ÃÀÛ½ËÁ¡À» ³ªÅ¸³½´Ù. (ÁÖ5) Áö±Ý±îÁöÀÇ ¸ðµç ¿¹Á¦¸¦ ½ÇÇà½ÃÄ×´Ù¸é, ÁúÀÇÀÇ °á°ú´Â ´ÙÀ½°ú °°À» °ÍÀÌ´Ù.
ÁÖ5) UNIX ½Ã½ºÅÛ¿¡¼´Â, ÀÌ ½ËÁ¡Àº Ç×»ó1970 GMT 1¿ù 1ÀÏ 00½ÃÀÌ´Ù.
name |population --------+---------- Mariposa| 1200 Mariposa| 1320 (2 row)
½Ã°£¹üÀ§¿¡¼ µðÆúÆ® ½ÃÀÛÁöÁ¡Àº ½Ã½ºÅÛÀÌ ½Ã°£À» Ç¥½ÃÇÒ ¼ö ÀÖ´Â ÃÖÃÊÀÇ ½Ã°¢À̸ç, µðÆúÆ® ³¡ÁöÁ¡Àº ÇöÀç ½Ã°¢ÀÌ´Ù. µû¶ó¼, À§ÀÇ ½Ã°£¹üÀ§´Â "[,]." ¿Í °°ÀÌ ´ÜÃàÇÏ¿© »ç¿ëÇÒ ¼ö ÀÖ´Ù.
°ü°èÇü ¸ðµ¨¿¡¼ÀÇ °ü°èÀÇ ¼Ó¼ºÀº º¸Åë ¿øÀÚÈ(atomic)µÈ´Ù´Â °ÍÀÌ´Ù. POSTGRES ¿¡´Â ÀÌ·¯ÇÑ Á¦ÇÑÀÌ ¾ø´Ù. ¼Ó¼ºÀº ÁúÀǾî·Î Á¢±ÙÇÒ ¼ö ÀÖ´Â º¸Á¶°ª(sub-values) À» °¡Áú ¼ö ÀÖ´Ù. ¿¹¸¦ µé¸é, ÇϳªÀÇ ¼Ó¼ºÀ» ±âº» ŸÀÔÀÇ ¹è¿·Î ¸¸µé ¼ö ÀÖ ´Ù.
POSTGRES ¿¡¼´Â ÇϳªÀÇ ÀνºÅϽºÀÇ ¼Ó¼ºÀº °íÁ¤±æÀÌ ¶Ç´Â °¡º¯±æÀÌÀÇ ´ÙÂ÷¿ø ¹è¿ ·Î Á¤ÀÇ µÉ ¼ö ÀÖ´Ù. ¾î¶°ÇÑ ±âº»ÇüÀ̳ª »ç¿ëÀÚ Á¤ÀÇÇüÀÇ ¹è¿µµ ¸¸µé ¼ö ÀÖ´Ù. ½Ç·Ê¸¦ º¸À̱â À§ÇØ, ¿©±â¼´Â ¸ÕÀú ±âº»ÇüÀÇ ¹è¿À» »ç¿ëÇÏ¿© Ŭ·¡½º¸¦ ¸¸µé¾î º¸ °Ú´Ù.
CREATE TABLE SAL_EMP (
name text,
pay_by_quarter int4[],
schedule char16[][]
);
À§ÀÇ ÁúÀÇ´Â SAL_EMP ·Î ºÒ¸®¿ì´Â Ŭ·¡½º¸¦, text ¹®ÀÚ¿('name')°ú int4ÀÇ 1Â÷¿ø ¹è¿('pay_by_quarter'), ±×¸®°í char16 ÀÇ 2Â÷¿ø ¹è¿('schedule')ÀÇ ±¸¼ºÀ¸·Î »ý¼ºÇÑ´Ù. 'pay_by_quarter' ´Â »ç¿øµé¿¡°Ô Áö±ÞµÇ´Â 4µîºÐµÈ ±Þ·áÀ̸ç, 'schedule' ´Â »ç¿øµéÀÇ ÁÖ°£°èȹÀÌ´Ù. ÀÌÁ¦ µ¥ÀÌÅ͸¦ Á¶±Ý »ðÀÔÇØº¸ÀÚ. ¹è¿¿¡ µ¥ÀÌÅ͸¦ Ãß°¡ÇÒ ¶§´Â, ÇØ´ç°ªÀº Áß°ýÈ£ »çÀÌ¿¡ ¿Í¾ß Çϰí, ÄÞ¸¶¿¡ ÀÇÇØ ±¸ºÐµÈ´Ù.
C ¸¦ ¾Ë°í ÀÖ´Ù¸é, ±¸Á¶Ã¼ÀÇ ÃʱâÈ ¹®¹ý°ú º°·Î ´Ù¸£Áö ¾Ê´Ù´Â °ÍÀ» ¾Ë ¼ö ÀÖÀ» °ÍÀÌ´Ù.
INSERT INTO SAL_EMP
VALUES ('Bill',
'{10000, 10000, 10000, 10000}',
'{{"meeting", "lunch"}, {}}');
INSERT INTO SAL_EMP
VALUES ('Carol',
'{20000, 25000, 25000, 25000}',
'{{"talk", "consult"}, {"meeting"}}');
POSTGRES ¿¡¼´Â ±âº»ÀûÀ¸·Î ¹è¿¿¡¼ ¹øÈ£¸¦ ºÙÀÏ ¶§ 1ºÎÅÍ ½ÃÀÛÇÑ´Ù. n °³ÀÇ ¿ø¼Ò¸¦ °¡Áø ¹è¿Àº ¹è¿[1] ¿¡¼ ½ÃÀÛÇÏ¿© ¹è¿[n]À¸·Î ³¡³´Ù.
ÀÌÁ¦, SAL_EMP ¿¡ ¸î°³ÀÇ ÁúÀǸ¦ ´øÁ®º¸ÀÚ. ¸ÕÀú, ¾î´À ÇÑ ½ËÁ¡¿¡¼ ¹è¿Áß ÇϳªÀÇ ¿ø¼Ò¿¡ Á¢±ÙÇÏ´Â ¹æ¹ýÀ» ¾Ë¾Æº¸ÀÚ. ´ÙÀ½ÀÇ ÁúÀÇ´Â »ç¿øµé Áß ±Þ·áÀÇ µÎ¹øÂ° ¹è´ç±ÝÀÌ º¯°æµÈ »ç¶÷À» °Ë»öÇÑ´Ù.
SELECT name
FROM SAL_EMP
WHERE SAL_EMP.pay_by_quarter[1] <>
SAL_EMP.pay_by_quarter[2];
name
-----
Carol
(1 row)
´ÙÀ½ÀÇ ÁúÀÇ´Â ¸ðµç »ç¿øµéÀÇ ±Þ·áÁß ¼¼¹øÂ° ¹è´ç±ÝÀ» º¸¿©ÁØ´Ù.
SELECT SAL_EMP.pay_by_quarter[3] FROM SAL_EMP;
pay_by_quarter
--------------
10000
25000
(2 rows)
POSTGRES ¿¡¼´Â ¹è¿ÀÇ Á¶°¢(slices), ¶Ç´Â º¸Á¶¹è¿(subarrays)¿¡ Á¢±ÙÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½ÀÇ ÁúÀÇ´Â Bill ÀÇ ÁÖ°£°èȹ¿¡¼ óÀ½ µÎ¹øÂ°³¯ÀÇ Ã¹¹øÂ° ¾ÆÀÌÅÛÀ» °Ë»öÇÑ´Ù.
SELECT SAL_EMP.schedule[1:2][1:1]
FROM SAL_EMP
WHERE SAL_EMP.name = 'Bill';
schedule
------------------
{{"meeting"},{""}}
(1 row)