1. µé¾î°¡¸é¼
Áö³ ½Ã°£¿¡´Â PostgreSQLÀÇ ¼³Ä¡¿Í °£´ÜÇÑ Å×½ºÆ®¿¡
À̾î, PostgreSQLÀÇ »ç¿ëÀ» µµ¿ÍÁÖ´Â ¿ÜºÎ ¸í·É¾î¸¦ »ìÆ캸¾Ò´Ù.
À̹ø ½Ã°£¿¡´Â PostgreSQL¿¡¼ Á¦°øÇÏ´Â µ¥ÀÌÅÍ Å¸ÀÔ°ú µ¥ÀÌÅͺ£À̽º
ÁúÀǾîÀÎ SQL¿¡ ´ëÇؼ »ìÆ캸°Ú´Ù.
PostgreSQL¿¡¼ÀÇ µ¥ÀÌÅÍ Å¸ÀÔÀº »ó´çÈ÷ ¸¹°í
ÆøÀÌ ³Ð´Ù. »ý°¢µµ ÇÏÁö ¸øÇÑ µíÇÑ µ¥ÀÌÅÍ Å¸ÀÔµéÀÌ ÀÖÀ¸¸ç, °øÇпëÀ̳ª
º¹ÀâÇÑ ±âÇÏÇÐ ¿ëµµ·Î »ç¿ëµÉ ¹ýÇÑ µ¥ÀÌÅÍ Å¸ÀԵ鵵 Áغñ¿Ü¾î ÀÖ´Ù.
¹°·Ð, ÀÌ·¯ÇÑ µ¥ÀÌÅÍ Å¸ÀÔÁ¶Â÷µµ »ç¿ëÀÚ ¸¶À½´ë·Î Á¤ÀÇÇÏ¿© »ç¿ëÇÒ
¼ö ÀÖ´Ù´Â ÀåÁ¡ÀÌ ÀÖ´Ù. ±×¸®°í SQL ÁúÀǾ ¸¶Âù°¡Áö·Î È®À强ÀÌ
¶Ù¾î³ª´Ù. »ç½Ç, PostgreSQL 6.2¿¡¼ »õ·Ó°Ô Áö¿øÇÏ´Â Çʵå Á¦ÇÑ,
º¸Ãæ ±â´Éµé°ú Æ®¸®°Å ±â´ÉÀº ÀÌÀü ¹öÀü¿¡¼µµ PostgreSQLÀÇ SQLÈ®ÀåÀ»
»ç¿ëÇÏ¿© ÇØ°áÇÒ ¼ö ÀÖ¾ú´Ù. ÀÌÁ¦ º»°ÝÀûÀ¸·Î PostgreSQLÀÇ ±â´ÉµéÀ»
¸¶À½²¯ ´©·Á º¸µµ·Ï ÇÏÀÚ.
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 ÀÇ ºñ±³
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Ãà °ªÀ» ³ªÅ¸³»´Â
ºÎµ¿ ¼Ò¼öÀÌ´Ù.
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 ·ÎºÎÅÍ »ó¼ÓÀ» ¹ÞÀº Å×À̺í(Ŭ·¡½º)°¡
ÀÖ´Ù¸é °æ°í°¡ ¶³¾îÁö°í Á¦°ÅµÇÁö ¾Ê´Â´Ù. À̶§¿¡´Â »ó¼Ó¹ÞÀº Å×À̺í(Ŭ·¡½º)ºÎÅÍ
Á¦°ÅÇØ¾ß ÇÑ´Ù.
µ¥ÀÌÅÍ °Ë»ö
µ¥ÀÌÅÍ °Ë»ö(¶Ç´Â ¿, Ä÷³ ȸ¼ö)Àº À¯¸íÇÑ 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) ·ê
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¸¦
º¸³Â´Ù´Â Å뺸¸¦ ¹Þ´Â´Ù.
±×¸® À¯¿ëÇÑ ÁúÀǾî´Â ¾Æ´ÏÁö¸¸, °°Àº Å×ÀÌºí¿¡
µ¿½ÃÀûÀ¸·Î Á¢±ÙÇÏ´Â ÇÁ·Î¼¼½º°£¿¡ ¾à°£ÀÇ Á¤º¸(ÇÁ·Î¼¼½º ¹øÈ£)¸¦
±³·ùÇϱâ À§ÇÑ °ÍÀÌ´Ù. Áï, ´©°¡ Áö±Ý ¾î´À Å×À̺íÀ» °Çµå¸®°í ÀÖ´Ù...´Â
Á¤µµÀÌ´Ù. 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
|