°ø°³¿ë µ¥ÀÌÅͺ£À̽º ¼­¹ö PostgreSQL (3)

Çѵ¿ÈÆ (ÇÏÀÌÅÚ ¸®´ª½ºµ¿ ´ëÇ¥½Ã»ð)

     

 

1. µé¾î°¡¸é¼­

    Áö³­ ½Ã°£¿¡´Â PostgreSQLÀÇ ¼³Ä¡¿Í °£´ÜÇÑ Å×½ºÆ®¿¡ À̾î, PostgreSQLÀÇ »ç¿ëÀ» µµ¿ÍÁÖ´Â ¿ÜºÎ ¸í·É¾î¸¦ »ìÆ캸¾Ò´Ù. À̹ø ½Ã°£¿¡´Â PostgreSQL¿¡¼­ Á¦°øÇÏ´Â µ¥ÀÌÅÍ Å¸ÀÔ°ú µ¥ÀÌÅͺ£À̽º ÁúÀǾîÀÎ SQL¿¡ ´ëÇؼ­ »ìÆ캸°Ú´Ù.

    PostgreSQL¿¡¼­ÀÇ µ¥ÀÌÅÍ Å¸ÀÔÀº »ó´çÈ÷ ¸¹°í ÆøÀÌ ³Ð´Ù. »ý°¢µµ ÇÏÁö ¸øÇÑ µíÇÑ µ¥ÀÌÅÍ Å¸ÀÔµéÀÌ ÀÖÀ¸¸ç, °øÇпëÀ̳ª º¹ÀâÇÑ ±âÇÏÇÐ ¿ëµµ·Î »ç¿ëµÉ ¹ýÇÑ µ¥ÀÌÅÍ Å¸ÀԵ鵵 Áغñ¿Ü¾î ÀÖ´Ù. ¹°·Ð, ÀÌ·¯ÇÑ µ¥ÀÌÅÍ Å¸ÀÔÁ¶Â÷µµ »ç¿ëÀÚ ¸¶À½´ë·Î Á¤ÀÇÇÏ¿© »ç¿ëÇÒ ¼ö ÀÖ´Ù´Â ÀåÁ¡ÀÌ ÀÖ´Ù.
    ±×¸®°í SQL ÁúÀǾ ¸¶Âù°¡Áö·Î È®À强ÀÌ ¶Ù¾î³ª´Ù. »ç½Ç, PostgreSQL 6.2¿¡¼­ »õ·Ó°Ô Áö¿øÇÏ´Â Çʵå Á¦ÇÑ, º¸Ãæ ±â´Éµé°ú Æ®¸®°Å ±â´ÉÀº ÀÌÀü ¹öÀü¿¡¼­µµ PostgreSQLÀÇ SQLÈ®ÀåÀ» »ç¿ëÇÏ¿© ÇØ°áÇÒ ¼ö ÀÖ¾ú´Ù. ÀÌÁ¦ º»°ÝÀûÀ¸·Î PostgreSQLÀÇ ±â´ÉµéÀ» ¸¶À½²¯ ´©·Á º¸µµ·Ï ÇÏÀÚ.

 

2. µ¥ÀÌÅÍ Å¸ÀÔ

    PostgreSQL 6.2¿¡¼­ Á¦°øÇÏ´Â ÅÍÀÌÅÍ Å¸ÀÔÀº ´ÙÀ½°ú °°´Ù.

 

1) ±âº» µ¥ÀÌÅÍ Å¸ÀÔ
 

    abstime   :  Àý´ë ³¯Â¥¿Í ½Ã°£
    aclitem    :  ¿¢¼¼½º Á¦¾î ¸ñ·Ï ¾ÆÀÌÅÛ
    bool        :  ºÎ¿ï·±(³í¸®) °ª
    box         :  2Â÷¿ø »ç°¢Çü
    bpchar     :  °ø¹é ä¿ò ¹®ÀÚ
    bytea       :  °¡º¯±æÀÌÀÇ ¹ÙÀÌÆ® ¹è¿­
    char        :  ¹®ÀÚ
    char2      :  2 ¹®ÀÚÀÇ ¹è¿­
    char4      :  4 ¹®ÀÚÀÇ ¹è¿­
    char8      :  8¹®ÀÚÀÇ ¹è¿­
    char16     :  16¹®ÀÚÀÇ ¹è¿­
    cid          :  ¸í·É ½Äº° ŸÀÔ
    date        :  ANSI SQL µ¥ÀÌÅÍ Å¸ÀÔ
    datetime  :  ¹ü¿ë ³¯Â¥¿Í ½Ã°£
    filename  :  °Å´ë °´Ã¼ÀÇ ÆÄÀÏÀ̸§
    int2         :  ºÎÈ£ÀÖ´Â 2¹ÙÀÌÆ® Á¤¼ö
    int28       :  int2ÀÇ 8 ¹è¿­
    int4         :  ºÎÈ£ÀÖ´Â 2¹ÙÀÌÆ® Á¤¼ö
    float4      :  ´ÜÁ¤µµ ºÎµ¿¼Ò¼ö
    float8      :  ¹èÁ¤µµ ºÎµ¿¼Ò¼ö
    lseg        :  2Â÷¿ø ¼± ±¸°£
    money     :  °íÁ¤ Á¤¹Ðµµ¸¦ °¡Áö´Â ½ÊÁø¼ö ŸÀÔ
    name      :  ÀúÀå ½Ã½ºÅÛ ½Äº°ÀÚ¸¦ À§ÇÑ ´ÙÁß ¹®ÀÚ Å¸ÀÔ
    oid         :  °´Ã¼ ½Äº°ÀÚ Å¸ÀÔ
    oid8        :  oidÀÇ 8 ¹è¿­
    oidchar16  :  oid ¿Í char16ÀÇ Á¶ÇÕ
    oidint2    :  oid ¿Í int2ÀÇ Á¶ÇÕ
    oidint4    :  oid ¿Í int4ÀÇ Á¶ÇÕ
    path        :  ¿­·È°Å³ª ´ÝÇôÁø ¼± ±¸°£
    point       :  2Â÷¿ø ±âÇÏÇÐ Á¡
    polygon  :  2Â÷¿ø ´Ù°¢Çü (´ÝÇôÁø path¿Í µ¿ÀÏ)
    circle      :  2Â÷¿ø ¿ø (Áß½ÉÁ¡°ú ¹Ý°æ)
    regproc   :  µî·ÏµÈ ÇÁ·Î½ÃÀú
    reltime     :  »ó´ë ³¯Â¥¿Í ½Ã°£ °£°Ý
    smgr       :  ÀúÀå °ü¸®ÀÚ
    text         :  °¡º¯±æÀÌÀÇ ¹®ÀÚ ¹è¿­
    tid          :  Æ©Çà ½Äº°ÀÚ Å¸ÀÔ
    time        :  ANSI SQL ½Ã°£ ŸÀÔ
    timespan  :  ¹ü¿ë ½Ã°£ °£°Ý
    timestemp  :  Á¦ÇÑ ¹üÀ§ ISOÇü½ÄÀÇ ³¯Â¥¿Í ½Ã°£
    tinterval   :  ½Ã°£ °£°Ý(Àý´ë½ÃÀ۽ð¢°ú Àý´ëÁ¾·á½Ã°¢)
    varchar    :  °¡º¯±æÀÌÀÇ ¹®ÀÚµé
    xid           :  Æ®·£Àè¼Ç ½Äº°ÀÚ Å¸ÀÔ

 

2) SQL/92¿Í PostgreSQL ÀÇ ºñ±³

    SQL/92 ŸÀÔ°ú µ¿ÀÏÇÑ PostgreSQL µ¥ÀÌÅÍ Å¸ÀÔÀº ´ÙÀ½°ú °°´Ù.
     

    PostgreSQL ŸÀÔ

    SQL/92 ŸÀÔ

    ÀǹÌ

    char(n)

    charater(n)

    °íÁ¤ ±æÀÌ ¹®ÀÚ¿­

    varchar(n)

    charater varying

    °¡º¯ ±æÀÌ ¹®ÀÚ¿­

    float4/8

    float(p)

    Á¤¹Ðµµ p¸¦ °¡Áö´Â ºÎµ¿ ¼Ò¼ö

    float8

    double precision

    ¹èÁ¤µµ ºÎµ¿ ¼Ò¼ö

    float8

    real

    ¹èÁ¤µµ ºÎµ¿ ¼Ò¼ö

    int2

    smallint

    ºÎÈ£ÀÖ´Â 2¹ÙÀÌÆ® Á¤¼ö

    int4

    int

    ºÎÈ£ÀÖ´Â 4¹ÙÀÌÆ® Á¤¼ö

    int4

    intgre

    ºÎÈ£ÀÖ´Â 4¹ÙÀÌÆ® Á¤¼ö

    int4

    decimal(p,s)

    p<=9, s=0 ÀÎ ¼öÄ¡

    int4

    numeric(p,s)

    p==9, s=0 ÀÎ ¼öÄ¡

    timestemp

    time zoneÀÌ ÀÖ´Â
    timestemp

    ³¯Â¥¿Í ½Ã°£

    timestemp

    interval

    ¹ü¿ë ½Ã°£ °£°Ý

     

