|
Facebook Joinc ±×·ì
Joinc QA »çÀÌÆ®
joinc´Â Firefox¿Í chrome¿¡¼ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.
¹è¿Ä÷³À» ÀÌ¿ëÇÑ ÀϹÝÀûÀÎ Å×ÀÌºí ¼³°è
ÀÛ¼ºÀÚ: ½Å±â¹è(¼ÒŸ) nonun@nate.com
Contents
- 1 ¹è¿Ä÷³
- 1.1 PostgreSQLÀÇ Data Types
- 1.2 ¹è¿Ä÷³À¸·Î Àüȯ
- 1.3 ¹è¿ Ä÷³ÀÌ ¿Ö ÇÊ¿äÇѰ¡?
- 1.3.1 Å×ÀÌºí ¼³°è Ãø¸é
- 1.3.2 Å×ÀÌºí °ü°è/ÀÇÁ¸¼º ´Ü¼øÈ
- 2 ¿¬»êÀÚ
- 2.1 ¿¬»êÀÚ ¸ñ·Ï
- 3 ÇÔ¼ö
- 3.1 ÇÔ¼ö ¸ñ·Ï
- 3.2 ºñ±³ ÇÔ¼ö
- 4 »ç¿ë¿¹
- 4.1 ±âº»ÀûÀÎ »ç¿ë¹ý
- 4.2 µ¥ÀÌÅÍ ÀÔ·Â
- 4.3 µ¥ÀÌÅÍ Á¶È¸
- 5 generic Å×ÀÌºí ¼³°è
- 5.1 ¼³°èÃø¸éÀÇ generic ÇÑ Å×ÀÌºí ¼³°è (¿¹Á¦: ÅõÇ¥)
- 5.1.1 ÀϹÝÀûÀÎ Á¤±ÔÈ¿¡ µû¸¥ ¼³°è
- 5.1.2 PostgreSQLÀÇ ¹è¿Ä÷³À» »ç¿ëÇÑ ¼³°è
- 5.2 ÇÊÀÚÀÇ Å×ÀÌºí »ç¿ë¿¹
|
1 ¹è¿Ä÷³
1.1 PostgreSQLÀÇ Data Types
| Numeric | smallint (int2), integer (int4), bigint (int8), decimal, numeric, real, double precision, serial, bigserial |
| Monetary | money (°ð »ç¶óÁö´Â µ¥ÀÌÅÍ Å¸ÀÔÀ̸ç to_char() ÇÔ¼ö »ç¿ëÀ» ±ÇÀåÇÑ´Ù.) |
| Character | character varying (varchar), character (char), text |
| Binary Data | bytea |
| Date/Time | timestamp [ (p) ] [ without time zone ], timestamp [ (p) ] with time zone, interval [ (p) ], date, time [ (p) ] [ without time zone ], time [ (p) ] with time zone (pgsqlÀÇ ½Ã°£ ÀúÀå Á¤¹Ðµµ´Â ²Ï ³ôÀº ÆíÀÌ´Ù.) |
| Boolean | boolean (bool) |
| Geometric | point, line, lseg, box, path, polygon, circle |
| Network Address | cidr (IPV6 Áö¿ø), inet (IPV6 Áö¿ø), macaddr |
| Bit String | BIT (zerofill), BIT VARYING |
| Pseudo | any, anyarray, anyelement, cstring, void µî (Á÷Á¢ Á¤ÀÇ ÇÒ ¼ö´Â ¾ø´Ù.) |
ÀÌ ¿Ü¿¡µµ »ç¿ëÀÚ°¡ Á÷Á¢ µ¥ÀÌÅÍ Å¸ÀÔÀ» ¸¸µå´Â °ÍÀÌ °¡´ÉÇÏ´Ù!! (SQL: CREATE TYPE)
1.2 ¹è¿Ä÷³À¸·Î Àüȯ
| ¿ø µ¥ÀÌÅÍ Å¸ÀÔ | ¹è¿ µ¥ÀÌÅÍ Å¸ÀÔ | ¼³¸í |
| text | text[] | text 1Â÷¿ø ¹è¿ |
| text | text[][] | text 2Â÷¿ø ¹è¿ |
| text | text[][2] | 2°³ÀÇ ¿ä¼Ò¸¦ °¡Áö´Â text¹è¿ÀÇ ¹è¿ |
| integer | integer[] | integer 1Â÷¿ø ¹è¿ |
| integer | integer[][] | integer 2Â÷¿ø ¹è¿ |
........
À§ÀÇ Ç¥¸¦ º¸½Ã´À¶ó ¼ö°íÇϼ̴Ù. ±×³É µÚ¿¡ [] ¸¦ ºÙ¿©ÁÖ´Â ±íÀÌ ¸¸ÅÀÇ ¹è¿ÀÌ »ý¼ºµÈ´Ù. ±×°Íµµ ¸ðµç µ¥ÀÌÅÍ Å¸ÀÔ¿¡ ´ëÇØ¼!
1.3 ¹è¿ Ä÷³ÀÌ ¿Ö ÇÊ¿äÇѰ¡?
1.3.1 Å×ÀÌºí ¼³°è Ãø¸é
¾Æ¹«¸® ¼³°è°¡ Áß¿äÇÏ°í µ¥ÀÌÅÍ ¼³°è°¡ Áß¿äÇÏ´ÙÁö¸¸ ´©±¸³ª ½Ç¼ö´Â Àִ¹ý. µ¥ÀÌÅÍ ¼³°èÇϰí Å×À̺íÀ» ´Ù ¸¸µé¾î ³ù´Âµ¥, ¿ä±¸»çÇ×ÀÌ ¹Ù²î°Å³ª »©¸ÔÀº Ä÷³ÀÌ ÀÖ´Ù°í °¡Á¤À» ÇÏÀÚ.
º¸Åë ÀÌ·± °æ¿ì´Â PK³ª FK ¶Ç´Â À妽º°¡ ÀâÇô¾ß ÇÒ ¸¸Å Å©¸®Æ¼ÄÃÇÑ °æ¿ì´Â ¾Æ´Ò°ÍÀÌ´Ù. (ÀÌ·± °æ¿ì¶ó¸é Å«! ½Ç¼öÀ̸ç Å×À̺íÀ» »õ·Î ¸¸µé¾î¾ß ÇϰڴÙ.)
±×·¸´Ù¸é »©¸ÔÀº µ¥ÀÌÅͰ¡ ´Ü¼øÈ÷ ÀúÀåÇÏ°í º¸¿©ÁÙ ¼ö¸¸ ÀÖ´Ù¸é µÈ´Ù°í Ä¡ÀÚ. ¶Ç´Â ½Ã½ºÅÛÀ̳ª ±â´ÉÀÌ ¾÷±×·¹ÀÌµå µÇ¸é¼ Å©¸®Æ¼ÄÃÇÏÁö ¾ÊÀº ÀúÀåÇØ¾ß ÇÒ µ¥ÀÌÅͰ¡ »õ·Î »ý°å´Ù°í Ä¡ÀÚ! ÀϹÝÀûÀÎ °æ¿ì¶ó¸é alter table µîÀÇ SQLÀ» ÀÌ¿ëÇÏ¿© Ä÷³À» Ãß°¡ÇÑ´Ù...... (¾î¶² DBA´Â Àӽà Ä÷³À» ¸î°³ ¹Ì¸® Ãß°¡Çؼ ¼³°èÇÏ´Â °æ¿ìµµ ÀÖ´Ù. ±×´ÙÀ½¿¡ view¸¸ Àß ¸¸µé¸é µÈ´Ù³ª...)
ÀÌ·± °æ¿ì ¹è¿Ä÷³ÀÌ À§·ÂÀ» ¹ßÈÖÇÑ´Ù. ¸îõ¸¸ÀÇ row°¡ µé¾îÀÖ´Â Å×ÀÌºí¿¡ alter table À» »ç¿ëÇÑ´Ù¸é ¿À·£ ½Ã°£ÀÇ Å×ÀÌºí ¶ôÀÌ °É¸±°ÍÀÌ°í ¼ºñ½º´Â ÁßÁöµÈ´Ù. »õ·Î Å×À̺íÀ» ¸¸µé°í dumpµ¥ÀÌÅͳª insert into ... select ·Î ÇÑ´Ù°í ÇØµµ ²Ï ¸¹Àº ½Ã°£ÀÌ °É¸°´Ù. ¹è¿Ä÷³Àº ¹è¿ ¿ä¼Ò Çϳª¸¦ Ãß°¡ ÀúÀåÇÏ´Â °Í¸¸À¸·Î ¸ðµç ÀÛ¾÷ÀÌ ³¡³´Ù.
1.3.2 Å×ÀÌºí °ü°è/ÀÇÁ¸¼º ´Ü¼øÈ
- 1:nÀÇ °ü°è¿¡ ÀÖ´Â Å×À̺íÀÌ 2°³ ÀÖ´Ù. ÀÚ½Ä Å×À̺íÀº ¾î¹ÌÅ×À̺íÀÇ pk¸¦ ±âÁØÀ¸·Î n°³ÀÇ ·¹Äڵ尡 ½×ÀδÙ. µÎ Å×ÀÌºí¿¡¼ µ¥ÀÌÅ͸¦ °¡Á®¿Ã ¶§ select ... from .. join µîÀ» ½á¼ °¡Á®¿À°Å³ª Äõ¸®¸¦ 2¹ø ÇØ¾ß ÇÑ´Ù.
- ¹è¿ Ä÷³Àº ÀÌ·± Á¶ÀÎÀÛ¾÷À» ¾ø¾ÖÁØ´Ù. ÇѰ³ÀÇ Å×ÀÌºí¿¡¼ ÇѰ³ÀÇ ¹è¿Ä÷³À¸·Î ÇØ°á µÇ´Â °ÍÀÌ´Ù. 1:n:n Å×À̺íÀÇ °æ¿ì¶ó¸é [][] À¸·Î 2Â÷¿ø ¹è¿À» ¸¸µé¸é µÇ´Â °ÍÀÌ´Ù.
- ¹°·Ð ¹è¿ ¿ä¼ÒÀÇ °Ë»öÀÌ ¾ø´Ù¸é ¸»ÀÌ´Ù. (integerÇüÀ̶ó¸é °Ë»öÇÒ ¼öµµ ÀÖ´Ù. gist À妽º¸¦ ½á¼..)
2 ¿¬»êÀÚ
2.1 ¿¬»êÀÚ ¸ñ·Ï
| ¿¬»êÀÚ | ¼³¸í | ¿¹Á¦ | °á°ú |
| = | equal (¹è¿ ºñ±³) | ARRAY[1.1,2.1,3.1]::int[] = ARRAY[1,2,3] | t |
| <> | not equal (¹è¿ ºñ±³) | ARRAY[1,2,3] <> ARRAY[1,2,4] | t |
| < | less than (¹è¿ ºñ±³) | ARRAY[1,2,3] < ARRAY[1,2,4] | t |
| > | greater than (¹è¿ ºñ±³) | ARRAY[1,4,3] > ARRAY[1,2,4] | t |
| <= | less than or equal (¹è¿ ºñ±³) | ARRAY[1,2,3] <= ARRAY[1,2,3] | t |
| >= | greater than or equal (¹è¿ ºñ±³) | ARRAY[1,4,3] >= ARRAY[1,4,3] | t |
| || | array-to-array concatenation (¹è¿°ú ¹è¿ ÇÕÄ¡±â) | ARRAY[1,2,3] || ARRAY[4,5,6] | {1,2,3,4,5,6} |
| || | array-to-array concatenation (¹è¿°ú ¹è¿ ÇÕÄ¡±â) | ARRAY[1,2,3] || ARRAY[[4,5,6],[7,8,9]] | {{1,2,3},{4,5,6},{7,8,9}} |
| || | element-to-array concatenation (¿ä¼Ò¿Í ¹è¿ ÇÕÄ¡±â) | 3 || ARRAY[4,5,6] | {3,4,5,6} |
| || | array-to-element concatenation (¿ä¼Ò¿Í ¹è¿ ÇÕÄ¡±â, array_push) | ARRAY[4,5,6] || 7 | {4,5,6,7} |
3 ÇÔ¼ö
3.1 ÇÔ¼ö ¸ñ·Ï
| ÇÔ¼ö | ¸®ÅÏŸÀÔ | ¼³¸í | ¿¹Á¦ | °á°ú |
| array_cat (anyarray, anyarray) | anyarray | ¾ÕÀÇ ¹è¿($1)µÚ¿¡ µÚÀÇ ¹è¿($2)À» ºÙÀδÙ. NULLÀÌ µé¾î¿À¸é NULLÀ» ¸®ÅÏÇÑ´Ù. | array_cat(ARRAY[1,2,3], ARRAY[4,5]) | {1,2,3,4,5} |
| array_append (anyarray, anyelement) | anyarray | ¾ÕÀÇ ¹è¿($1) µÚ¿¡ ¿ä¼Ò($2)¸¦ Ãß°¡ÇÑ´Ù. NULLÀÌ µé¾î¿À¸é NULLÀ» ¸®ÅÏÇÑ´Ù. | array_append(ARRAY[1,2], 3) | {1,2,3} |
| array_prepend (anyelement, anyarray) | anyarray | µÚÀÇ ¹è¿($2) ¾Õ¿¡ ¿ä¼Ò($1)¸¦ Ãß°¡ÇÑ´Ù. NULLÀÌ µé¾î¿À¸é NULLÀ» ¸®ÅÏÇÑ´Ù. | array_prepend(1, ARRAY[2,3]) | {1,2,3} |
| array_dims (anyarray) | text | ¹è¿($1)ÀÇ Å©±â¸¦ ¸®ÅÏÇÑ´Ù. NULLÀÌ µé¾î¿À¸é ¿¡·¯¸¦ ¸®ÅÏÇÑ´Ù. | array_dims(array[[1,2,3], [4,5,6]]) | [1:2][1:3] |
| array_lower (anyarray, integer) | integer | returns lower bound of the requested array dimension, returning NULL for NULL inputs | array_lower(array_prepend(0, ARRAY[1,2,3]), 1) | 0 |
| array_upper (anyarray, integer) | integer | returns upper bound of the requested array dimension, returning NULL for NULL inputs | array_upper(ARRAY[1,2,3,4], 1) | 4 |
| array_to_string (anyarray, text) | text | ¹è¿¿ä¼Ò($1)¸¦ ±¸ºÐÀÚ($2)·Î ÇÕÄ£´Ù. implode, join() °ú À¯»ç. NULLÀÌ µé¾î¿À¸é NULLÀ» ¸®ÅÏÇÑ´Ù. | array_to_string(array[1, 2, 3], '~^~') | 1~^~2~^~3 |
| string_to_array (text, text) | text[] | ¹®ÀÚ¿($1)À» ±¸ºÐÀÚ($2)·Î ³ª´²¼ ¹è¿·Î ¸®ÅÏÇÑ´Ù. explode, split() °ú À¯»ç. NULLÀÌ µé¾î¿À¸é NULLÀ» ¸®ÅÏÇÑ´Ù. | string_to_array( 'xx~^~yy~^~zz', '~^~') | {xx,yy,zz} |
3.2 ºñ±³ ÇÔ¼ö
| ÇÔ¼ö | ¿¹Á¦ | °á°ú |
| expression operator ALL (array expression) | 3 = ALL(ARRAY[1,2,3]) | f |
| expression operator ANY/SOME (array expression) | 3 = ANY(ARRAY[1,2,3]) | t |
ALL, ANY/SOME Àº ¾ÆÁÖ ºü¸¥ ºñ±³ °Ë»öÀº ¾Æ´Ï´Ù.(±×·¸´Ù°í ´À¸°°Ç ¾Æ´Ï°í..) integerÇüÀ̶ó¸é contrib/intarray ¸¦ Âü°íÇϸé gist À妽º¸¦ »ç¿ëÇÏ°Ô ÇÒ ¼ö ÀÖ´Ù. ´ë·« ºü¸£´Ù.. -_-;
4 »ç¿ë¿¹
4.1 ±âº»ÀûÀÎ »ç¿ë¹ý
nonun=# SELECT ARRAY[1,2,3]; //anyarray°¡ ¸®ÅϵȴÙ.
array
---------
{1,2,3}
(1 row)
nonun=# SELECT '{1,2,3}'::integer[]; //integer array°¡ ¸®ÅϵȴÙ
int4
---------
{1,2,3}
(1 row)
4.2 µ¥ÀÌÅÍ ÀÔ·Â
nonun=# CREATE TABLE test(
nonun(# a text[],
nonun(# b integer[],
nonun(# c boolean[]
nonun(# );
CREATE TABLE
nonun=# INSERT INTO test VALUES ('{text1, text2, "text3~ ^^"}','{1, 3, 4, 6, 8}','{true, false, true, true}');
INSERT 222122 1
nonun=# INSERT INTO test VALUES (ARRAY['text1', 'text2', 'text3~ ^^'],ARRAY[1, 3, 4, 6, 8],ARRAY[true, false, true, true]);
INSERT 222123 1
" °ú ' ÀÇ ¾²ÀÓÀ» ÁÖÀÇÇϼ¼¿ä..
4.3 µ¥ÀÌÅÍ Á¶È¸
nonun=# SELECT * from test;
a | b | c
---------------------------+-------------+-----------
{text1,text2,"text3~ ^^"} | {1,3,4,6,8} | {t,f,t,t}
{text1,text2,"text3~ ^^"} | {1,3,4,6,8} | {t,f,t,t}
(2 rows)
nonun=# SELECT a[1] from test;
a
-------
text1
text1
(2 rows)
nonun=# SELECT a[1:2] from test;
a
---------------
{text1,text2}
{text1,text2}
(2 rows)
nonun=# SELECT a[1:3] from test;
a
---------------------------
{text1,text2,"text3~ ^^"}
{text1,text2,"text3~ ^^"}
(2 rows)
nonun=# SELECT a[3] from test;
a
-----------
text3~ ^^
text3~ ^^
(2 rows)
5 generic Å×ÀÌºí ¼³°è
5.1 ¼³°èÃø¸éÀÇ generic ÇÑ Å×ÀÌºí ¼³°è (¿¹Á¦: ÅõÇ¥)
ÅõÇ¥ÀÇ Æ¯¼ºÀº Áú¹®ÀÌ ¸î°³°¡ ÀԷµÉÁö ¾Ë ¼ö ¾ø´Ù´Â ´ÜÁ¡ÀÌ ÀÖ´Ù.
5.1.1 ÀϹÝÀûÀÎ Á¤±ÔÈ¿¡ µû¸¥ ¼³°è
ÀϹÝÀûÀÎ ¸ÖƼÇÑ(?) ÅõÇ¥ Å×À̺íÀº ÀÌ·¸´Ù.
¦£¦¡¦¡¦¡¦¡¦¤ ¦£¦¡¦¡¦¡¦¡¦¤
¦¢ ÅõÇ¥ ¦§¦¡¦¡¦¡¢º ¦© ÅõÇ¥ ¦¢ ÅõÇ¥ Áú¹® row Çϳª¿¡ ´äº¯ row°¡ n°³ ÀÌ´Ù.
¦¢ Áú¹® ¦¢ ¦¢ ´äº¯ ¦¢ ÅõÇ¥ ´äº¯ Å×ÀÌºí¿¡´Â Áú¹®ÀÇ Á¡¼ö°¡ °°ÀÌ ÀúÀåµÈ´Ù.
¦¦¦¡¦¡¦¡¦¡¦¥ ¦¦¦¡¦¡¦¡¦¡¦¥
À§ ±×¸²°ú °°ÀÌ 2°³ÀÇ Å×À̺íÀÌ ÇÊ¿äÇÏ´Ù.
ÅõÇ¥Áú¹®
| Ä÷³ | PK | FK | À妽º | ¼³¸í |
| Áú¹®ÀÇ ID | ¡î | | ¡î | |
| Áú¹® | | | | |
ÅõÇ¥´äº¯
| Ä÷³ | PK | FK | À妽º | ¼³¸í |
| ´äº¯ÀÇ ID | ¡î | | ¡î | |
| Áú¹®ÀÇ ID | | ¡î | ¡î | ÅõÇ¥Áú¹®ÀÇ PK |
| ´äº¯³»¿ë | | | | |
| Á¡¼ö | | | | |
..........
5.1.2 PostgreSQLÀÇ ¹è¿Ä÷³À» »ç¿ëÇÑ ¼³°è
ÀÌÁ¦ PostgreSQLÀÇ ¹è¿Ä÷³À» ½á¼ ¹Ù²ãº¸ÀÚ..
| Ä÷³ | PK | FK | À妽º | ¼³¸í |
| Áú¹®ÀÇ ID | ¡î | | ¡î | |
| Áú¹® | | | | |
| ´äº¯ | | | | text[]·Î text 1Â÷¿ø ¹è¿·Î ÀúÀåÇÑ´Ù. |
| Á¡¼ö | | | | integer[]·Î Á¤¼öÇü 1Â÷¿ø ¹è¿·Î ÀúÀåÇÑ´Ù. |
ÀúÀåµÇ´Â Å©±â³ª À妽ºÀÇ Å©±â°¡ ÈξÀ ÁÙ¾îµé¾ú´Ù..........
5.2 ÇÊÀÚÀÇ Å×ÀÌºí »ç¿ë¿¹
| Ä÷³ | Å×ÀÌÅÍ Å¸ÀÔ |
| id | bigserial |
| text_array | text[] |
| integer_array | integer[] |
| boolean_array | bool[] |
ÀÌ Å×À̺í Çϳª·Î ´ëºÎºÐÀÇ µ¥ÀÌÅÍ Å¸ÀÔÀ» ó¸®ÇÒ ¼ö ÀÖ´Ù. join°ú view Á¶ÇÕÀ¸·Î ¿©·¯°¡Áö ¸ð¾çÀÇ °á°ú¸¦ °¡Á®°¥ ¼ö ÀÖ´Ù.
¼Óµµ°¡ ´À·ÁÁú ²¨¶ó±¸¿ä? ORDBMS¶ó°í ÀÚóÇÏ´Â pgsql¿¡¼ rowÀÇ ¼ö´Â Áß¿äÇÏÁö ¾Ê´ä´Ï´Ù!!
|
|