ÃÑ ÆäÀÌÁö ¼ö : 3224

Àüü ÇÔ¼ö/¿ë¾î»çÀü
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ÀÇ ¼ö´Â Áß¿äÇÏÁö ¾Ê´ä´Ï´Ù!!
  • EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.