3) ³¯Â¥/½Ã°£ µ¥ÀÌÅÍ Å¸ÀÔ

    À§¿¡¼­ ³ª¿­ÇÑ ³¯Â¥/½Ã°£ µ¥ÀÌÅÍ¿¡ ´ëÇؼ­ Àá±ñ »ìÆ캸ÀÚ

    datetime
    ÀÌ µ¥ÀÌÅÍ Å¸ÀÔÀº ¹ü¿ë ³¯Â¥/½Ã°£Å¸ÀÔÀ¸·Î ´Ù¾çÇÑ ÇüÅÂÀÇ ÀÔ·ÂÀ» Çã¿ëÇÑ´Ù. ÀÔ·Â ÇüÅ´ ISOȣȯ, SQL ȣȯ, PostgreSQL ¹æ½ÄÀÌ µÉ ¼ö ÀÖ´Ù. Ãâ·ÂÇüÅ´ set ¸í·ÉÀ» »ç¿ëÇÏ¿© ´Ù¾çÇÏ°Ô Á¶ÀýÇÒ ¼ö ÀÖ´Ù. datetime ŸÀÔÀº ´ÙÀ½ÀÇ ¹®¹ýÀ» »ç¿ëÇÑ´Ù.
     

    ³â-¿ù-ÀÏ [½Ã:ºÐ:ÃÊ]        [AD, BC]  [Timezone]

       ³â¿ùÀÏ [½Ã:ºÐ:ÃÊ]        [AD, BC]  [Timezone]

          ¿ùÀÏ [½Ã:ºÐ:ÃÊ]³â     [AD, BC]  [Timezone]

 

    À¯È¿ÇÑ ³¯Â¥´Â Nov 13 00:00:00 4013 BC GMT¿¡¼­ ¹Ì·¡±îÁöÀÌ´Ù. ½Ã°£ Áö´ë´Â GMT, PST, KST ¿Í °°Àº ¼¼¹®ÀÚÂ¥¸®ÀÌ´Ù. ½Ã°£Àº GMT(Greenwich Mean Time) ·Î ÀúÀåµÇ¸ç, ÀÔÃâ·Â ÇÔ¼ö´Â ÀÌµé ½Ã°£À» ¼­¹öÀÇ Áö¿ª½Ã°£À¸·Î º¯È¯ÇÑ´Ù.
    ±×¸®°í °ª ÁöÁ¤½Ã¿¡ current, infinity, -infinityÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù.

    current´Â °ªÀÌ °è»ê µÉ ¶§ÀÇ ÇöÀç ½Ã°£À̸ç, infinity´Â À¯È¿ ½Ã°£ ÀÌÈĸ¦ ¸»Çϸç, -infinity´Â À¯È¿½Ã°£ ÀÌÀüÀ» ¶æÇÑ´Ù. ±× ¿Ü¿¡µµ now, today, yesterday, tomorrow, epoch¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. current´Â Ç×»ó °è»ê ÇöÀç½Ã°£À¸·Î º¯°æµÇÁö¸¸ now, today µîÀº ¹Ù·Î °è»êµÇ¾î »ó¼ö·Î ÀúÀåµÈ´Ù´Â Á¡¿¡¼­ ´Ù¸£´Ù. epoch´Â jan 1 00:00:00 1970 GMTÀ» À̾߱âÇÑ´Ù.
     

    mydb=> create table test_datetime (dt datrtime);
    CREATE
    mydb=> insert into test_datetime values ('1997-11-24  21:17:00  KST);
    INSERT 535342 1
    mydb=> select *from test_datetime;
    dt
    -----------------
    Mon Nov 24 21:17:00 1997 KAT
    (1 row)

    mydb=> ¡¬h set
    Command: set
    Description: set run-time environment
    Syntax:
    set DateStyle to {'ISO' | 'SQL' | 'Postgres' | 'European' | 'US' | 'NonEuropean'}
    set GEQO to {'ON[=#]' | 'OFF'}
    set R_PLANS to {'ON'| 'OFF'}

    mydb=>set DateStyle to 'SQL' ;
    SET VARIABLE
    mydb=> select *from test_datetime;
    dt
    ------------------
    11/24/1997 21:17:00.00 KST
    (1 row)

     

    timespan
    timespanÀº ¹ü¿ë ½Ã°£°£°Ý µ¥ÀÌÅÍ Å¸ÀÔÀÌ´Ù. datetime°ú ¸¶Âù°¡Áö·Î Ãâ·ÂÇü½ÄÀº set ¸í·ÉÀ¸·Î ´Ù¾çÇÏ°Ô ¼³Á¤ÇÒ ¼ö ÀÖ´Ù. ÀÔ·ÂÇü½ÄÀº ´ÙÀ½°ú °°´Ù.
     

    Quantity Unit [Quantity Unit...] [Direction]

     

    Direction ¿¡´Â ago¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.
     

    mydb=> create table test_timespan (tt timespan);
    CREATE
    mydb=> insert into test_timespan values ('-10 hour');
    INSERT 535357 1
    mydb=> select *from test_timespan;
    tt
    ----------------
    @ 10 hours ago
    (1 row)

     

    abstime
    Àý´ë ½Ã°£(abstime Æ÷ÇÔ)Àº Á¦ÇÑµÈ ¹üÀ§(+/-68 ³â)¿Í  ÃÊ´ÜÀ§±îÁö ÀúÀåÇÒ ¼ö ÀÖ´Â ³¯Â¥ ŸÀÔÀÌ´Ù. Àý´ë ½Ã°£Àº ´ÙÀ½ÀÇ Çü½ÄÀ» µû¸¥´Ù.
     

    Month Day [Hour : Minute : Second] Year [Timezone]

     

    À¯È¿³¯Â¥ ¹üÀ§´Â Dec 13 20:45:53 1901 GMT¿¡¼­ Jan 19 03:14:04 2038 GMT ±îÁö À̸ç, ÀÔÃâ·Â ·çƾÀº ±âº»ÀûÀ¸·Î Áö¿ª½Ã°£Áö´ë¸¦ µû¸¥´Ù.  
     

    mydb=> create table test_abstime (ta abstime);
    CREATE
    mydb=> insert into test_abstime values ('11 25 23:33:25 1997 PST');
    INSERT 535372 1
    mydb=> select *from test_abstime;
    tt
    ----------------
    11/26/1997 16:33:25.00 KST
    (1 row)

     

    reltime

    »ó´ë½Ã°£µµ ±âº»ÀûÀ¸·Î Àý´ë ½Ã°£°ú À¯»çÇÏ´Ù. ½Ã°£ÀÇ ¹üÀ§´Â +/-68³âÀ̸ç, Á¤¹Ðµµ´Â ÃÊ´ÜÀ§±îÁöÀÌ´Ù. Çü½ÄÀº ´ÙÀ½°ú °°´Ù.
     

    @ Quantity Unit [Direction]


    mydb=> create table test_reltime (tr reltime);
    CREATE
    mydb=> insert into test_reltime values ('@10 day ago');
    INSERT 535387 1
    mydb=> select *from test_reltime ;
    tr
    ----------------
    @10 day ago
    (1 row)

     

4) ±âÇÏÇÐ µ¥ÀÌÅÍ Å¸ÀÔ

    point 
    Æò¸é¿¡¼­ ÇϳªÀÇ Á¡À» ³ªÅ¸³¾ ¶§ »ç¿ëµÇ´Â µ¥ÀÌÅÍ Å¸ÀÔÀÌ´Ù.
    µ¥ÀÌÅÍ Çü½ÄÀº ´ÙÀ½°ú °°´Ù.
     

    (x, y)
     x, y

     

    x¿Í y´Â °¢°¢ Æò¸é¿¡¼­ xÃà, yÃà °ªÀ» ³ªÅ¸³»´Â ºÎµ¿ ¼Ò¼öÀÌ´Ù.
     

    mydb=> create table test_point (p point);
    CREATE
    mydb=> insert into test_point values ('128, 215');
    INSERT 535438 1
    mydb=> insert into test_point values ('512, 640');
    INSERT 535439 1
    mydb=> insert into test_point values ('978.25, 1075.103');
    INSERT 535440 1
    mydb=> select *from test_point ;
    p
    ----------------
    (128, 215)
    (512, 640)
    (978.25, 1075.103)
    (3 rows)

     

    lseg
    ¼± ±¸°£Àº Á¡ µÎ °³·Î ±¸¼ºµÈ´Ù. lseg µ¥ÀÌÅÍ Å¸ÀÔÀº ´ÙÀ½ Çü½ÄÀ¸·Î ÁöÁ¤ÇÑ´Ù.
     

    ((x1, y1) , (x2, y2))
     (x1, y1) , (x2, y2)
      x1, y1  ,  x2, y2 

     

    (x1, y1)¿Í (x2, y2)´Â ¼±±¸°£ÀÇ ³¡Á¡ÀÌ´Ù.
     

    mydb=> create table test_lseg (line lseg);
    CREATE
    mydb=> insert into test_lseg values ('0,0,480,640');
    INSERT 535455 1
    mydb=> insert into test_lseg values ('(640,0), (0,480)');
    INSERT 535456 1
    mydb=> select *from test_lseg ;
    line
    ----------------
    [(0,0),(480,640)]
    [(640,0),(0,480)]
    (2 rows)

     

    box
    box µ¥ÀÌÅÍ Å¸ÀÔÀº µÎ °³ÀÇ Á¡À¸·Î ±¸¼ºµÈ´Ù. Áï, µÎ Á¡À» ¹Ý´ëÂÊ ²ÀÁöÁ¡À¸·Î ÇÏ´Â »ç°¢ÇüÀ» ±¸¼ºÇÏ´Â °ÍÀÌ´Ù.
    boxÀÇ Çü½ÄÀº ´ÙÀ½°ú °°´Ù.
     

    ((x1, y1) , (x2, y2))
     (x1, y1) , (x2, y2)
      x1, y1  ,  x2, y2 


    mydb=> create table test_box (»ç°¢Çü box);
    CREATE
    mydb=> insert into test_box values ('0,0,640,480');
    INSERT 535471 1
    mydb=> select *from test_box ;
    »ç°¢Çü
    ----------------
    (640,480),(0,0)
    (1 row)

     

    path
    path µ¥ÀÌÅÍ Å¸ÀÔÀº Á¡ÀÇ ÁýÇÕÀ¸·Î ±¸¼ºµÈ´Ù. ù ¹ø° Á¡°ú  ¸¶Áö¸· Á¡ÀÌ À̾îÁöÁö ¾Ê´Â´Ù¸é °æ·Î(path)´Â open ÀÌ µÇ°í, À̾îÁø´Ù¸é close °¡ µÈ´Ù. popen(p) ¿Í pclose(p)ÇÔ¼ö´Â pathµ¥ÀÌÅÍÇü p¸¦ °­Á¦·Î openÇϰųª close »óÅ·Π¸¸µç´Ù. isopen(p)¿Í isclosed(p) ÇÔ¼ö´Â ÁúÀǾ¼­ µÑ Áß Çϳª¸¦ ¼±ÅÃÇϵµ·Ï ÇÑ´Ù.

    path µ¥ÀÌÅÍÀÇ ÀÔ·Â Çü½ÄÀº ´ÙÀ½ Áß Çϳª¸£ »ç¿ëÇÒ ¼ö ÀÖ´Ù.
     

    ((x1, y1) , ... , (xn, yn))
    [(x1, y1) , ... , (xn, yn)]
      (x1, y1) , ..., (xn, yn) 
      (x1, y1  , ..., xn, yn) 
       x1, y1  , ..., xn, yn


    (x1, y1) , ..., (xn, yn)Àº  1¿¡¼­ n ±îÁöÀÇ  Á¡ÀÌ´Ù.
    "["´Â ¿­·ÁÁø °æ·Î¸¦ ³ªÅ¸³½´Ù.
    "("´Â ´ÝÇôÁø °æ·Î¸¦ ³ªÅ¸³½´Ù.

     

    mydb=> create table test_path (±æ path);
    CREATE
    mydb=> insert into test_path values ('((10,10),(10,20),(20,30),(30,20),(30,10))');
    INSERT 535486 1
    mydb=> insert into test_path values ('[(10,10),(10,20),(20,30),(30,20),(30,10)]');
    INSERT 535487 1
    mydb=> select *from test_path ;
    ±æ
    ----------------
    ((10,10),(10,20),(20,30),(30,20),(30,10))
    [(10,10),(10,20),(20,30),(30,20),(30,10)]
    (2 row)

    mydb=> select isopen(±æ) from test_path
    isopen
    ----
    f
    t
    (2 rows)

     

    polygon
    ´Ù°¢Çü(polygon)µµ path¿Í ¸¶Âù°¡Áö·Î ¿©·¯ °³ÀÇ Á¡À¸·Î ±¸¼ºµÈ´Ù. ´Ù°¢ÇüÀº ´ç¿¬È÷ ´ÝÇôÁö´Â °ÍÀ» ±âº»À¸·Î ÇØ¾ß ÇÑ´Ù. À̰͸¸ Á¦¿ÜÇϸé, µ¥ÀÌÅÍ ÀÔ·Â Çü½ÄÀº path¿Í µ¿ÀÏÇÏ´Ù.

    circle
    ¿øÀº Áß½ÉÁ¡°ú ¹ÝÁö¸§À¸·Î ±¸¼ºµÈ´Ù. Çü½ÄÀº ´ÙÀ½ Áß Çϳª¸¦ »ç¿ë ÇÒ ¼ö ÀÖ´Ù.
     

    <(x, y), r >
     ((x, y), r )
      (x, y), r
        x, y, r  

     

    (x, y)´Â ¿øÀÇ Áß½ÉÁ¡ÀÌ°í rÀº ¹ÝÁö¸§ÀÌ´Ù.

     

    mydb=> create table test_circle (¿ø circle);
    CREATE
    mydb=> insert into test_circle values ('0,0, 100');
    INSERT 535502 1
    mydb=> select *from test_circle ;
    ¿ø
    ----------------
    <(0,0), 100>
    (1 row)

    Áö±Ý±îÁö µ¥ÀÌÅÍ Å¸ÀÔÀ» »ìÆì º¸¾Ò´Ù. À̵éÀº PostgreSQL 6.2 ±âÁØÀÌ´Ù. path ³ª polygon, circle µîÀº PostgreSQL ¹öÀü¿¡ µû¶ó Á¶±Ý ´Ù¸¥Á¡ÀÌ ÀÖÀ¸¹Ç·Î ÁÖÀÇ ÇÏ¿©¾ß ÇÑ´Ù.
    ÀÌÁ¦ PostgreSQL¿¡ ³»ÀåµÇ¾î ÀÖ´Â ¿ÀÆÛ·¹ÀÌÅ͸¦ »ìÆ캸ÀÚ. Á¶±Ý Áö°ã´õ¶óµµ ±âÃʸ¦ Æ°Æ°È÷ ÇÏ´Ùº¸¸é ³ªÁß¿¡ ½á¸èÀ» ‹š°¡ ¹Ýµå½Ã ÀÖÀ» °ÍÀÌ´Ù. ±×¸®°í ÀÚ¼¼È÷ ¾Ë¾ÆµÎ´Â °úÁ¤¿¡¼­ PostgreSQL°¡ ¾ÆÁÖ Àç¹ÌÀÖ´Ù´Â °ÍÀ» ´À³¥ ¼ö ÀÖÀ» °ÍÀÌ´Ù.

 

3. ³»Àå ¿ÀÆÛ·¹ÀÌÅÍ¿Í ÇÔ¼ö

 

1)¿ÀÆÛ·¹ÀÌÅÍ

    PostgreSQL ´Â Á¤¸» ¸¹Àº ¾çÀÇ ³»Àå ¿ÀÆÛ·¹ÀÌÅ͸¦ Á¦°øÇÑ´Ù. ÀÌµé ¿ÀÆÛ·¹ÀÌÅÍ´Â pg_operator ½Ã½ºÅÛ Ä«Å»·Î±×¿¡ ÇØ´ç ¿ÀÆÛ·¹ÀÌÅ͸¦ ±¸ÇöÇÏ´Â ÇÁ·Î½ÃÀúÀÇ °´Ã¼ ID¿Í ÇÔ²² Á¤ÀǵǾî ÀÖ´Ù.
     

    mydb=>select count(*) from pg_operator:
    count
    -----
    488
    (1 row)

     

    488°³ÀÇ ¿ÀÆÛ·¹ÀÌÅÍ°¡ ³»ÀåµÇ¾î ÀÖÀ½À» ¾Ë ¼ö ÀÖ´Ù. ³ªÁß¿¡ ¿ÀÆÛ·¹ÀÌÅ͸¦ Á¤ÀÇÇÏ´Â ¹æ¹ýÀ» ¼³¸íÇÒ ¶§ ¾Ë ¼ö ÀÖ°ÚÁö¸¸, PostgreSQL ¿¡¼­´Â ´ë»ó °´Ã¼ ŸÀÔ¿¡ µû¶ó ¿ÀÆÛ·¹ÀÌÅÍ°¡ ´Ù¸¥ Àǹ̸¦ °¡Áø´Ù. Áï '<' ¿ÀÆÛ·¹ÀÌÅͶó ÇÏ´õ¶óµµ ¿©·¯ µ¥ÀÌÅÍ Å¸ÀÔ¿¡ ÀÛµ¿Çϵµ·Ï ÇÒ ¼ö ÀÖÀ¸¸ç, ÀÌ °æ¿ì¿¡´Â PostgreSQL ¿¡ ÇØ´ç µ¥ÀÌÅÍ Å¸ÀÔÀÌ Á¤ÀǵǾî Àְųª, »ç¿ëÀÚ°¡ Á¤ÀÇÇÏ¿©¾ß ÇÑ´Ù. Áï, Çü½ÄÀûÀ¸·Î´Â '>'¿Í °°Àº ¿ÀÆÛ·¹ÀÌÅÍ ¸ð¾çÀ» ¶çÁö¸¸, ½ÇÁ¦ÀûÀ¸·Î´Â ¾ÕµÚÀÇ ´ë»ó µ¥ÀÌÅÍ Å¸ÀÔÀ» ÂüÁ¶ÇÏ¿© ÀÌ¿¡ ¸Â´Â ÇÁ·Î½ÃÀú¸¦ ½ÇÇàÇÏ´Â °ÍÀÌ´Ù.

    ÀϹÝÀûÀ¸·Î´Â ´ÙÀ½°ú °°ÀÌ »ç¿ëÇÒ °ÍÀÌ´Ù.
     

    select * from emp where salary <40000;

     

    ¹Ý´ë·Î ¿ÀÆÛ·¹ÀÌÅ͸¦ ±¸ÇöÇÏ´Â ÇÔ¼ö¸¦ Á÷Á¢ È£ÃâÇÒ ¼öµµ ÀÖ´Ù.
    ÀÌ °æ¿ì¿¡ À§ÀÇ ÁúÀǾî´Â ´ÙÀ½°ú °°´Ù.
     

    select * from emp where int4lt(salary, 40000);

     

    ÀÌµé ¿ÀÆÛ·¹ÀÌÅÍ¿Í ÇÁ·Î½ÃÀú ¸ñ·ÏÀº 'man pgbuiltin' ¸í·ÉÀ¸·Î Âü°í Çϱ⸦ ¹Ù¶ó°í, ¿©±â¼­´Â °£´ÜÇÑ È°¿ë ¿¹¸¦ º¸ÀÌ°Ú´Ù.
    µÎ Á¡ »çÀÌÀÇ °Å¸®¸¦ ±¸ÇÏ·Á¸é ´ÙÀ½°ú °°ÀÌ ÇÏ¸é µÈ´Ù.
      

    mybd=>select '25,25' ::point<-> '0,0' ::point as distance;
    distance
    -------------
    35.3553390593274
    (1 row)

     

    ¿©±â¿¡¼­ ¸í½ÃÀûÀÎ Çüº¯È¯À» Çϱâ À§ÇØ '::' ±âÈ£¸¦ »ç¿ëÇÏ¿´´Ù. <->¿ÀÆÛ·¹ÀÌÅÍ´Â A¿Í B»çÀÌÀÇ °Å¸®¸¦ ±¸ÇÏ´Â ¿ÀÆÛ·¹ÀÌÅÍÀÌ´Ù.
    »ç°¢ÇüÀÇ ¹Ú½º°¡ ¼­·Î °ãÄ¡´Â°¡µµ ¾Ë¾Æº¼ ¼ö ÀÖ´Ù.
     

    mybd=>select '0,0,640,480' ::box &&'400,300,1000,800' ::box as ¹Ú½º°ãħ¿©ºÎ;
    ¹Ú½º°ãħ¿©ºÎ
    -------------
    t
    (1 row)

     

    ¿øÀÇ Æ÷ÇÔ¿©ºÎµµ ÀÏ»óÀûÀÎ ¿ÀÆÛ·¹ÀÌÅ͸¦ »ç¿ëÇÏ¿© ½±°Ô ¾Ë ¼ö ÀÖ´Ù. ÀÌ¿¡ ÇØ´çÇÏ´Â ÇÁ·Î½ÃÀú°¡ ÀÌ¹Ì ¸¸µé¾îÁ® PostgreSQL ¿¡ ³»ÀåµÇ¾î ÀÖÀ½À» ´Ù½Ã »ó±âÇÏÀÚ.
     

    mybd=>select '0,0,50' ::circle @'0,0,100' ::circle as A´ÂB¿¡Æ÷ÇԵɱî;
    a´Âb¿¡Æ÷ÇԵɱî
    -------------
    t
    (1 row)

     

    ±× ¿ÜÀÇ À¯¿ëÇÑ ¿©·¯ ¿ÀÆÛ·¹ÀÌÅÍ°¡ ÀÖÀ¸¹Ç·Î ¸Ç ÆäÀÌÁö¸¦ Âü°í Çϱ⠹ٶõ´Ù.

     

2)¿À¶óŬ ȣȯ ÇÔ¼ö

    ¿ÀÆÛ·¹ÀÌÅÍ¿Í ÇÔ¼ö´Â ¹ÐÁ¢ÇÑ °ü·ÃÀÌ ÀÖ´Ù. ¿ÀÆÛ·¹ÀÌÅÍ´Â ÇÔ¼ö·Î ±¸ÇöµÈ´Ù. ¿©±â¼­´Â RDBMS ·Î´Â °¡Àå ¸¹ÀÌ ¾Ë·ÁÁ® ÀÖ´Â ¿À¶óŬȣȯ ÇÔ¼ö¸¦ Àá½Ã »ìÆ캸±â·Î ÇÑ´Ù. PostgreSQL 6.2¿¡¼­ ±¸ÇöµÈ ÇÔ¼ö´Â ´ÙÀ½°ú °°´Ù.
    À̵é ÇÔ¼ö´Â ¸ðµÎ text µ¥ÀÌÅÍ Å¸ÀÔ¿¡¼­ µ¿ÀÛÇÑ´Ù´Â °Í¿¡ ÁÖÀÇÇØ¾ß ÇÑ´Ù. Áï, varchar ¿Í °°Àº µ¥ÀÌÅÍÇü¿¡¼­´Â µ¿ÀÛÇÏÁö ¾Ê´Â´Ù.(varchar ÀÏ °æ¿ì¿¡´Â ¸í½ÃÀûÀÎ Çüº¯È¯À» Çϰųª, À̵é ÇÔ¼ö°¡ varchar¸¦ ¹Þ¾ÆµéÀ̵µ·Ï Á¶Ä¡¸¦ ÃëÇØ¾ß ÇÑ´Ù.)

     

    lower (text)
    ¼Ò¹®ÀÚ·Î º¯È¯ÇÑ´Ù.
     

    mydb=>select lower('Linux');
    lower
    ----
    linux
    (1 row)

     

    upper (text)
    ´ë¹®ÀÚ·Î º¯È¯ÇÑ´Ù.
     

    mydb=>select upper('Linux');
    upper
    ----
    LINUX
    (1 row)

     

    initcao (text)
    ´Ü¾îÀÇ Ã¹±ÛÀÚ¸¦ ´ë¹®ÀÚ·Î º¯È¯ÇÏ°í, ³ª¸ÓÁö´Â ¼Ò¹®ÀÚ·Î ÇÑ´Ù. ´Ü¾î´Â °ø¹é¹®ÀÚ·Î ±¸ºÐÇÑ´Ù.
     

    mydb=>select initcap('linux is not trademark');
    initcap
    ----------------
    Linux is Not Trademark
    (1 row)

     

    lpad (text1, len [,text2])
    text1 ÀÇ ¿ÞÂÊ¿¡ text2 ¸¦ Àüü±æÀÌ°¡ len ÀÌ µÇµµ·Ï ä¿î´Ù. text2 °¡ ¾ø´Ù¸é ±âº»ÀûÀ¸·Î °ø¹é¹®ÀÚ°¡ »ç¿ëµÈ´Ù.
     

    mydb=>select lpad('linux', 30, 'world');
    lpad
    ----------------
    worldworldworldworldworldlinux
    (1 row)

     

    rpad (text1, len [,text2])
    text1ÀÇ ¿À¸¥ÂÊ¿¡ text2 ¸¦ Àüü±æÀÌ°¡ len ÀÌ µÇµµ·Ï ä¿î´Ù. text2 °¡ ¾ø´Ù¸é ±âº»ÀûÀ¸·Î °ø¹é¹®ÀÚ°¡ »ç¿ëµÈ´Ù.
     

    mydb=>select rpad('linux', 30, 'world');
    rpad
    ----------------
    linuxworldworldworldworldworld
    (1 row)

     

    ltrim (text[,set])
    text ¹®ÀÚ¿­¿¡¼­ set¹®ÀÚ¿­ Áß °¡Àå ¸ÕÀú ³ªÅ¸³ª´Â ¹®ÀÚºÎÅÍ ¸ÅĪµÇ´Â µ¥±îÁö Á¦°ÅÇÏ¿© ¹ÝȯÇÑ´Ù.
     

    mydb=>select ltrim('linux world', 'wlinud');
    ltrim
    ----------------
    x world
    (1 row)

     

    rtrim (text[,set])
    rtrim Àº ltrim ÀÇ ¹Ý´ëµÇ´Â ÇÔ¼öÀÌ´Ù.
     

    mydb=>select rtrim('linux', 'ux');
    rtrim
    ----------------
    lin
    (1 row)

     

    substr (text, m [,n])
    text ¹®ÀÚ¿­¿¡¼­ m ¹ø°¿¡¼­ n ±æÀÌ ¸¸Å­ÀÇ ¹®ÀÚ¿­À» µ¹·ÁÁØ´Ù.
     

    mydb=>select substr('linux world', 1,5);
    substr
    ----------------
    linux

     

    translate (text, from, to)
    text ¹®ÀÚ¿­¿¡¼­ from ¹®ÀÚ¸¦ ã¾Æ¼­ to ·Î ´ëüÇÑ´Ù.
     

    mydb=>select translate('ms', 's', '$');
    translate
    ----------------
    m$

     

     

±× ¿ÜÀÇ ÇÔ¼öµé

    ±× ¿Ü¿¡ »ç¿ëµÇ´Â ÀϹÝÇÔ¼ö¸¦ »ìÆ캸µµ·Ï ÇÏÀÚ.

    Á¤¼ö¸¦ ºÎµ¿¼Ò¼ýÁ¡À¸·Î º¯È¯
     

    float8 float8(int)
    float4 float4(int)

     

    ºÎµ¿¼Ò¼ýÁ¡À» Á¤¼ö·Î º¯È¯
     

    int4 int4(float)
    int2 int2(float)

     

    Àý´ë½Ã°£ °ü·Ã
     

    bool           isfinite(abstime)          abstime ÀÌ finite ½Ã°£À̸é TRUE¸¦ µ¹·ÁÁØ´Ù.
    datetime     datetime(abstime)       abstime À» datetime À¸·Î º¯È¯ÇÑ´Ù.

     

    date °ü·Ã
     

    datetime    datetime(date)             date ŸÀÔÀ» datetime ŸÀÔÀ¸·Î º¯È¯ÇÑ´Ù.
    datetime    datetime(date, time)     date ŸÀÔ°ú time ŸÀÔÀ» datetime À¸·Î º¯È¯ÇÑ´Ù.

     

    datetime °ü·Ã
     

    timespan age(datetime,datetime)     ¿¬°ú ¿ùÀÇ Â÷À̸¦ ±¸ÇÑ´Ù.
    float8 date_part(text,datetime)         date ÇʵåÀÇ Æ÷¼ÇÀ» ÁöÁ¤ÇÑ´Ù.
    datetime date_trunc(text,datetime)   date ¸¦ ÁöÁ¤ÇÑ À¯´ÖÀ¸·Î ÀÚ¸¥´Ù.
    bool isfinite(datetime)                     finite ½Ã°£À̸é TRUE ¸¦ µ¹·ÁÁØ´Ù.
    abstime abstime(datetime)              abstime À¸·Î º¯È¯ÇÑ´Ù.

     

    reltime °ü·Ã
     

    timespan timespan(reltime)            timespan À¸·Î º¯È¯ÇÑ´Ù.

     

    time °ü·Ã
     

    datetime datetime(date,time)          datetime À¸·Î º¯È¯ÇÑ´Ù.

     

    box °ü·Ã
     

    box    box(point,point)         Á¡À» »óÀÚ·Î º¯È¯ÇÑ´Ù.
    float8 area(box)                  »óÀÚÀÇ ³ÐÀ̸¦ ±¸ÇÑ´Ù.

     

    mydb=>select area(»ç°¢Çü) from test_box;
        area
    -----
    307200
    300000
    (2 rows)

     

    path °ü·Ã
     

    bool   isopen(path)     ¿­·ÁÁø °æ·ÎÀ̸é TRUE¸¦ ¹ÝȯÇÑ´Ù.
    bool   isclosed(path)   ´ÝÇôÁø °æ·ÎÀ̸é TRUE¸¦ ¹ÝȯÇÑ´Ù.

     

    circle °ü·Ã
     

    circle  circle(point,float8)        ¿øÀ¸·Î º¯È¯ÇÑ´Ù.
    polygon polygon(npts,circle)   ¿øÀ» npts °³ÀÇ Á¡À» °¡Áö´Â ´Ù°¢ÇüÀ¸·Î º¯È¯ÇÑ´Ù.
      float8 center(circle)              ¿øÀÇ Áß½ÉÁ¡À» ±¸ÇÑ´Ù.
      float8 radius(circle)              ¿øÀÇ ¹ÝÁö¸§À» ±¸ÇÑ´Ù.
      float8 diameter(circle)          ¿øÀÇ Á÷°æÀ» ±¸ÇÑ´Ù.
      float8 area(circle)                 ¿øÀÇ ³ÐÀ̸¦ ±¸ÇÑ´Ù.

     

    mydb=>select area(¿ø) from test_circle ;
               area
    -------------
    31415.9265358979
    7853.98163397448
    (2 rows)

     

    ±âŸ ÅؽºÆ® °ü·Ã ÇÔ¼ö
     

    text     position(subtext in text)
    text ¿¡¼­ subtext °¡ ÀÖ´Â À§Ä¡¸¦ µ¹·ÁÁØ´Ù.

     

    mydb=>select position('world' in 'linux world');
    strpos
    -----
          7

 

4. PostgreSQL ¿¡¼­ÀÇ SQL

    PostgreSQL Àº Ç¥ÁØ SQL ¿¡ ³ª¿À´Â »ó´çÈ÷ ¸¹Àº SQL ¸í·ÉÀ» Á¦°øÇÏÁö¸¸ Á¶±ÝÀÇ ¾àÁ¡ÀÌ ÀÖ´Ù. PostgreSQL 6.2.1 ±îÁö¸¦ ±âÁØÀ¸·Î º¼ ¶§, PRIMARY KEY, UNIQU, FOREIGN KEY, REFERENCES, SUBSELECT, HAVING Àý µîÀ» Áö¿øÇÏÁö ¸øÇÏ°í ÀÖ´Ù. ¹°·Ð ÀÌ·¯ÇÑ °ÍµéÀº PostgreSQL¿¡¼­ ´Ù¸¥ ±â´ÉÀ» »ç¿ëÇÏ¿© ÃæÁ·½Ãų ¼ö ÀÖÁö¸¸, ºÒÆíÇÑ °ÍÀº »ç½ÇÀÌ´Ù. PostgreSQL 6.2 ¿¡ µé¾î¿Í¼­ NOT NULL, DEFAULT, CONSTRANT CHECK µîÀ» »õ·Ó°Ô Áö¿øÇϱ⠽ÃÀÛÇÏ¿©, ¿ÃÇØ ¾È¿¡ ¹ßÇ¥µÉ 6.3¿¡¼­´Â ¿©Áö²¯ Áö¿øÇÏÁö ¸øÇß´ø Ç¥ÁØ SQL ÀÇ ±â´ÉÀ» »õ·Ó°Ô ¸¹ÀÌ Ãß°¡µÉ °ÍÀ¸·Î º¸ÀδÙ.

    ÀÌÁ¦, PostgreSQL ÀÇ SQL ±â´ÉµéÀ» ÀÚ¼¼ÇÏ°Ô »ìÆ캸µµ·Ï ÇÏÀÚ. ÁúÀǾ·Î ³ª´©¾î º¸Áö ¾Ê°í °ü·Ã ±â´Éº°·Î ±¸ºÐÇÏ¿© »ìÆ캸°Ú´Ù.

     

1) Å×À̺í

    Å×À̺íÀº DBMS µ¥ÀÌÅͺ£À̽º¿¡¼­ °¡Àå ±âº»ÀûÀÎ °³³äÀ¸·Î, ½ÇÁ¦ µ¥ÀÌÅ͵éÀÌ ÀÏÁ¤ÇÑ ÇüŸ¦ ¶ç¸ç °¡½ÃÀûÀ¸·Î ÀúÀåµÇ´Â °÷ÀÌ´Ù. µû¶ó¼­ Å×À̺íµéÀ» ¾î¶»°Ô ¸¸µå´À³Ä¿¡ µû¶ó µ¥ÀÌÅͺ£À̽ºÀÇ ¼º´É°ú È¿À²ÀÌ ¹®Á¦°¡ µÈ´Ù. Å×ÀÌºí »ý¼º¹®Á¦¸¦ ±×³É 'ÇÊµå °¡Áö°í ³î±â' ¶ó°í º¸´Â °üÁ¡Àº ±×¸® ÁÁÁö ¾Ê´Ù. ÇÁ·Î±×·¥À» ÀÛ¼ºÇÒ ¶§ ¼³°è°¡ Áß¿äÇϵíÀÌ µ¥ÀÌÅͺ£À̽º ½Ã½ºÅÛÀ» ±¸ÃàÇÒ ¶§¿¡µµ ¼³°è°¡ Áß¿äÇÏ´Ù. Çѹø ¼³°è¸¦ À߸øÇÏ¸é ¿À·£ ½Ã°£µ¿¾È °í»ýÀ» ÇÏ°í ½Ã½ºÅÛ ºñ¿ëÀ» ³¶ºñÇÏÁö¸¸, Çѹø ¼³°è¸¦ Àß ÇØµÎ¸é µÎ°íµÎ°í À̵æÀ» º»´Ù. Áï, µ¥ÀÌÅÍÀÇ ¼ºÁú°ú ÇʵåÀÇ ¼º°Ý, À妽ºÀÇ È°¿ë ¿©ºÎ, Á¦ÇÑ ±ÔÁ¤ µîÀ» Àß ÆľÇÇÏ°í È°¿ëÇÏ¿©¾ß ÇÑ´Ù.

    ¸ÕÀú, Å×ÀÌºí »ý¼º¿¡ ´ëÇØ ¾Ë¾Æº¸ÀÚ.

     

    Å×ÀÌºí »ý¼º
    Å×À̺íÀº CREATE TABLE ¸í·ÉÀ» »ç¿ëÇÏ¿© ¸¸µç´Ù. ¹®¹ýÀº ´ÙÀ½°ú °°´Ù.
     

    create table classname (attname type [not null] [default value]
         [, attname type [default value] [not null]])
         [inherits ( classname [, classname])]
         [constraint cname check (test) [, check(test)]]
         [archive = archive_mode]
         [store = "smgr_name"]
         [arch_store = "smgr_name"]

     

    arch_store ´Â »õ·Î¿î Ŭ·¡½º¿¡¼­ »ç¿ëÇÒ ÀúÀå ½Ã½ºÅÛÀ» ÁöÁ¤ÇÑ´Ù. store ´Â ÇöÀçÀÇ µ¥ÀÌÅÍ ¹èÄ¡¸¦ Á¦¾îÇÏ°í, arch_store ´Â ¿ª»çÀûÀÎ µ¥ÀÌÅÍ ¹èÄ¡¸¦ Á¦¾îÇÑ´Ù. arch_store ´Â archive °¡ ÁöÁ¤µÉ ¶§¿¡¸¸ ÁöÁ¤µÉ ¼ö ÀÖ´Ù. store ¿Í arch_store ´Â 'magnetic disk' ¸¸ ÁöÁ¤ÇÒ ¼ö ÀÖÀ¸¸ç, ±âº» °ªµµ 'magnetic disk' ÀÌ´Ù.

    arch_store ´Â none, light, heavy Áß Çϳª°¡ µÉ ¼ö ÀÖ´Ù. ¾µ ÀÏÀÌ ¾øÀ¸´Ï ½Å°æ ¾²Áö ¾Ê¾Æµµ µÈ´Ù.

    À§ÀÇ ¹®¹ýÀÌ Á¶±Ý º¹ÀâÇÑ µíÀÌ º¸ÀÌÁö¸¸ »ç½ÇÀº °£´ÜÇÏ´Ù. °¡Àå °£´ÜÇÑ ÇüÅÂÀÇ Å×À̺í Á¤ÀÇ´Â ´ÙÀ½°ú °°´Ù.
     

    CREATE TABLE emppay (
        name text,
        wage float4
    ) ;

     

    NOT NULL °ú DEFAULT, CONSTRAINT¸¦ Ãß°¡ÇÏ¿© ÇØ´ç Çʵ忡 ´ëÇØ Ãß°¡ Á¦¾î¸¦ ÇÏ¿© Å×À̺íÀ» ¸¸µé ¼öµµ ÀÖ´Ù.

    Å×À̺í Á¤ÀÇ¿¡¼­ INHERITS ´Â »ó¼Ó°ü°è¸¦ ³ªÅ¸³½´Ù.
     

    CREATE TABLE emppay (
        name text  NOT NULL,
        wage float4 DEFAULT 10.00
    ) CONSTRAIN empcon CHECK (wage > 5.30 and wage <=30.00),
                   CHECK (name<> ") ;


    deppay Å×À̺í(Ŭ·¡½º)Àº ÀÌÁ¦ emppay Å×À̺í(Ŭ·¡½º)ÀÇ name, wage Çʵå(¼Ó¼º)À» Æ÷ÇÔÇÏ°Ô µÈ´Ù. Áï, emppay ·ÎºÎÅÍ »ó¼ÓÀ» ¹Þ°Ô µÇ´Â °ÍÀÌ´Ù. ÀÌ·¯ÇÑ »ó¼ÓÀº ´Ü¼øÈ÷ Çʵå(¼Ó¼º)À» ½±°í ÀÏ°ü¼º ÀÖ°Ô ¸¸µé ¼ö ÀÕ´Ù´Â ÀåÁ¡»Ó¸¸ÀÌ ¾Æ´Ï¶ó, »ó¼Ó ¼Ó¼ºÀ» ÀÌ¿ëÇÏ¿© µ¥ÀÌÅÍ°ü¸®¸¦ Á¶¸®ÀÖ°Ô(°´Ã¼ÁöÇâÀûÀ¸·Î!!) ÇÒ ¼ö ÀÖ´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù.
     

    CREATE TABLE deppay (
        department text,
    ) INHERITS (emppay) ;

     

    µ¥ÀÌÅÍ Ãß°¡
    µ¥ÀÌÅÍÃß°¡´Â INSERT ¸í·ÉÀ» »ç¿ëÇÑ´Ù. ¹®¹ýÀº ´ÙÀ½°ú °°´Ù. ¿©·¯ ÇüÅÂÀÇ INSERT¸¦ »ç¿ëÇÏ¿© µ¥ÀÌÅ͸¦ Ãß°¡ÇÒ ¼ö ÀÖ´Ù.
     

    INSERT INTO classname
         [(att.expr-1 [,att_expr.i] )]
           {VALUES (expression 1[, expression-i] )|
         SELECT expression1 [, expression-i]
           [from from-list] [where qual]


    INSERT ±¸¹®Àº ¶§·Î´Â ¹ø°Å·Ó´Ù.
     

    INSERT INTO emppay VALUES ('linux', 25.03) ;
    INSERT INTO emppay (name) values ('hacker') ;
    INSERT INTO emppay  
            SELECT user FROM user ;


    µ¥ÀÌÅ͸¦ ÇѲ¨¹ø¿¡ ÀÔ·ÂÇÏ°í ½ÍÀ» ¶§°¡ ÀÚÁÖ ÀÖÀ» °ÍÀÌ´Ù. ±×·² ¶§´Â copy ¸í·ÉÀ» »ç¿ëÇÏ¸é µÈ´Ù.

    ','´Â ÀԷ½ÿ¡ ÇÊµå ±¸ºÐÀÚÀÌ´Ù. '¡¬'´Â Ç¥ÁØÀԷ¿¡¼­ µ¥ÀÌÅÍ ÀÔ·ÂÀ» Á¾·áÇÒ ¶§ »ç¿ëÇÑ´Ù.
     

    COPY [binary] <class_name> [with oids]
        {to|from} {<filename>|stdin|stdout} [using delimiters <delim>] ;
    mydb=>COPY emppay from stdin using delimiters ',' ;
    Enter info followed by a newline
    End with a backslash and a period on a line by itself.
    >> beginner, 17.03
    >> power user, 20.88
    >> ¡¬.


    copy ´Â ¾Æ½ºÅ° ¸ðµå¿Í ¹ÙÀ̳ʸ® ¸ðµå·Î 󸮵ȴÙ. ±âº»Àº ¾Æ½ºÅ° ¸ðµåÀÌ¸ç ´ëºÎºÐ º° ¹®Á¦¾ø´Ù. °¡²ûÀº ÀÌÁø µ¥ÀÌÅÍ ÆÄÀÏ¿¡¼­ ÀÔ·ÂÀ» ¹Þ°íÀÚ ÇÏ´Â °æ¿ì°¡ ÀÖ´Â °æ¿ì¶ó¸é binary ¿¹¾à¾î¸¦ »ç¿ëÇØ º¼¸¸ ÇÏ´Ù.

    ÆÄÀÏ¿¡¼­ µ¥ÀÌÅ͸¦ ÀÐ¾î ¹Ù·Î Å×ÀÌºí¿¡ ÀúÀåÇÏ°íÀÚ ÇÑ´Ù¸é, psql ÀÇ ³»ºÎ ¸í·É¾îÀÎ ¡¬copy ¸í·ÉÀ» »ç¿ëÇÏ¸é µÈ´Ù. À§ÀÇ copy ¸í·É¿¡¼­ ÆÄÀÏÀ» ´ë»óÀ¸·Î ÇÏ´Â °ÍÀº PostgreSQL ½´ÆÛ»ç¿ëÀÚÀÏ °æ¿ì¿¡¸¸ ÇØ´çµÇ¹Ç·Î psql ¸í·É¾î »ç¿ë ½À°üµéÀÌ´Â °ÍÀÌ ÁÁ´Ù. ³»ºÎ ¹®¹ýÀº ´ÙÀ½°ú °°´Ù.
     

    ¡¬copy class_name {from|filename
    mydb=> ¡¬copy emppay from test.data
    Successfully copied.

     

    ´Ü, ÇÊµå ±¸ºÐÀÚ ÁöÁ¤ÀÌ ¾øÀ¸¹Ç·Î ÁÖÀÇÇØ¾ß ÇÑ´Ù. À̵é copy ¸í·É¿¡¼­ ±âº» ÇÊµå ±¸ºÐÀÚ´Â ½ºÆäÀ̽º°¡ ¾Æ´Ï¶ó Åǹ®ÀÚ(!!)¶ó´Â »ç½ÇÀ» ²À ±â¾ïÇØ¾ß ÇÑ´Ù.

    * µ¥ÀÌÅÍ °»½Å
    UPDATE ´Â µ¥ÀÌÅ͸¦ °»½ÅÇϴµ¥ »ç¿ëµÈ´Ù.
     

    UPDATE classname SET attname-1 = expression-1
         [, attname-i = expression-i]
         [FROM from-list]
         [WHERE qual]

     

    UPDATE emppy
         SET name = 'guru', wage = 25.00
         FROM emppay
         WHERE name = 'hacker' ;

     

    Å×À̺íÀÇ º¯°æ
    °¡²û¾¿ Å×ÀÌºí ¸íÀ» º¯°æÇϰųª, Å×À̺íÀÇ Çʵå¸íÀ» º¯°æÇØ¾ß ÇÒ Çʿ伺ÀÌ ÀÖÀ» °ÍÀÌ´Ù. ¶Ç´Â Å×À̺íÀÇ ±¸Á¶¸¦ º¯°æÇØ¾ß ÇÒ ÇÊ¿äµµ »ý±ä´Ù. ÀÌ·² ¶§ »ç¿ëµÇ´Â ¸í·ÉÀÌ ALTER ÀÌ´Ù. ALTER ´Â Çʵå¿Í Å×À̺í À̸§À» º¯°æÇϰųª, Å×ÀÌºí¿¡ Çʵ带 Ãß°¡ÇÏ´Â ±â´ÉÀ» ÇÑ´Ù. ¾ÆÁ÷ PostgreSQL 6.2 ¿¡¼­´Â ÇʵåÁ¦°Å ±â´ÉÀº µé¾îÀÖÁö ¾Ê´Ù.

    À§¿¡¼­ '*' ´Â PostgreSQL ÀÇ °´Ã¼ÁöÇâÀû Ư¼ºÀ» µå·¯³»´Â Àڱ׸¶ÇÑ Æ¯Â¡ÀÌ´Ù.
     

    ALTER TABLE <class_name> [*] ADD COLUMN <attr> <type>
    ALTER TABLE <class_name> [*] RENAME [column] <attr1> to <attr2>
    ALTER TABLE <class_name1> RENAME to <class_name2>
    ALTER TABLE emppay ADD hireday date;
    ALTER TABLE emppay RENAME hireday to empday ;
    ALTER TABLE emppay RENAME to emppay2;


    Áï, '*' ¸¦ ¸í½ÃÇϸé class_name¿¡¼­ »ó¼Ó¹Þ´Â ¸ðµç Ŭ·¡½º¿¡ ´ëÇØ ÇØ´ç ÀÛ¾÷À» È®ÀåÇÏ´Â °ÍÀÌ´Ù. Ŭ·¡½ºÀÇ »ó¼Ó°ü°è´Â Ŭ·¡½º(Å×À̺í)À» »ý¼ºÇÒ ¶§ ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. ¸¸ÀÏ ÇØ´ç Å×ÀÌºí¿¡¼­ emppay Çʵå¿Í °°ÀÌ Æ¯Á¤ Çʵ带 Á¦°ÅÇÏ·Á°í ÇÑ´Ù¸é, ´çºÐ°£Àº ¹ø°Å·ÓÁö¸¸ ´Ü¼øÀÛ¾÷À» ÇØ¾ß ÇÑ´Ù.
     

    SELECT name, wage
         INTO TABLE tmp
         FROM emppay2 ;
    DROP TABLE emppay2 ;
    ALTER TABLE tmp RENAME TO emppay2 ;

     

    µ¥ÀÌÅÍÀÇ »èÁ¦¿Í Å×À̺íÀÇ Á¦°Å
    µ¥ÀÌÅÍÀÇ »èÁ¦´Â DELETE ¸í·ÉÀ» »ç¿ëÇÑ´Ù.
    WHERE ÀýÀ» »ý·«Çϸé ÇØ´ç Å×À̺íÀÇ µ¥ÀÌÅ͸¦ ¸ðµÎ Áö¿ì°Ô µÇ¹Ç·Î ÁÖÀÇÇØ¾ß ÇÑ´Ù. ±×·¸´Ù ÇÏ´õ¶óµµ Å×À̺í±îÁö Á¦°ÅµÇ´Â °ÍÀº ¾Æ´Ï´Ù. Å×À̺íÀº dropÀ¸·Î Á¦°ÅÇÑ´Ù.
     

    DELETE FROM class_name [WHERE qual]
    DELETE FROM emppay2 WHERE wage = 10 ;


    ¸¸ÀÏ emppay2 ·ÎºÎÅÍ »ó¼ÓÀ» ¹ÞÀº Å×À̺í(Ŭ·¡½º)°¡ ÀÖ´Ù¸é °æ°í°¡ ¶³¾îÁö°í Á¦°ÅµÇÁö ¾Ê´Â´Ù. À̶§¿¡´Â »ó¼Ó¹ÞÀº Å×À̺í(Ŭ·¡½º)ºÎÅÍ Á¦°ÅÇØ¾ß ÇÑ´Ù.
     

    DROP table emppay2 ;

     

    µ¥ÀÌÅÍ °Ë»ö
    µ¥ÀÌÅÍ °Ë»ö(¶Ç´Â ¿­, Ä÷³ ȸ¼ö)Àº À¯¸íÇÑ SELECT ·Î ó¸®ÇÑ´Ù. SELECT ¸¦ ¸ð¸£°í´Â SQL À» ¾È´Ù°í ÇÒ ¼ö ¾ø´Ù. ¹®¹ýÀº ´ÙÀ½°ú °°´Ù.

    distinct ´Â Áߺ¹µÇ´Â µ¥ÀÌÅ͸¦ Çϳª·Î º¸¿©ÁÖ´Â °ÍÀÌ´Ù.
     

    SELECT [distinct]
         expression1 [as attr_name-1]
         {, expression1 [as attr_name-i]}
         [into table clessname]
         [from from-list]
         [where where-clause]
         [group by attr_name1 {, attr_name-i....}
         [order by attr_name1
         [using op1] {, attr_namei [using opi]}


    as ´Â SELECT ÀÇ °á°ú·Î ³ªÅ¸³ª´Â Çʵå¸íÀ» ȸ¼ö½Ã¿¡ ÀÓ½ÃÀûÀ¸·Î º¯°æÇÏ´Â °ÍÀÌ´Ù.
     

    SELECT  µµ½Ã, ÃÖÀú¿Âµµ, ÃÖ°í¿Âµµ
        FROM  ³¯¾¾
        WHERE  µµ½Ã = '¼­¿ï' ;
    SELECT  µµ½Ã, °­¼ö·® as ºñ¿Â·®, ³¯Â¥
        FROM  ³¯¾¾
        WHERE  ³¯Â¥ >= '1997-10-1'
        GROUP BY  ³¯Â¥, ºñ¿Â·®
        ORDER BY  µµ½Ã
        USING  <;


    µû¶ó¼­ ´Ù¸¥ À§Ä¡¿¡¼­ »ç¿ëµÉ ¶§¿¡´Â as ´ÙÀ½ÀÇ Àӽà Çʵå¸íÀ» »ç¿ëÇØ¾ß ÇÑ´Ù. '>=' ´Â ÀϹÝÀûÀ¸·Î »ç¿ëÇÏ´Â ºñ±³ºÎÈ£ÀÌ°í, GROUP BY ´Â ȸ¼öÇÏ´Â µ¥ÀÌÅ͸¦ ¾î¶² µ¢¾î¸®(±×·ì)·Î ¹­À» °ÍÀΰ¡¸¦ ÁöÁ¤Çϸç, ORDER BY ´Â Á¤·Ä±âÁØÀ» ³ªÅ¸³½´Ù. PostgreSQL ¿¡¼­´Â ASC, DESC ´ë½Å¿¡ 'USING<'¿Í 'USING>'¸¦ »ç¿ëÇÏ¿© ¿À¸§Â÷¼ø, ³»¸²Â÷¼øÀ¸·Î Á¤·ÄÇÒ ¼öµµ ÀÖ´Ù.

    SELECT¿¡¼­ Ŭ·¡½ºÀÇ »ó¼Ó¼ºÀ» ÀÌ¿ëÇÏ¿© µ¥ÀÌÅ͸¦ °Ë»öÇÒ ¼öµµ ÀÖ´Ù.
    ÀÌ °æ¿ì¿¡´Â SELECT ½Ã¿¡ emppay¿¡¼­ »ó¼Ó¹ÞÀº ¸ðµç Ŭ·¡½º¸¦ Æ÷ÇÔÇÏ¿© °Ë»öÇÑ´Ù.
     

    SELECT c.name, c.wage
    FROM emppay* c
    WHERE c.wage>= 10 ;


    '*' °¡ ¿ª½Ã »ó¼Ó Ŭ·¡½º±îÁö¸¦ Æ÷ÇÔÇϴ Ŭ·¡½º ¿ÀÆÛ·¹ÀÌÅÍÀÌ´Ù. PostgreSQL ÀÇ SQL¿¡¼­ Á¤±ÔÇ¥Çö½Ä(regex)À» »ç¿ëÇÏ¿© µ¥ÀÌÅ͸¦ °Ë»öÇÒ ¼ö ÀÖ´Ù. Á¤±ÔÇ¥Çö½Ä °Ë»öÀ» Àß È°¿ëÇÏ¸é º¹ÀâÇÑ ÀÛ¾÷µµ ½±°Ô »ç¿ëÇÒ ¼ö ÀÖ´Ù´Â °ÍÀ» Àß ¾Ë°í ÀÖÀ» °ÍÀÌ´Ù. A ~ B´Â A°¡ Á¤±ÔÇ¥Çö½Ä B¸¦ Æ÷ÇÔÇÑ´Ù´Â °ÍÀÌ´Ù. ´ë¼Ò¹®ÀÚ¸¦ ¹«½ÃÇÏ¿© °Ë»öÇÏ·Á¸é A ~ *B¸¦ »ç¿ëÇÏ¸é µÈ´Ù. Æ÷ÇÔÇÏÁö ¾Ê´Â °ÍÀ» °Ë»öÇÒ ¶§¿¡´Â !¸¦ ¾Õ¿¡ ºÙÀÌ¸é µÈ´Ù.

    Á¤±ÔÇ¥Çö½Äº¸´Ù Á»´õ »ç¿ëÇϱ⠽¬¿î ¿ÍÀϵåÄ«µå´Â like¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.
     

    ^|][[:alpha:]]{5}/[[:digit:]]{2}' as find
        find
        ---
        f
        (1 row)


    PostgreSQL ÀÇ SELECT Àý¿¡¼­ ¾ÆÁ÷ HAVING Àý°ú º¸Á¶ SELECT ¸¦ Áö¿øÇÏÁö ¾Ê°í ÀÖ´Ù. ±× ¿ÜÀÇ ±â´ÉÀº ÀÏ¹Ý SQL °ú °°´Ù.

     

2) ºä

    ºä´Â ÀÏÁ¾ÀÇ °¡»ó Å×À̺íÀÌ´Ù. Áï, ½ÇÁ¦·Î´Â ÇÏµå µð½ºÅ©¿¡ ¾î¶°ÇÑ µ¥ÀÌÅ͸¦ ¹°¸®ÀûÀ¸·Î ÀúÀåÇÏ°í ÀÖÁö´Â ¾ÊÁö¸¸, Å×À̺í°ú ºñ½ÁÇÏ°Ô º¸ÀÌ´Â °ÍÀÌ´Ù. ºäµµ ÇϳªÀÇ °³Ã¼À̸ç, ½ÇÁ¦·Î´Â ÇϳªÀÇ ÁúÀǾîÀÌ´Ù. ºä¸¦ ó¸®ÇÒ ¶§´Â ÀÏ¹Ý Å×À̺íó·³ ÇÏ¸é µÈ´Ù. ÇÏÁö¸¸ ºä´Â Å×À̺íó·³ Á¤ÀûÀÎ °ÍÀÌ ¾Æ´Ï¶ó, ºä¿¡ ¿µÇâÀ» ¹ÌÄ¡´Â Å×À̺íÀ̳ª °´Ã¼ÀÇ º¯µ¿¿¡ µû¶ó¼­ ¹Î°¨ÇÏ°Ô º¯È­ÇÏ´Â µ¿ÀûÀÎ °´Ã¼ÀÎ °ÍÀÌ´Ù. ºäÀÇ »ý¼ºÀº ÀÏ¹Ý Å×À̺íÀ» »ý¼ºÇÒ ¶§ »ç¿ëÇÏ´Â ¹æ¹ý°ú´Â ´Ù¸£°í, SELECT ·Î ¿øÇÏ´Â µ¥ÀÌÅ͸¦ ȸ¼öÇÑ ÈÄ »õ·Î¿î Å×ÀÌºí¿¡ »ðÀÔÇÏ´Â ¹æ¹ý°ú ºñ½ÁÇÏ´Ù.

    ³¯¾¾¶ó´Â Å×ÀÌºí¿¡¼­ µµ½Ã°¡ ¼­¿ïÀÎ °Í¸¸ ¼±ÅÃÇؼ­ ¼­¿ï ³¯¾¾¶ó´Â ºä¸¦ ¸¸µé¾ú´Ù.
     

    create view view_name as
         select expression1 [as attr_name1]
         {, expression_i [as attr_namei]}
         [from from.last]
         where qual

    mydb=> CREATE VIEW ¼­¿ï³¯¾¾ as
    mydb-> select*
    mydb-> from ³¯¾¾
    mydb-> where µµ½Ã = '¼­¿ï' ;
    CREATE
    mydb=> select*from ¼­¿ï³¯¾¾ ;
     

    µµ½Ã

    ÃÖÀú¿Âµµ

    ÃÖ°í¿Âµµ

    °­¼ö·®

    ³¯Â¥

    ¼­¿ï

    10

    27

    0

    10-01-1997

    ¼­¿ï

    12

    25

    0.12

    10-02-1997

    (2 rows)


    ¿©±â¿¡¼­ ¼­¿ï³¯¾¾ ºä´Â ³¯¾¾ Å×ÀÌºí¿¡ ÀÇÁ¸À» Çϸç, ³¯¾¾ Å×ÀÌºí¿¡¼­ ¼­¿ï³¯¾¾ ºäÀÇ »ý¼ºÁ¶°ÇÀ» ¸¸Á·½ÃÅ°´Â µ¥ÀÌÅÍ°¡ ÀÔ·ÂµÇ¸é ¼­¿ï³¯¾¾ ºä¿¡µµ ÀÔ·ÂµÈ °ÍÀ¸·Î 󸮵ȴÙ. ÀÌ°ÍÀ» ´ÙÀ½¿¡¼­ È®ÀÎÇغ¸ÀÚ

    ³¯¾¾ Å×ÀÌºí¿¡ ÀÔ·ÂÇÑ 12¿ù2ÀÏÀÚ µ¥ÀÌÅÍ°¡ ¼­¿ï³¯¾¾ ºä¿¡ µé¾î¿Í ÀÖ´Â °ÍÀ» ¾Ë ¼ö ÀÖ´Ù.
      

    mydb=> insert into ³¯¾¾ values('¼­¿ï', -10,8,0.0, '1997-12-2') ;
    INSERT 535891 1
    mydb=> select*from ¼­¿ï³¯¾¾ ;
     

    µµ½Ã

    ÃÖÀú¿Âµµ

    ÃÖ°í¿Âµµ

    °­¼ö·®

    ³¯Â¥

    ¼­¿ï

    10

    27

    0

    10-01-1997

    ¼­¿ï

    12

    25

    0.12

    10-02-1997

    ¼­¿ï

    -10

    8

    0

    12-02-1997

    (3 rows)


    ±× ¿ªÀº ¼º¸³ÇÏÁö ¾Ê´Â´Ù. Áï, ¼­¿ï³¯¾¾ ºä¿¡ Á¶°ÇÀ» ¸¸Á·½ÃÅ°´Â µ¥ÀÌÅ͸¦ ÀÔ·ÂÇÑ´Ù°í Çؼ­ ³¯¾¾Å×ÀÌºí¿¡ ³ªÅ¸³ªÁö´Â ¾Ê´Â ´Ù´Â °ÍÀÌ´Ù. ´ÙÀ½¿¡¼­ È®ÀÎÇÒ ¼ö ÀÖ´Ù.
     

    mydb=> insert into ¼­¿ï³¯¾¾ values ('¼­¿ï', -5, 10, 0.0, '1997-12-1') ;
    INSERT 535892 1
    mydb=> select*from ³¯¾¾ where µµ½Ã = '¼­¿ï' ;
     

    µµ½Ã

    ÃÖÀú¿Âµµ

    ÃÖ°í¿Âµµ

    °­¼ö·®

    ³¯Â¥

    ¼­¿ï

    10

    27

    0

    10-01-1997

    ¼­¿ï

    12

    25

    0.12

    10-02-1997

    ¼­¿ï

    -10

    8

    0

    12-02-1997

    (3 rows)

     

    ¸¸ÀÏ, ¼­¿ï³¯¾¾ ºäÀÇ »ý¼ºÁ¶°ÇÀ» ¸¸Á·½ÃÅ°Áö ¾Ê´Â µ¥ÀÌÅÍ°¡ ºä¿¡ ÀԷµǸé, ¾î¶² °á°ú°¡ ³ªÅ¸³¯±î? Çѹø È®ÀÎÇغ¸ÀÚ.

     

    mydb=> insert into ¼­¿ï³¯¾¾ values('ºÎ»ê', 1, 15, 0.0, '1997-12-2') ;
    INSERT 535893 1
    mydb=> select*from ³¯¾¾ where µµ½Ã = 'ºÎ»ê';
     

    µµ½Ã

    ÃÖÀú¿Âµµ

    ÃÖ°í¿Âµµ

    °­¼ö·®

    ³¯Â¥

    ºÎ»ê

    13

    28

    0.32

    10-01-1997

    (3 rows)


    ¼­¿ï³¯¾¾ ºä¿¡µµ ºäÀÇ »ý¼ºÁ¶°ÇÀ» ¸¸Á·½ÃÅ°Áö ¸øÇÏ´Â µ¥ÀÌÅÍ´Â ¿¡·¯´Â »ý±âÁö ¾Ê¾ÒÁö¸¸ ¹Þ¾ÆµéÀÌÁö ¾Ê°í ÀÖÀ½À» ¾Ë ¼ö ÀÖ´Ù.
     

    mydb=> select*from ¼­¿ï³¯¾¾ ;
     

    µµ½Ã

    ÃÖÀú¿Âµµ

    ÃÖ°í¿Âµµ

    °­¼ö·®

    ³¯Â¥

    ¼­¿ï

    10

    27

    0

    10-01-1997

    ¼­¿ï

    12

    25

    0.12

    10-02-1997

    ¼­¿ï

    -10

    8

    0

    12-02-1997

    (3 rows)

    mydb=> drop view ¼­¿ï³¯¾¾ ;
    DROP
    mydb=>


    ±×¸®°í º»·¡ÀÇ ³¯¾¾ Å×ÀÌºí¿¡µµ µ¥ÀÌÅÍ°¡ Ãß°¡µÇÁö ¾Ê¾Ò´Ù. ¿©±â¿¡¼­ º¸¾ÒµíÀÌ ºä´Â ÀϹÝÀûÀ¸·Î Å×À̺í°ú ºñ½ÁÇÏ°Ô Ãë±ÞµÇÁö¸¸, ºäÀÇ »ý¼º ±â¹ÝÀÌ µÈ Å×À̺í°úÀÇ °ü°è¿Í ºä¸¦ »ý¼º½ÃŲ Á¶°Ç¿¡ ¿µÇâÀ» ¹Þ´Â´Ù´Â °ÍÀÌ Å×À̺í°ú´Â ´Ù¸¥ Á¡ÀÌ´Ù.

     

3) À妽º

    PostgreSQL ¿¡¼­´Â B-tree¿Í R-treeÀÇ µÎ °¡Áö Àε¦½Ì ¹æ½ÄÀ» Áö¿øÇÏ°í ÀÖ´Ù. ÀÌµé ¾Ë°í¸®ÁòÀº Á¢±Ù¹æ½Ä(access method)À̶ó°í ºÒ¸®¿ì¸ç, À妽º »ý¼º½Ã¿¡ »ç¿ëÀÚ°¡Á÷Á¢ ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. B-tree ´Â ÁÖ·Î ÀϹÝÀûÀÎ Å°ÀÇ Àε¦½Ì¿¡ »ç¿ëµÇ¸ç, R-tree´Â »ç°¢Çü ÄÄÆ÷³ÍÆ®ÀÇ °ü°è¸¦ Ç¥ÇöÇϴµ¥ »ç¿ëµÈ´Ù. µû¶ó¼­, Ư¼öÇÑ °øÇп뵵°¡ ¾Æ´Ï¶ó¸é R-tree´Â ½Å°æ¾²Áö ¾Ê¾Æµµ µÇ¸ç, ±âº» Á¢±Ù¹æ½ÄÀº B-tree ÀÌ´Ù.

    ¿©±â¿¡¼­ am-name Àº Á¢±Ù¹æ½Ä(access method)À̸ç, funcnameÀº Àε¦½Ì¿¡ »ç¿ëÇÒ »ç¿ëÀÚ Á¤ÀÇ ÇÔ¼öÀÌ´Ù.
     

    create [unique] index index-name
         on classname [using am-name]
         ( attname [type_class], ...)

    create [unique] index index-name
         on classname [using am-name]
         ( funcname (attname-1 {, attname-i}) type_class)


    °¡²û Ư¼öÇÑ µ¥ÀÌÅÍŸÀÔ¿¡ À־ »ç¿ëÀÚ°¡ Á÷Á¢ ÇÔ¼ö¸¦ ÀÛ¼ºÇÏ¿© Àε¦½Ì¿¡ ÀÌ¿ëÇÏ´Â °ÍÀÌ ¼Óµµ Çâ»ó¿¡ »ó´çÇÑ È¿°ú¸¦ °ÅµÑ ¼ö ÀÖ´Ù. À妽º¸¦ ¸¸µé ¶§, ÇϳªÀÇ Ä÷³¿¡¸¸ À妽º¸¦ ºÎ¿©ÇÒ ¼öµµ ÀÖ°í, ¿©·¯ °³ÀÇ Ä÷³¿¡ µ¿½Ã¿¡ À妽º¸¦ ºÎ¿©ÇÒ ¼öµµ ÀÖ´Ù. ¿¹¸¦ µé¾î, ³¯¾¾ Å×À̺íÀÇ µµ½Ã Ä÷³¿¡ À妽º¸¦ »ý¼ºÇØ º¸ÀÚ.

    unique index ´Â Áߺ¹µÇÁö ¾ÊÀº À¯ÀÏÇÑ À妽º¸¦ ¸»ÇÑ´Ù.
     

    mydb=> create index weather_index on ³¯¾¾ using btree(µµ½Ã) ;
    CREATE
    mydb=> drop index weather_index ;
    DROP
    mydb=> create index weather_index on ³¯¾¾ (µµ½Ã, ³¯Â¥) ;
    CREATE
    mydb=> drop index weather_index ;
    DROP 
    mydb=> create index weather_index on ³¯¾¾ (µµ½Ã, ³¯Â¥) ;
    CREATE
    mydb=> drop index weather_index ;
    DROP 
    mydb=>


    PostgreSQL 6.2 ¿¡¼­´Â B-tree¹æ½Ä¿¡¼­¸¸ ´ÙÁß Ä÷³¿¡ ´ëÇÑ À妽º¸¦ Áö¿øÇϸç, ÃÑ 7°³ÀÇ Ä÷³±îÁö °¡´ÉÇÏ´Ù.

     

4) ÇÔ¼ö

    PostgreSQL ¿¡¼­ ÇÔ¼ö´Â SQL ÇÔ¼ö¿Í ÇÁ·Î±×·¡¹Ö ¾ð¾î ÇÔ¼ö°¡ ÀÖ´Ù. ÇÁ·Î±×·¡¹Ö ¾ð¾îÇÔ¼ö´Â ÁÖ·Î C·Î ÀÛ¼ºµÇ¸ç, SQL ÇÔ¼ö´Â SQL ÁúÀǾî·Î °£´ÜÈ÷ Á¤ÀÇÇÑ´Ù.  ÀÌµé ¸ðµÎ PostgreSQL¿¡¼­ Á¤ÇÑ ±ÔÄ¢¿¡ µû¶ó¼­ ÀÛ¼ºÇØ¾ß ÇÑ´Ù.

    À̵é ÇÔ¼ö¸¦ »ç¿ëÇϸé subselect ±â´ÉÀ» ´ë½ÅÇÒ ¼ö ÀÖ´Ù.
     

    create  function  function_name
         ([type1 {, type-n}])
         returns type-r
         as {'/full/path/to/objectfile' | 'sql-queries'}
         language {'c' 'sql' 'internal'}


    ¸ÕÀú SQL ÇÔ¼ö¸¦ ¸¸µå´Â ¿¹¸¦ µé¾îº¸°Ú´Ù. '³¯¾¾' Å×ÀÌºí¿¡¼­ 'µµ½Ã'¸¦ ÀÎÀÚ·Î ÁÖ¸é Æò±Õ°­¼ö·®À» ±¸ÇÏ´Â ÇÔ¼ö¸¦ Á¤ÀÇÇÑ´Ù.

    ¿©±â¿¡¼­ ÇÔ¼ö¸í°ú ÇÔ²² ÇÔ¼öÀÎÀÚ¸¦ varchar ·Î Á¤ÀÇÇÏ¿´´Âµ¥, text, float8 ÀÇ Á¤±Ôµ¥ÀÌÅÍ Å¸ÀÔÀ̳ª Å×À̺í¸íµµ ÀÎÀÚ·Î ÁÙ ¼ö ÀÖ´Ù.
     

    mydb=> ¡¬d ³¯¾¾ ;

    Table = ³¯¾¾
     

    Field

    Type

    Length

    µµ½Ã

    varchar

    20

    ÃÖÀú¿Âµµ

    int4

    4

    ÃÖ°í¿Âµµ

    int4

    4

    °­¼ö·®

    float8

    8

    ³¯Â¥

    date

    4


    mydb=> create function °­¼ö·®Æò±Õ(varchar) returns float8
    mydb-> as 'select avg(°­¼ö·®) from ³¯¾¾ where µµ½Ã = $1 ;' language'sql' ;
    CREATE
    mydb=> select °­¼ö·®Æò±Õ('¼­¿ï') ;
    °­¼ö·®Æò±Õ
             0.04
    (1 row)

    mydb=>select °­¼ö·®Æò±Õ('ºÎ»ê') ;
    °­¼ö·®Æò±Õ
             0.32
    (1 row)

    mydb=>


    ¿©±â¿¡¼­ $1Àº SQL ÇÔ¼ö ³»ºÎ¿¡¼­ ÀÎÀÚ¸¦ ÂüÁ¶ÇÏ´Â ¹æ¹ýÀÌ´Ù. C ¾ð¾î·Î ÇÔ¼ö¸¦ ¸¸µå´Â ¹æ¹ýÀº PostgreSQL ¼Ò½º µð·ºÅ丮ÀÇ contrib ¾ÈÀÇ ¿©·¯ ¼Ò½º¸¦ Âü°íÇÏ¸é ´ëÃæ ¾Ë ¼ö ÀÖÀ» °ÍÀÌ´Ù. C ¼Ò½º·Î SQL ÇÔ¼ö¸¦ ÀÛ¼ºÇÏ¿´´Ù¸é, -fpic ¿É¼ÇÀ¸·Î ÀÏÂ÷ ÄÄÆÄÀÏÀ» ÇÑ´Ù.
    À½, -shared ¿É¼ÇÀ» »ç¿ëÇÏ¿© so °øÀ¯ ¿ÀºêÁ§Æ® ÆÄÀÏ·Î ¸¸µé¾î¾ß ÇÑ´Ù.  
    ±× ´ÙÀ½ create functionÀ» »ç¿ëÇÏ¿© ÇÔ¼ö¸¦ Á¤ÀÇÇÑ´Ù.
     

    $ gcc  -fpic  -c  -o datetime_functions.o  datetime_functions.c
              -l../../src/include -l../../src/backend
    $ gcc  -shared  -o datetime_functions.so  datetime_functions.o

    $ psql mydb

    mydb=> create function currentdate() returns date
    mydb-> as '/usr/local/pgsql/lib/datetime_function.so' language 'c' ;
    CREATE

    mydb=>select currentdate() ;
    currentdate
    --------
      12-09-1997
    (1 row)

    mydb=>

     

5) ·ê

    ·êÀº Æ®¸®°Å¿Í À¯»çÇÑ PostgreSQL ÀÇ È®Àå SQL ºÎºÐÀÌ´Ù.

     

6) Æ®¸®°Å

     

         create rule rule_name
             as on event
               to object [where clause]
             do [instead]
             [action | nothing | [actions...]]

    mydb=> create table ǥ1 (i int4) ;
    CREATE
    mydb=> create table ǥ2 (i int4) ;
    CREATE 
    mydb=> create rule ±ÔÄ¢1 as on insert to Ç¥1 do [insert into Ç¥2 values(new.i)] ;
    CREATE 
    mydb=> insert into ǥ1 values (10) ;
    INSERT 535999 1
    mydb=> select *from ǥ1
    i
    --
    10
    (1 row)

    mydb=> select *from ǥ2
    i
    --
    10
    (1 row)

    mydb=>


    PostgreSQL¿¡¼­ Æ®¸®°Å¸¦ Áö¿øÇϱâ Àü±îÁö ·ê ½Ã½ºÅÛÀÌ ´ë½ÅÇØ¿Ô´Ù. ±âº»ÀûÀÎ ±â´ÉÀº ·ê°ú ºñ½ÁÇϳª Æ®¸®°Å´Â Á» ´õ Ç¥ÁØÀÌ´Ù.

    EventX ´Â INSERT, DELETE, UPDATE Áß ÇϳªÀÌ´Ù.
     

    create trigger trigname {before | after}
        {Event1 [OR Event2 [OR Event3]]}
         on relname for each {row | statement}
         execute procedure funcname (arguments)


    create trigger ±¸¹®Àº »õ·Î¿î Æ®¸®°Å¸¦ ¸¸µé¾î¼­ ÇöÀçÀÇ µ¥ÀÌÅͺ£À̽º¿¡ Áý¾î ³Ö´Â´Ù. Æ®¸®°Å´Â relname °´Ã¼»ó¿¡¼­ EventX »ç°ÇÀÌ ¹ß»ýÇÑ ÀüÈÄ¿¡, ÁöÁ¤ÇÑ ÇÔ¼öÀÎ funcname À» ½ÇÇàÇÑ´Ù. ÇöÀç PostgreSQL ¿¡¼­ Æ®¸®°Å´Â statement °¡ ±¸ÇöµÇ¾î ÀÖÁö ¾Ê´Ù. ±×¸®°í ÀϹÝÀûÀÎ SQL ¿¡´Â °ÅÀÇ »ç¿ëÇÏÁö ¾Ê°í, ÇÁ·Î±×·¡¹Ö ÀÎÅÍÆäÀ̽º·Î ±¸ÇöµÇ¾î ÀÖ´Ù. ÀÚ¼¼ÇÑ ³»¿ëÀº PostgreSQL ¼Ò½º µð·ºÅ丮ÀÇ doc¿¡ º¸¸é trigger ¸Þ´º¾óÀÌ ÀÖÀ¸´Ï Âü°íÇϱ⠹ٶõ´Ù.

     

7) ½ÃÄö½º

    ½ÃÄö½º´Â ¸»±×´ë·Î ÀϷùøÈ£ ¹ß»ý±âÀÌ´Ù. µ¥ÀÌÅͺ£À̽ºÀÇ Æ¯Á¤ Å×À̺íÀÇ ·Î¿ì¿¡, È¿À²ÀûÀÎ °ü¸®¸¦ À§ÇØ ÀϹÝÀûÀ¸·Î ÀϷùøÈ£¸¦ ºÙÀÏ Çʿ伺ÀÌ ÀÖ´Ù.

    seqname Àº ÀϷùøÈ£ »ý¼º±âÀÇ À̸§ÀÌ´Ù. increment´Â Çѹø¿¡ Áõ°¡½Ãų °ªÀ¸·Î, À½¼ö¿Í ¾ç¼ö°¡ µÉ ¼ö ÀÖÀ¸¸ç, ±âº» °ªÀº 1ÀÌ´Ù.
     

    create sequence seqname
         [increment incby_value]
         [minvalue min_value]
         [maxvalue max_value]
         [start start_value]
         [cache cache_value]
         [cycle] 


    minvalue ´Â ÀϷùøÈ£ÀÇ ÃÖ¼Ò°ªÀ¸·Î, Áõ°¡½Ã¿¡´Â 1, °¨¼Ò½Ã¿¡´Â -2147483647ÀÌ´Ù. maxvalue´Â ÀϷùøÈ£ÀÇ ÃÖ´ë°ªÀ¸·Î, Áõ°¡½Ã¿¡´Â 2147483647, °¨¼Ò½Ã¿¡´Â -1ÀÌ´Ù. start °ªÀº ÀϷùøÈ£ÀÇ Ã¹ ¹ø° °ªÀ¸·Î, Áõ°¡½Ã¿¡´Â minvalue °¡ »ç¿ëµÇ°í, °¨¼Ò½Ã¿¡´Â maxvalue °¡ »ç¿ëµÈ´Ù. cashe ´Â ij½¬¿¡ °ü·ÃµÇ´Â °ÍÀ¸·Î ÀϹÝÀûÀ¸·Î »ç¿ëÇÒ ÇÊ¿ä´Â ¾ø´Ù. cycle ´Â ÀϷùøÈ£¸¦ ´Ù½Ã óÀ½ºÎÅÍ ¸Å±â´Â °ÍÀ» ¸»ÇÑ´Ù. ¸Å ´Ü°èÀÇ ÀϷùøÈ£ÀÇ °ªÀ» ¾ò´Â ÇÔ¼ö´Â nextval ÀÌ´Ù. ÀϹÝÀûÀ¸·Î »ç¿ëµÇ´Â ÀϷùøÈ£´Â 1ºÎÅÍ ½ÃÀÛÇÏ¿© 1¾¿ Áõ°¡½ÃÅ°´Â °æ¿ì°¡ ¸¹´Ù. ÀÌ °æ¿ì¿¡´Â ´ÙÀ½°ú °°ÀÌ °£´ÜÇÏ°Ô »ç¿ëÇÑ´Ù.

    100ºÎÅÍ 100¾¿ Áõ°¡ÇÏ´Â ÀϷùøÈ£¸¦ »ý¼ºÇÏ·Á¸é ´ÙÀ½°ú °°ÀÌ ÇÏ¸é µÈ´Ù.
     

    mydb=> create table t1(num int4, name text) ;
    CREATE 
    mydb=> create sequence t1_seq ;
    CREATE 
    mydb=> insert into t1 values (nextval ('t1_seq'), 'Çѵ¿ÈÆ') ;
    INSERT 536037 1
    mydb=> insert into t1 values (nextval ('t1_seq'), 'À̱Լº') ;
    INSERT 536038 1
    mydb=> insert into t1 values (nextval ('t1_seq'), 'Á¤¿ë¼®') ;
    INSERT 536039 1
    mydb=> select *from t1
     

      num

      name

      1

      Çѵ¿ÈÆ

      2

      À̱Լº

      3

      Á¤¿ë¼®


    (3 rows)
    mydb=> select currval ('t1_seq')
    currval
    ---
        3
    (1 row)
    mydb=>

 

8) Æ®·£Àè¼Ç
 

    create sequence seq_100 increment 100 start 100 ;


    SQL ¿¡¼­ Æ®·£Àè¼ÇÀº ¾ø¾î¼­´Â ¾ÈµÇ´Â Áß¿äÇÑ °³³äÀÌ´Ù. º¸Åë ÇϳªÀÇ µ¥ÀÌÅͺ£À̽º¸¦ ¿©·¯¸íÀÌ µ¿½Ã¿¡ »ç¿ëÇÏ°Ô µÈ´Ù. ÀÌ °æ¿ì¿¡ °¢°¢ÀÇ »ç¿ëÀÚ°¡ µ¥ÀÌÅͺ£À̽º¿¡ °¡ÇÑ ÀÏÁ¤ ÀÛ¾÷ÀÇ ±¸°£À» ÀýÁ¤ÇÏ¿©, µ¥ÀÌÅͺ£À̽º¿¡ °¡ÇÑ ¿µÇâÀ» ¼ö¿ëÇϰųª Ãë¼ÒÇÒ ¼ö ÀÖµµ·Ï ÇÏ´Â ±â´ÉÀ» Á¦°øÇÏ´Â °ÍÀÌ Æ®·£Àè¼ÇÀÇ Áß¿ä±â´ÉÀÌ´Ù.
    °¡·É, ¾î´À µ¥ÀÌÅͺ£À̽º »ç¿ëÀÚ°¡ ¿À´ÃÀº µµ¼­Á¤¸®¸¦ ÇÑ´Ù°í °¡Á¤ÇØ º¸ÀÚ. ÀÌ ÀÛ¾÷ÀÌ ±âÁ¸ÀÇ ÀÛ¾÷°ú ±¸º°µÇ°í, µ¿ÀÏÇÑ ¿¬Àå¼±»ó¿¡ ÀÖÁö ¾Ê´Ù¸é, Æ®·£Àè¼ÇÀÇ ½ÃÀÛÁ¡(begin)À» ¼³Á¤ÇÏ°í ÀÏÁ¤½Ã°£ ÀÛ¾÷À» °è¼ÓÇØ ³ª°¡°Ô µÈ´Ù. ±×·¯´Ù ÀÏÁ¤ÀÛ¾÷´ÜÀ§°¡ ³¡³ª¸é, ±×°£¿¡ µ¥ÀÌÅͺ£À̽º¿¡ °¡ÇÑ º¯È­¸¦ ½ÂÀÎÇÏ·Á¸é commit (¶Ç´Â end)¸¦, °è»êÀÌ À߸ø µÇ¾î¼­ Ãë¼ÒÇÏ°í ½ÍÀ¸¸é, rollback (¶Ç´Â abort)À» »ç¿ëÇÒ °ÍÀÌ´Ù. PostgreSQL ¿¡¼­ Á¦°øÇÏ´Â Æ®·£Àè¼Ç 󸮱â´ÉÀº ±×¸® ¼¼ºÎÀûÀÌÁö ¸øÇÏ´Ù. Æ®·£Àè¼Ç ±¸°£ ÀÛ¾÷󸮸¦ Á¤¹ÐÇÏ°Ô Á¦¾îÇÒ ¼ö ÀÖ°Ô µÈ´Ù. PostgreSQLÀº Æò¸éÀû, 1±¸°£ Æ®·£Àè¼ÇÀÇ ½ÂÀÎÀº end, Ãë¼Ò´Â abort·Î ÇÑ´Ù. commitÀº end ¿Í °°°í, rollbackÀº abort¿Í °°´Ù.

    °£´ÜÇÑ ¿¹¸¦ µé¾îº¸ÀÚ

     

9) ÅëÁö¿Í ûÃë
 

    mydb=> create table test2 (num int4) ;
    CREATE
    mydb=> insert into test2 values (1)
    INSERT 536270 1
    mydb=> insert into test2 values (2)
    INSERT 5362701
    mydb=> select *from test2 ;
    num
    ----
    1
    2
    (2 rows)

    mydb=> begin ;
    BEGIN
    mydb=> insert into test2 values (3)
    INSERT 5362702 1
    mydb=> select *from test2 ;
    num
    ----
    1
    2
    3
    (3 rows) 

    mydb=> abort ;
    ABORT
    mydb=> select *from test2 ;
    num
    ----
    1
    2
    (2 rows)

    mydb=> begin ;
    BEGIN
    mydb=> delete from test2 where num = 2
    DELETE 1
    mydb=> end ;
    END
    mydb=> select *from test2 ;
    num
    ----
    1
    (1 rows) 

    mydb=>


    ´Ù¸¥ ¼¼¼Ç¿¡¼­,
     

    mydb=> create table Å×½ºÆ®1 (i int4) ;
    CREATE
    mydb=> notify Å×½ºÆ®1 ;
    NOTIFY


    notify ´Â µ¿½Ã¼º¿¡ °ü·ÃµÈ Å뺸¸¦ ÇÏ°í, listen Àº ±×°ÍÀ» ûÃëÇÑ´Ù.
     

    mydb=> listen Å×½ºÆ®1 ;
    LISTEN
    mydb=>
    mydb=> select *from Å×½ºÆ®1 ;
    i
    -
    (0 rows)

    ASYNC NOTIFY of 'Å×½ºÆ®' from backend pid '14126' received
    mydb=>


    ±×³É listen ¸¸ÇÑ »óÅ¿¡¼­´Â ¾Æ¹«·± ÀÏÀÌ ÀϾÁö ¾Ê´Â´Ù.

    ½ÄÀ¸·Î listen ÇÒ Å×À̺í(Ŭ¶ó½º) À̸§À» ÁöÁ¤Çϸé, ÀÌÈÄ¿¡ ´Ù¸¥ ÇÁ·Î¼¼½º(°°Àº ÇÁ·Î¼¼½ºµµ Æ÷ÇÔÇÏ¿©)°¡ ÇØ´ç notify¸¦ ÇÏ°ÔµÇ¸é ±×¶§¼­¾ß listen ÇÁ·Î¼¼½º´Â ¾î´À ÇÁ·Î¼¼½º°¡ notify¸¦ º¸³Â´Ù´Â Å뺸¸¦ ¹Þ´Â´Ù.
     

    listen class_name ;


    ±×¸® À¯¿ëÇÑ ÁúÀǾî´Â ¾Æ´ÏÁö¸¸, °°Àº Å×ÀÌºí¿¡ µ¿½ÃÀûÀ¸·Î Á¢±ÙÇÏ´Â ÇÁ·Î¼¼½º°£¿¡ ¾à°£ÀÇ Á¤º¸(ÇÁ·Î¼¼½º ¹øÈ£)¸¦ ±³·ùÇϱâ À§ÇÑ °ÍÀÌ´Ù. Áï, ´©°¡ Áö±Ý ¾î´À Å×À̺íÀ» °Çµå¸®°í ÀÖ´Ù...´Â Á¤µµÀÌ´Ù. libpq ¿¡µµ ÀÌ¿¡ »óÀÀÇÏ´Â ±âº» ÇÔ¼ö°¡ ÀÖ±ä ÇÏÁö¸¸, °ÅÀÇ ¾²ÀÌÁö ¾Ê´Â µí ÇÏ´Ù.

     

10) Ŭ·¯½ºÆ®¸µ

    PostgreSQL¿¡¼­ Ŭ·¯½ºÆ®¸µÀº À妽º¿¡ ±âÃÊÇÏ¿© µ¥ÀÌÅ͸¦ ¹°¸®ÀûÀ¸·Î ÀçÁ¤·ÄÇÏ´Â °ÍÀÌ´Ù. ÇϳªÀÇ Å¬·¡½ºÀÎ classname »óÀÇ À妽ºÀÎ indexname ¿¡ ±âÃÊÇÏ¿© PostgreSQL °¡ Ŭ·¯½ºÆ®¸µ ÀÛ¾÷À» ¼öÇàÇϵµ·Ï Áö½ÃÇÏ´Â ¸í·ÉÀÌ´Ù. indexname Àº classname »ó¿¡ ¹Ì¸® Á¤ÀǵǾî ÀÖ¾î¾ß ÇÑ´Ù. Ŭ·¡½ºÀÇ Å©·¯½ºÅÍ´Â Æı«µÈ´Ù. Áï, Ŭ·¯½ºÆ®¸µÀº Á¤Àû(static)À̸ç, »ç¿ëÀÚ°¡ ¿øÇÒ °æ¿ì ¾ðÁ¦µçÁö ´Ù½Ã Ŭ·¯½ºÆ®¸µÀ» ¼öÇàÇÒ ¼ö ÀÖ´Ù.
     

    mydb=> create index ³¯¾¾À妽º on ³¯¾¾(µµ½Ã) ;
    CREATE
    mydb=> cluster ³¯¾¾À妽º on ³¯¾¾ ;
    CLUSTER
    mydb=>

     

11) 񀀥

    grant
    µ¥ÀÌÅͺ£À̽º¸¦ »ç¿ëÇÏ´Ùº¸¸é »ç¿ëÀÚ¿¡°Ô µ¥ÀÌÅͺ£À̽º Á¢±Ù±ÇÇÑÀ» ³Ñ°ÜÁְųª Á¦ÇÑÇÏ¿©¾ß ÇÒ ÇÊ¿ä°¡ ÀÖ´Ù. ÀÌ·² ¶§ »ç¿ëÇÏ´Â ¸í·ÉÀÌ grant ÀÌ´Ù. ¸» ±×´ë·Î ½Â³«ÇÑ´Ù´Â ¶æÀÌ´Ù.

    privilege ´Â ALL, SELECT, INSERT, UPDATE DELETE, RULE ÁßÀÇ Çϳª ÀÌ»óÀÌ µÉ ¼ö ÀÖ´Ù.
     

    grant <privilege[,privilege...]>
         on <rel1>[,...<reln>]
         to [public | group <group> | <username>]


    ±âº»ÀûÀ¸·Î ÇϳªÀÇ Å×À̺íÀº PostgreSQL ÀÇ ¸ðµç »ç¿ëÀÚ°¡ Àбâ(select)¸¸ ÇÒ ¼ö ÀÖµµ·Ï µÇ¾îÀÖ´Ù. ÀÌ°ÍÀ» ¿øÄ¡ ¾Ê´Â´Ù¸é ±ÇÇÑÀ» revoke ÇÒ ¼ö ÀÖ´Ù.

    ³¯¾¾ Å×ÀÌºí¿¡ ´ëÇÑ ¸ðµç ±ÇÇÑÀ» °øÁß¿¡ Çã¿ëÇÑ´Ù´Â °ÍÀÌ´Ù.
     

    grant all on ³¯¾¾ to public ;


    ÀÌ·²°æ¿¡ ¸ðµç PostgreSQL»ç¿ëÀÚ´Â ÇØ´ç Å×À̺íÀ» ÀÐ°í ¾µ¼ö ÀÖ°Ô µÈ´Ù.

    Linuxer »ç¿ëÀÚ¿¡°Ô ³ª¾¾ Å×ÀÌºí¿¡ ´ëÇÑ ÀÔ·Â, °»½Å, »èÁ¦ ±ÇÇÑÀ» ºÎ¿©ÇÏ´Â °ÍÀÌ´Ù. PostgreSQL ÀÇ Ä«Å»·Î±×¿¡ º¸¸é pg_group À̶ó´Â °´Ã¼°¡ ÀÖ´Ù. PostgreSQLÀÇ Ä«Å»·Î±×´Â ´Ù¸¥ RDBMS¿¡ ºñÇØ »ó´çÈ÷ º¹ÀâÇÏ°í, Àú±ÞÀûÀÎ ÀÎÅÍÆäÀ̽º¸¦ °¡Áö°í ÀÖ´Ù°í »ý°¢ÇÑ´Ù. ÀÌ pg_group Ä«Å»·Î±×¿Í grant¸¦ Àß »ç¿ëÇϸé, ƯÁ¤ ÇÁ·ÎÁ§Æ®¸¦ ¼öÇàÇÏ°í ÀÖ´Â µ¥ÀÌÅͺ£À̽º »ç¿ëÀÚ ±×·ì¿¡°Ô¸¸ ±ÇÇÑÀ» ºÎ¿©ÇÒ ¼öµµ ÀÖ´Ù. Âü°í·Î pg_group Ä«Å»·Î±×´Â ´ÙÀ½ÀÇ Ä÷³À¸·Î ÀÌ·ç¾îÁ® ÀÖ´Ù.
     

    mydb=> ¡¬d pg_group
    Table = pg_group
     

      Field

      Type

      length

      groname

      name

      32

      grosysid

      int4

      4

      grolist

      int4[]

      var

     
    ÇØ´ç ±×·ìÀÌ users ¶ó´Â ±×·ìÀÌ°í, À¯´Ð½º ±×·ì ¾ÆÀ̵ð(/etc/group ¿¡ ³ªÅ¸³­ ¹øÈ£)°¡ 100ÀÌ°í, ÀÌµé ±×·ì¿¡ Æ÷ÇÔ½ÃÅ°°íÀÚ ÇÏ´Â »ç¿ëÀÚÀÇ UNIX¾ÆÀ̵ð(/etc/passwd ¿¡ ³ªÅ¸³­ ¹øÈ£)°¡ 501, 510 À̶ó¸é, ¸ÕÀú postgres °èÁ¤À¸·Î µ¥ÀÌÅͺ£À̽º¿¡ Á¢¼ÓÇÏ¿©, À̵鿡 ´ëÇÑ ±×·ì¼³Á¤À» ÇØÁØ´Ù.

    ÀÌÁ¦ 501, 510 »ç¿ëÀÚ°¡ users ¶ó´Â ±×·ì¸íÀ¸·Î pg_group Ä«´Þ·Î±×¿¡ Æ÷ÇÔÀ» ½ÃÄ×´Ù.
     

    mydb=>insert into pg_group values ('users', 100, '{501,510}') ;
    INSERT 536064 1


    ÀÌÁ¦ ƯÁ¤ Å×ÀÌºí¿¡ ´ëÇÑ ±ÇÇÑÀ» ÀÌµé ±×·ì¿¡°Ô¸¸ ºÎ¿©Çغ¸ÀÚ.
     

    mydb=>grant all on ³¯¾¾ to group users ;
    CHANGE
    mydb=>

     

    revoke
    revoke´Â ¸» ±×´ë·Î ±ÇÇÑÀ» Ãë¼ÒÇÑ´Ù´Â ÀǹÌÀÌ´Ù. ¹®¹ýÀº grant¿Í µ¿ÀÏÇÏ°í, to ¿Í from ¸¸ ´Ù¸£´Ù.

    ¿ª½Ã privilege ´Â ALL, SELECT, INSERT, UPDATE, DELETE, RULE Áß Çϳª ÀÌ»óÀÌ µÉ ¼ö ÀÖ´Ù.
     

    revoke <privilege[,privilege...]>
         on <rel1>[,...<reln>]
         from [public | group <group> | <username>]


    grant¿¡¼­ ºÎ¿©ÇÑ ±ÇÇÑÀ» Â÷·Ê·Î Ãë¼ÒÇغ¸ÀÚ.
     

    revoke all on ³¯¾¾ from public ;
    revoke insert, update, delete on ³¯¾¾ from linuxer ;
    revoke all on ³¯¾¾ from group users ;

     

12) ÁúÀÇ ºÐ¼®

    explain Àº ÁúÀÇÀÇ È¿À²¼ºÀ» ºÐ¼®ÇÏ´Â µ¥ µµ¿òÀ» ÁÖ´Â ¸í·É¾îÀÌ´Ù. explain µÚ¿¡ »ç¿ëÇÒ ÁúÀǸ¦ ¸í½ÃÇϸé ÁúÀǸ¦ ½ÇÇàÇÏ´Â ´ë½Å, ¿ÉƼ¸¶ÀÌÀú°¡ °èȹÇÑ ÁúÀÇÀÇ ½ÇÇà°æ·Î¿Í °èȹ´Ü°è¸¦ »ç¿ëÀÚ¿¡°Ô ¾Ë·ÁÁØ´Ù. µû¶ó¼­, ´ëÇüÈ­µÈ µ¥ÀÌÅͺ£À̽º¿¡¼­ ÁúÀÇÀÇ ÃÖÀûÈ­¸¦ ¼º¸³ÇÏ´Â µ¥ µµ¿òÀ» ÁÖ°Ô µÈ´Ù.

    explain ¿¡ verbose¸¦ »ç¿ëÇÏ¸é ´õ ÀÚ¼¼ÇÑ ÁúÀÇ ½ÇÇà°èȹÀ» ¾Ë ¼ö ÀÖ´Ù.
     

    mydb=> ¡¬h explain ;
    Command : explain
    Description : explain the query execution plan
    Syntax :
    explain [verbose] <query>
    mydb=> explain select *from ³¯¾¾ ;
    NOTICE : QUERY PLAN :
    Seq Scan on ³¯¾¾ (cost =1.36  size =11  width = 32)
    EXPLAIN
    mydb=> explain verbose select *from ³¯¾¾ ; 
    NOTICE : QUERY PLAN :
    {SEQSCAN :cost 1.363  :size 11 :width 32  : state nil  :qptargetlist
    ({TLE  :resdom { RESDOM  :resno 1  :restype 1043  :reslen -1  :resname
    "µµ½Ã"  :reskey 0  :reskeyop 0  :resjunk 0}  :expr  {VAR  :varno 1 :varattno 1
    :vartype 1043  :varnoold 1  :varoattno 1}} {TLE  :resdom {RESDOM  
    :resno 2  :restype 23  :resnel 4  :resname "ÃÖÀú¿Âµµ"  :reskey 0  :reskeyop 0
    :resjunk 0}  :expr  {VAR  :varno 1  :varattno 2  :vartype 23  :varnoold 1
    :varoattno 2}} {TLE  :resdom {RESDOM  :resno 3  :restype 23  :resnel 4
    :resname "ÃÖ°í¿Âµµ"  :reskey 0  :reskeyop 0  :resjunk 0}  :expr  {VAR  :varno 1 :varattno 3  :vartype 23  :varnoold 1  :varoattno 3}} {TLE  :resdom
    {RESDOM  :resno 4  :restype 701  :resnel 8  :resname "°­¼ö·®"  :reskey 0
    :reskeyop 0  :resjunk 0}  :expr  {VAR  :varno 1  :varattno 4 :vartype 701
    :varnoold 1 :varoattno 4}} {TLE  :resdom {RESDOM  :resno 5  :restype
    1082  :resnel 4  :resname "³¯Â¥"  :reskey 0  :reskeyop 0  :resjunk 0}  :expr
    {VAR  :varno 1  :varattno 5  :vartype 1082  :varnoold 1  :varoattno 5}})
    :qpqual nil :lefttree nil :righttree nil :scanrelid 1}
    Seq Scan on ³¯¾¾ (cost =1.36  size =11  width = 32)
    EXPLAIN
    mydb=>

     

13) Ä¿¼­ »ç¿ëÇϱâ

    declare
    declare´Â Ä¿¼­¸¦ Á¤ÀÇÇÑ´Ù. SQL ¿¡¼­ Ä¿¼­´Â ÀÏÁ¾ÀÇ ÆÄÀÏ ½ºÆ®¸²°ú °°Àº ¿ªÇÒÀ» ÇÏ´Â °ÍÀÌ´Ù. ÆÄÀÏÀ» ¿­¾î¼­ FILE * ½ºÆ®¸²À¸·Î ¿¬°áÇÏ¿© »ç¿ëÇϵíÀÌ, SQL ¿¡¼­´Â µ¥ÀÌÅͺ£À̽ºÀÇ µ¥ÀÌÅ͸¦ SELECT ·Î ȸ¼öÇÏ¿© Ä¿¼­¿Í ¿¬°áÇÏ¿© »ç¿ëÇÑ´Ù.

    selsct ±¸¹®Àº ¾ÕÀü°ú µ¿ÀÏÇÏ´Ù. SELECT ±¸¹®ÀÇ °æ°ú¸¦ Ä¿¼­ cursorname °ú ¿¬°áÇÏ¿© Á¤ÀÇÇÏ´Â °ÍÀÌ´Ù.
     

    declare cursorname [ binary ] cursor for select statement


    ¿©±â¿¡¼­ binary ¿¡ ÁÖ¸ñÇÒ ÇÊ¿ä°¡ ÀÖ´Ù. Ä¿¼­´Â ÀϹÝÀûÀ¸·Î ¾Æ½ºÅ° ÇüÅ·Πµ¥ÀÌÅ͸¦ ¹ÝȯÇÑ´Ù. µ¥ÀÌÅÍ´Â ÀÚ¿¬½º·´°Ô ¹ÙÀ̳ʸ® Çü½ÄÀ¸·Î ÀúÀåµÇ±â ¶§¹®¿¡, ½Ã½ºÅÛÀº ÀÌ°ÍÀ» ¾Æ½ºÅ° Çü½ÄÀ¸·Î º¯È¯ÇØ¾ß ÇÑ´Ù. ¾Æ½ºÅ° Çü½ÄÀº Å©±â¸é¿¡¼­ ¹ÙÀ̳ʸ® Çü½Äº¸´Ù´Â ÀϹÝÀûÀ¸·Î Å« °æ¿ì°¡ ¸¹´Ù. µ¥ÀÌÅÍ°¡ ¾Æ½ºÅ° Çü½ÄÀ¸·Î º¯È¯µÇ¾úÀ» ¶§, Ŭ¶óÀ̾ðÆ® ¾îÇø®ÄÉÀ̼ÇÀº µ¥ÀÌÅ͸¦ ¾î¶² ¸ñÀûÀ¸·Î ó¸®Çϱâ À§ÇØ ¹ÙÀ̳ʸ® Çü½ÄÀ¸·Î º¯È¯ÇØ¾ß ÇÒ ÇÊ¿ä°¡ ÀÖÀ» °ÍÀÌ´Ù.  ¹ÙÀ̳ʸ® Ä¿¼­´Â »ç¿ëÀÚ¿¡°Ô µ¥ÀÌÅ͸¦ ¹ÙÀ̳ʸ® Çü½ÄÀ¸·Î Àü´ÞÇÑ´Ù. µû¶ó¼­, ¹ÙÀ̳ʸ® Ä¿¼­´Â º¯È¯¿¡ ¼Ò¸ðµÇ´Â ¿À¹öÇìµå°¡ ¾ø±â ¶§¹®¿¡ Á»´õ ºü¸£´Ù. ÇÏÁö¸¸, ¾Æ½ºÅ° Çü½ÄÀº ¾ÆÅ°ÅØÃÄ¿¡ ºñ±³Àû ¿µÇâÀ» ¹ÞÁö ¾ÊÁö¸¸, ¹ÙÀ̳ʸ® Çü½ÄÀº ¸Ó½®¿¡ µû¶ó ´Þ¶óÁö±â ½±»óÀÌ´Ù. µû¶ó¼­, Ŭ¶óÀ̾ðÆ® ¸Ó½®°ú ¼­¹ö ¸Ó½®ÀÌ ¼­·Î ´Ù¸¥ ¹ÙÀ̳ʸ® Çü½ÄÀ» »ç¿ëÇÑ´Ù¸é, ¿øÄ¡ ¾Ê´Â °á°ú°¡ ³ªÅ¸³¯ ¼öµµ ÀÖ´Ù. ÁÖ ¸ñÀûÀÌ µ¥ÀÌÅ͸¦ ¾Æ½ºÅ° ÇüÅ·Πº¸¿©ÁÖ±â À§ÇÑ °ÍÀ̶ó¸é ¾Æ½ºÅ° ÇüÅ·ΠĿ¼­¸¦ ¼±¾ðÇÏ´Â °ÍÀÌ ÁÁ´Ù.

    fetch
    fetch ´Â Ä¿¼­¿¡¼­ ÀνºÅϽº¸¦ ÀûÀçÇÏ´Â ÀÏÀ» ÇÑ´Ù. ÆÄÀÏ ½ºÆ®¸²(Ä¿¼­)¿¡¼­ fgets ÇÔ¼öµîÀ¸·Î ºÒ·¯¿À´Â ÀÏ(fetch) °ú ºñ½ÁÇÏ´Ù°í º¼ ¼ö ÀÖ´Ù.

    number ´Â cursor_name Ä¿¼­¿¡¼­ ºÒ·¯¿Ã ÀνºÅϽºÀÇ °¹¼öÀÌ´Ù.
     

    fetch [(forward | backward)] [(number | all)] [in cursor_name]


    ÇØ´ç Ä¿¼­¿¡ ³²¾ÆÀÖ´Â ÀνºÅϽº°¡ number º¸´Ù Àû´Ù¸é ³²¾ÆÀÖ´Â °Í¸¸ ÀûÀçµÈ´Ù. all Àº ÇöÀç Ä¿¼­¿¡ ³²¾ÆÀÖ´Â ¸ðµç ÀνºÅϽº¸¦ ºÒ·¯¿Â´Ù. forward ¿Í backward ´Â Ä¿¼­¿¡¼­ ¾ÕµÚ·Î ¿òÁ÷À̸ç ÀûÀçÇÒ ¼ö ÀÖµµ·Ï ÇÑ´Ù. Áï, ÆÄÀÏ ½ºÆ®¸²¿¡¼­ Á¤¹æÇâ(forward)À¸·Î, ¶Ç´Â °Å²Ù·Î(backward) µ¹¾Æ°¡´Â °Í°ú ºñ½ÁÇÏ´Ù°í º¸¸é µÈ´Ù. ±âº»Àº ¹°·Ð forward ÀÌ´Ù. fetch ¸í·É¾î´Â Æ®·£Àè¼Ç ºí·Ï ¾È¿¡¼­ »ç¿ëµÇ¾î¾ß ÇÑ´Ù. ±×¸®°í, Ä¿¼­¸¦ »ç¿ëÇÏ°í ³­ ´ÙÀ½¿¡´Â Ä¿¼­ cursor_name °ú °ü·ÃµÇ´Â ÀÚ¿øÀ» ÇØÁ¦Çϱâ À§ÇØ close ÇØÁÖ¾î¾ß ÇÑ´Ù. Æ®·£Àè¼Ç ³»ºÎ¿¡¼­ declare ¿Í fetch¸¦ »ç¿ëÇÏ´Â ¼ø¼­´Â ´ÙÀ½°ú °°´Ù.

    ¾Ë¾Æº¸±â ½±°Ô °£´ÜÇÑ Å×À̺íÀ» ¸¸µé¾î¼­ Ä¿¼­¸¦ ¼±¾ðÇØ º¸ÀÚ

    ù ´Ü°è¿¡¼­ 5°³¸¦ fetch ÇÏ¿´À» °æ¿ì¿¡´Â, Ä¿¼­ ³»ÀÇ À§Ä¡°¡ 0 ¿¡¼­ ½ÃÀÛÇÏ¿© 1, 2, 3, 4, 5 ÀÇ 5°³¸¦ ºÒ·¯¿Í¼­ 5¿¡ À§Ä¡ÇÏ°Ô µÇ°í, °Å²Ù·Î 3°³¸¦ fetch ÇÏ¿´À» °æ¿ì¿¡´Â 4, 3, 2 ÀÇ 3 °³¸¦ ºÒ·¯¿Í¼­ 2±îÁö °¡°Ô µÇ¸ç, ¿©±â¼­ Á¤¹æÇâÀ¸·Î 4°³¸¦ fetch ÇÏ¿´À» °æ¿ì¿¡´Â 3,4 , 5, 6 À» ºÒ·¯¿ÔÀ½À» ¾Ë ¼ö ÀÖ´Ù. fetch all Àº ³ª¸ÓÁö¸¦ ¸ðµÎ º¸¿©ÁØ´Ù.
     

    BEGIN -> DECLARE CURSOR -> FETCH INSTANCE IN CURSOR ->
    CLOSE CURSOR -> END


    mydb=> create table test3 (num int4) ;
    CREATE
    mydb=> copy test3 from stdin ;
    Enter info followed by a newline
    End with a backslash and a period on a line by itself.
    >>1
    >>2
    >>3
    >>4
    >>5
    >>6
    >>7
    >>8
    >>9
    >>10
    >>¡¬.
    mydb=> begin ;
    BEGIN
    mydb=> declare mycursor cursor for select *from test3 ;
    SELECT
    mydb=> fetch 5 in mycursor ;
    num
    ---
    1
    2
    3
    4
    5
    (5 rows)

    mydb=> fetch backward 3 in mycursor ;
    num
    ---
    4
    3
    2
    (3 rows)

    mydb=> fetch forward 4 in mycursor ;
    num
    ---
    3
    4
    5
    6
    (4 rows)

    mydb=> fetch all in mycursor ;
    num
    ---
    7
    8
    9
    10
    (4 rows)

    mydb=>close mycursor ;
    CLOSE
    mydb=>end ;
    END
    mydb=>

     

14) Á¦°ÅµÈ µ¥ÀÌÅÍÀÇ ¹°¸®ÀûÀÎ »èÁ¦

    vacuum Àº µ¥ÀÌÅͺ£À̽º¸¦ Á¤¸®ÇÏ´Â °ÍÀÌ¶ó º¸¸é µÈ´Ù. µ¥ÀÌÅͺ£À̽ºÀÇ ·Î¿ì¸¦ Á¦°ÅÇÏ¿´´Ù ÇÏ´õ¶óµµ ¾ÆÁ÷ µ¥ÀÌÅͺ£À̽º¿¡ ³²¾ÆÀÖ´Ù. ¹«½¼ À̾߱䰡 Çϸé,

    Áï, Å×À̺íÀÇ µ¥ÀÌÅ͸¦ Áö¿ü´Ù°í ÇÏ´õ¶óµµ, µ¥ÀÌÅÍ ÀÚü°¡ ¹°¸®ÀûÀ¸·Î Áö¿öÁø °ÍÀÌ ¾Æ´Ï°í PostgreSQL¿¡¼­ Áö¿öÁø µ¥ÀÌÅͶó´Â Ç¥½Ã¸¸ ÇÏ°í, µ¥ÀÌÅÍ´Â ±×´ë·Î ÀúÀåµÇ¾î ÀÖ´Ù´Â °ÍÀÌ´Ù.
     

    mydb=> select *from ǥ1 ;
    i
    -
    10
    (1 row)

    mydb=>delete from Ç¥1 ; 
    DELETE 1
    mydb=> select *from ǥ1 ;
    i
    -
    (0 rows)

    mydb=> select *from ǥ1['epoch', 'now'] ;
    i
    -
    10
    (1 row)

    mydb=> vacuum ; 
    VACUUM
    mydb=> select *from Ç¥1['epoch', 'now'] ; 
    i
    -
    (0 rows)

    mydb=>


    ±×·¡¼­ µ¥ÀÌÅÍ È¸¼ö½Ã¿¡ ½Ã°£ÁöÁ¤À» ÇØÁÖ¸é Áö¿öÁø µ¥ÀÌÅͶó ÇÒÁö¶óµµ °Ë»öÇÒ ¼ö ÀÖ´Â °ÍÀÌ´Ù. vacuum Àº Á¦°ÅµÈ µ¥ÀÌÅ͸¦ ¹°¸®ÀûÀ¸·Î Á¦°ÅÇØ ¹ö¸°´Ù. vacuumÀ» ½ÇÇàÇϱâ Àü¿¡ Áö¿öÁø µ¥ÀÌÅ͵éÀÌ º° ÇÊ¿ä¾ø´ÂÁö¸¦ ´Ù½Ã Çѹø È®ÀÎÇØ º¸´Â °ÍÀÌ ÁÁ´Ù. Çѹø¾¿ vacuumÀ» ½ÇÇàÇÏ´Â °ÍÀº µ¥ÀÌÅͺ£À̽º ó¸® ¼Óµµ¸¦ Çâ»ó½ÃÅ°´Â Æ©´×ÀÇ ÇÑ°¡Áö ¹æ¹ýÀÌ´Ù.




¡ã top

homeÀ¸·Î...