Professional Documents
Culture Documents
13
Nhm pht trin ton cu PostgreSQL
I. Sch ch dn
&
II. Ngn ng SQL
Xut bn nm 2013
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 2/372
Xut bn nm 2013
Li ngi dch
Ti liu PostgreSQL 9.0.13 ca nhm pht trin ton cu PostgreSQL xut bn nm 2013, nh trong
phn LI NI U bn di gii thiu, gm 7 phn chnh, nh s t I ti VII v phn dnh cho
cc ph lc, c nh s VIII, tng cng di 2.364 trang.
Bn dch ln ny gm 2 phn u c dch xong trc v a ra cc c gi s dng sm,
bao gm:
Phn I: Sch ch dn, l mt gii thiu khng chnh thc cho nhng ngi mi s dng.
Phn II: Ngn ng SQL, vit v mi trng ngn ng truy vn SQL, bao gm c cc dng
v cc hm d liu, cng nh vic tinh chnh hiu nng mc ca ngi s dng. Mi
ngi s dng PostgreSQL u nn c phn ny.
Chnh v ti liu khng c dch xong hon ton tt c cc phn cng mt lc, nn trong qu trnh
s dng, c mt s ni dung tham chiu cc Phn I v Phn II ti cc phn cn li ca ti liu cc
c gi ch c th xem ni dung bn gc ting Anh (nh theo ng dn ba trc ca ti liu)
m cha c phn dch ting Vit. Rt mong c cc c gi thng cm.
Hy vng cc phn tip sau s c dch sang ting Vit sm.
Vic dch thut chc chn khng khi c nhng li nht nh, rt mong cc bn c gi, mt khi
pht hin c, xin lin lc vi ngi dch v ng gp kin v cch chnh sa ti liu s ngy
mt c cht lng tt hn, phc v cho cc bn c gi v mi ngi c nhu cu c tt hn. Xin
chn thnh cm n trc cc bn c gi v cc ng gp chnh sa .
Mi thng tin ng gp chnh sa cho bn dch ting Vit, xin vui lng gi vo a ch th in t:
letrungnghia.foss@gmail.com
Chc cc c gi thnh cng!
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 3/372
Xut bn nm 2013
Mc lc
Li ni u..........................................................................................................................................12
1. PostgreSQL l g?......................................................................................................................12
2. Ngn gn v lch s ca PostgreSQL........................................................................................13
2.1. D n POSTGRES ca Berkeley.......................................................................................13
2.2. Postgres95..........................................................................................................................14
2.3. PostgreSQL........................................................................................................................15
3. Cc qui c...............................................................................................................................15
4. Thng tin thm...........................................................................................................................16
5. Cc ch dn bo co li .............................................................................................................16
5.1. Xc nh cc li..................................................................................................................17
5.2. Bo co ci g.....................................................................................................................18
5.3, Bo co cc li u.........................................................................................................20
I. Sch ch dn ...................................................................................................................................22
Chng 1. Lm quen.....................................................................................................................23
1.1. Ci t................................................................................................................................23
1.2. C bn v kin trc............................................................................................................23
1.3. To mt c s d liu.........................................................................................................24
1.4. Truy cp c s d liu........................................................................................................26
Chng 2. Ngn ng SQL ............................................................................................................28
2.1 Gii thiu............................................................................................................................28
2.2. Cc khi nim.....................................................................................................................28
2.3. To mt bng mi..............................................................................................................29
2.4. a d liu vo bng vi cc hng....................................................................................29
2.5. Truy vn bng.....................................................................................................................30
2.6. Lin kt gia cc bng.......................................................................................................32
2.7. Cc hng tng hp.............................................................................................................34
2.8. Cp nht.............................................................................................................................36
2.9. Xa.....................................................................................................................................36
Chng 3. Cc tnh nng cao cp .................................................................................................37
3.1. Gii thiu...........................................................................................................................37
3.2. Cc kiu nhn.....................................................................................................................37
3.3. Cc kha ngoi...................................................................................................................37
3.4. Cc giao dch......................................................................................................................38
3.5. Hm ca s.........................................................................................................................40
3.6. S k tha..........................................................................................................................43
3.7. Kt lun..............................................................................................................................45
II. Ngn ng SQL ..............................................................................................................................46
Chng 4. C php SQL ...............................................................................................................47
4.1. Cu trc t vng.................................................................................................................47
4.1.1. M nh danh v cc t kha......................................................................................47
4.1.2. Hng s.......................................................................................................................49
4.1.2.1. Hng s chui (hng chui)................................................................................50
4.1.2.2. Hng chui vi cc thot dng C........................................................................50
4.1.2.3. Hng chui vi cc thot Unicode......................................................................51
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 4/372
Xut bn nm 2013
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 5/372
Xut bn nm 2013
5.7. S (schema)...................................................................................................................87
5.7.1. To s ....................................................................................................................87
5.7.2. S cng khai..........................................................................................................88
5.7.3. ng tm kim s ................................................................................................88
5.7.4. S v quyn u tin...............................................................................................90
5.7.5. S catalog h thng...............................................................................................90
5.7.6. S dng cc mu........................................................................................................91
5.7.7. Tnh kh chuyn.........................................................................................................91
5.8. K tha...............................................................................................................................92
5.8.1. Cc vn cn tn ti ...............................................................................................95
5.9. Phn vng...........................................................................................................................95
5.9.1. Tng quan...................................................................................................................96
5.9.2. Trin khai phn vng..................................................................................................97
5.9.3. Qun l phn vng...................................................................................................100
5.9.4. Loi tr rng buc v phn vng..............................................................................101
5.9.5. Phng php phn vng khc..................................................................................102
5.9.6. Cc vn cn tn ti .............................................................................................103
5.10. i tng c s d liu khc.........................................................................................103
5.11. Theo di s ph thuc....................................................................................................104
Chng 6. iu khin d liu......................................................................................................106
6.1. Chn d liu.....................................................................................................................106
6.2. Cp nht d liu...............................................................................................................107
6.3. Xa d liu.......................................................................................................................108
Chng 7. Truy vn ....................................................................................................................109
7.1. Tng quan.........................................................................................................................109
7.2. Biu thc bng.................................................................................................................109
7.2.1. Mnh FROM........................................................................................................110
7.2.1.1. Bng kt ni......................................................................................................110
7.2.1.2. Tn hiu ca bng v ct .................................................................................114
7.2.1.3. Truy vn con.....................................................................................................115
7.2.1.4. Hm bng..........................................................................................................115
7.2.2. Mnh WHERE.....................................................................................................116
7.2.3. Cc mnh GROUP BY v HAVING...................................................................117
7.2.4. X l hm ca s......................................................................................................119
7.3. Danh sch chn ...............................................................................................................119
7.3.1. Cc khon ca danh sch chn ................................................................................120
7.3.2. Nhn ct...................................................................................................................120
7.3.3. Khc bit - DISTINCT ............................................................................................121
7.4. Kt hp cc truy vn........................................................................................................121
7.5. Sp xp hng....................................................................................................................122
7.6. LIMIT v OFFSET..........................................................................................................123
7.7. Danh sch gi tr..............................................................................................................124
7.8. Truy vn vi WITH (Biu thc bng chung)...................................................................124
Chng 8. Dng d liu...............................................................................................................129
8.1. Dng s............................................................................................................................130
8.1.1. Dng s nguyn........................................................................................................131
8.1.2. S chnh xc ty ....................................................................................................131
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 6/372
Xut bn nm 2013
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 7/372
Xut bn nm 2013
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 8/372
Xut bn nm 2013
9.14.1.4. xmlforest.........................................................................................................238
9.14.1.5. xmlpi ..............................................................................................................239
9.14.1.6. xmlroot............................................................................................................239
9.14.1.7. xmlagg............................................................................................................239
9.14.1.8. T v XML .....................................................................................................240
9.14.2. X l XML ............................................................................................................240
9.14.3. Bng nh x ti XML ............................................................................................241
9.15. Hm iu khin s tun t ............................................................................................244
9.16. Biu thc iu kin........................................................................................................246
9.16.1. CASE......................................................................................................................246
9.16.2. COALESCE...........................................................................................................247
9.16.3. NULLIF..................................................................................................................248
9.16.4. GREATEST v LEAST..........................................................................................248
9.17. Hm v ton t mng ....................................................................................................248
9.18. Hm tng hp.................................................................................................................250
9.19. Hm ca s.....................................................................................................................253
9.20. Biu thc truy vn con ..................................................................................................254
9.20.1. EXISTS..................................................................................................................254
9.20.2. IN ...........................................................................................................................255
9.20.3. NOT IN...................................................................................................................255
9.20.4. ANY/SOME...........................................................................................................256
9.20.5. ALL........................................................................................................................257
9.20.6. So snh hng khn ngoan ......................................................................................257
9.21. So snh hng v mng....................................................................................................258
9.21.1. IN............................................................................................................................258
9.21.2. NOT IN...................................................................................................................258
9.21.3. ANY/SOME (mng)...............................................................................................259
9.21.4. ALL (mng)............................................................................................................259
9.21.5. So snh hng khn ngoan ......................................................................................259
9.22. Hm thit lp tr v .......................................................................................................260
9.23. Hm thng tin h thng..................................................................................................263
9.24. Hm qun tr h thng ...................................................................................................272
9.25. Hm Trigger...................................................................................................................278
Chng 10. Bin i dng ..........................................................................................................280
10.1. Tng quan.......................................................................................................................280
10.2. Ton t............................................................................................................................282
10.3. Hm................................................................................................................................284
10.4. Lu gi tr.......................................................................................................................288
10.5. UNION, CASE v cc cu trc c lin quan.................................................................288
Chng 11. Cc ch s.................................................................................................................291
11.1. Gii thiu........................................................................................................................291
11.2. Cc dng ch s..............................................................................................................292
11.3. Cc ch s nhiu ct.......................................................................................................294
11.4. Ch s v ORDER BY....................................................................................................295
11.5. Kt hp nhiu ch s ......................................................................................................296
11.6. Ch s duy nht...............................................................................................................297
11.7. Ch s trong cc biu thc..............................................................................................297
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 9/372
Xut bn nm 2013
11.8. Ch s mt phn..............................................................................................................298
11.9. Lp ton t v h ton t...............................................................................................301
11.10. Kim tra s dng ch s................................................................................................302
Chng 12. Tm kim ton vn...................................................................................................304
12.1. Gii thiu.......................................................................................................................304
12.1.1. Ti liu l g?..........................................................................................................305
12.1.2. Trng khp vn bn c bn....................................................................................306
12.1.3. Cu hnh.................................................................................................................307
12.2. Bng v ch s................................................................................................................308
12.2.1. Tm kim bng........................................................................................................308
12.2.2. To ch s...............................................................................................................309
12.3. Kim sot tm kim ton vn ........................................................................................310
12.3.1. Phn tch ti liu.....................................................................................................310
12.3.2. Phn tch truy vn...................................................................................................311
12.3.3. Xp hng cc kt qu tm kim..............................................................................313
12.3.4. Nhn mnh cc kt qu..........................................................................................315
12.4. Tnh nng b sung..........................................................................................................316
12.4.1. iu khin ti liu..................................................................................................316
12.4.2. iu khin truy vn ...............................................................................................317
12.4.2.1. Vit truy vn ..................................................................................................318
12.4.3. Trigger cho cp nht t ng..................................................................................320
12.4.4. Thu thp thng k ti liu ......................................................................................321
12.5. Trnh phn tch...............................................................................................................322
12.6. T in...........................................................................................................................323
12.6.1. T cht....................................................................................................................325
12.6.2. T in n gin.....................................................................................................325
12.6.3. T in t ng ngha............................................................................................327
12.6.4. T in t ng ngha............................................................................................328
12.6.4.1. Cu hnh t in t ng ngha......................................................................329
12.6.4.2. V d v t in t ng ngha.......................................................................330
12.6.5. T in Ispell..........................................................................................................331
12.6.6. T in bng tuyt (Snowball)...............................................................................332
12.7. V d cu hnh................................................................................................................332
12.8. Kim th v g li tm kim vn bn.............................................................................334
12.8.1. Kim th cu hnh .................................................................................................334
12.8.2. Kim th trnh phn tch .......................................................................................336
12.8.3. Kim th t in.....................................................................................................337
12.9. Dng ch s GiST v GIN..............................................................................................338
12.10. H tr psql....................................................................................................................339
12.11. Hn ch.........................................................................................................................342
12.12. Chuyn tm kim vn bn khi phin bn trc 8.3....................................................342
Chng 13. Kim sot ng thi ................................................................................................344
13.1. Gii thiu.......................................................................................................................344
13.2. S cch li giao dch........................................................................................................344
13.2.1. Mc cch li c thc hin c ............................................................................345
13.2.2. Mc cch li c kh nng tun t............................................................................347
13.2.2.1. Cch li tun t so vi s tun t ng............................................................348
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 10/372
Xut bn nm 2013
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 11/372
Xut bn nm 2013
Li ni u
Cun sch ny l ti liu chnh thc ca PostgreSQL. N c cc lp trnh vin v nhng ngi
tnh nguyn khc ca PostgreSQL vit song song vi s pht trin ca phn mm PostgreSQL. N
m t tt c cc chc nng m phin bn hin hnh ca PostgreSQL chnh thc h tr.
lm cho s lng ln cc thng tin v PostgreSQL c kh nng qun l c, cun sch ny
c t chc trong vi phn. Mi phn c mc ch cho tng lp ngi s dng khc nhau, hoc
cho cc giai on khc nhau ca ngi s dng i vi kinh nghim v PostgreSQL ca h:
Phn I l mt gii thiu khng chnh thc cho nhng ngi mi s dng.
Phn V bao gm cc thng tin cho nhng ngi s dng cao cp v cc kh nng m rng
ca my ch. Cc ch bao gm cc dng v hm d liu do ngi s dng nh ngha.
Phn VI bao gm cc thng tin tham chiu v cc lnh SQL, cc chng trnh my trm v
my ch. Phn ny h tr cc phn khc vi cc thng tin c sp xp theo lnh hoc
chng trnh.
1. PostgreSQL l g?
PostgreSQL l mt h qun tr c s d liu i tng - quan h - ORDBMS (object-relational
database management system) da trn POSTGRES, phin bn 4.21, c Phng Khoa hc My
tnh Berkeley ca i hc California pht trin. POSTGRES i tin phong trong nhiu khi
nim m ch tr thnh sn sng trong mt s h thng c s d liu thng mi lu sau ny.
PostgreSQL l mt hu bi ngun m vi m gc ban u ca Berkeley. N h tr mt phn ln
tiu chun SQL v a ra nhiu tnh nng hin i:
cc truy vn phc tp
cc kha ngoi
cc trigger
http://db.cs.berkeley.edu/postgres.html
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 12/372
cc kiu nhn
Xut bn nm 2013
Hn na, PostgreSQL cn c th c ngi s dng m rng theo nhiu cch thc, v d bng
vic b sung thm mi:
cc dng d liu
cc hm
cc ton t
cc hm tng hp
cc phng php nh ch s
cc ngn ng th tc
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 13/372
Xut bn nm 2013
2.2. Postgres95
Vo nm 1994, Andrew Yu v Jolly Chen b sung mt trnh bin dch ngn ng SLQ vo
POSTGRES. Di mt ci tn mi, Postgres95 lin tc c pht hnh ln web tm kim con
ng ring ca n trn th gii nh l mt hu du ngun m ca m gc ban u POSTGRES
ca Berkeley.
M Postgres95 tng hon ton l ANSI C v c ct ta ti 25% v kch c. Nhiu thay i ni b
ci thin hiu nng v kh nng duy tr. Postgres95 phin bn 1.0.x chy nhanh hn khong
30-50% trn Wiscosin Benchmark so vi POSTGRES phin bn 4.2. Ngoi vic sa li, nhng ci
tin chnh sau y c thc hin:
2
3
4
Mt th vin mi cho mt tin giao tip (front end), libpgtcl, h tr cho cc my trm
da vo TCL. Mt trnh bin dch shell mu, pgtclsh, cung cp cc lnh TCL mi cc
http://www.informix.com/
http://www.ibm.com/
http://meteora.ucsd.edu/s2k/s2k_home.html
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 14/372
Xut bn nm 2013
Mt sch ch dn ngn gii thiu cc chc nng SQL thng xuyn cng nh cc chc nng
ca Postgre95 c phn phi vi m ngun.
GNU make (thay cho BSD make) c s dng xy dng. Hn na, Postgres95 c th
c bin dch vi mt GCC khng v vu (cn chnh cc p bn d liu c sa).
2.3. PostgreSQL
Ti nm 1996, tr nn r rng rng ci tn Postgres95 c l khng ph hp v thi gian.
Chng ti chn ci tn mi, PostgreSQL, phn nh mi quan h gia POSTGRES gc ban
u v cc phin bn gn hn vi kh nng SQL. Cng lc, chng ti thit lp vic nh s
phin bn, bt u vi phin bn 6.0, t cc con s ngc v mt cch tun t m d n
POSTGRES ca Berkeley bt u.
Nhiu ngi tip tc tham chiu ti PostgreSQL nh l Postgres (by gi him khi vi tt c cc
ch hoa) v truyn thng hoc v n l d pht m hn. S s dng ny c chp nhn rng ri
nh mt tn hiu hoc b danh.
S nhn mnh trong qu trnh pht trin ca Postgres95 tng l vo vic xc nh v hiu cc vn
trong m ca my ch. Vi PostgreSQL, s nhn mnh chuyn sang vic nng cao cc tnh
nng v kh nng, d cng vic tip tc trong tt c cc kha cnh.
Cc chi tit v nhng g xy ra trong PostgreSQL k t c th thy trong Ph lc E.
3. Cc qui c
Cun sch ny s dng cc qui c in n sau y nh du cc phn nht nh ca vn bn: cc
khi nim mi, cc cm t ngoi, v cc on vn bn quan trng c nhn mnh bng ch
nghing. Mi th trnh by u vo hoc u ra ca my tnh, c bit cc lnh, m chng trnh,
v u ra mn hnh, c biu din theo mt phng ch n cch ( v d). Trong cc on vn bn
nh vy, cc ch nghing (v d) ch phn gi ch; bn phi chn mt gi tr thc t vo thay cho
phn gi ch . Nhn y, cc phn m chng trnh cng c nhn mnh bng ch m ( v d),
nu chng tng c b sung thm hoc b thay i k t v d trc .
Nhng qui c sau s c s dng trong bng tm tt ca mt lnh: cc du ngoc vung ([v])
ch cc phn ty chn. (Trong cc bng tm tt mt lnh TCL, du hi (?) c s dng thay
th, nh thng thng trong TCL). Cc du ngoc nhn ({v}) v cc ng thng ng (|) ch rng
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 15/372
Xut bn nm 2013
5. Cc ch dn bo co li
Khi bn thy c mt li trong PostgreSQL, chng ti mong mun c nghe v n. Cc bo co li
ca bn s ng gp mt phn quan trng trong vic lm cho PostgreSQL tin cy hn v thm ch
5
6
7
8
http://wiki.postgresql.org
http://wiki.postgresql.org/wiki/Frequently_Asked_Questions
http://wiki.postgresql.org/wiki/Todo
http://www.postgresql.org
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 16/372
Xut bn nm 2013
5.1. Xc nh cc li
Trc khi bn bo co mt li, xin hy c v c li ti liu ny kim tra xem bn thc s c
th lm bt k iu g m bn ang c gng hay khng. Nu cn cha r t ti liu, liu bn c th
lm th g hay khng, xin cng hy bo co iu ; y l mt li trong ti liu. Nu ha ra l
mt chng trnh lm th g khc vi nhng g ti liu ni, th l mt li. iu c th bao
gm, nhng khng b gii hn, ti cc hon cnh sau:
y chng trnh tham chiu ti bt k s thc thi no, ch khng ch cho my ch phn ph
tr (backend).
Chy chm hoc thiu ti nguyn khng phi l mt li. Hy c ti liu hoc hi trn mt trong
cc danh sch th c tr gip trong vic tinh chnh cc ng dng ca bn. Khng tun th
c vi tiu chun SQL cng khng nht thit l mt li, tr phi s tun th i vi tnh nng c
bit c nu mt cch r rng.
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 17/372
Xut bn nm 2013
Trc khi bn tip tc, hy kim tra danh sch TODO (hy lm) v trong cc cu hi p thng
gp - FAQ xem liu li ca bn c bit ri hay cha. Nu bn khng th gii m c
thng tin trn danh sch TODO, hy nu vn ca bn. iu t nht chng ti c th l lm cho
danh sch TODO c r rng hn.
5.2. Bo co ci g
iu quan trng nht phi nh v vic bo co li l ni ln tt c cc s vic v ch cc s vic.
Khng on nhng g bn ngh s l sai, nhng g n dng nh lm, hoc phn no ca chng
trnh c mt li. Nu bn khng quen vi s trin khai, th bn c th on sai v khng gip c
chng ti t g. V thm ch nu bn lm ng, th nhng gii thch c hc l mt s b sung ln
ch khng phi l s thay th c cho cc s vic. Nu chng ti nh s sa li th chng ti
s phi xem n xy ra i vi bn thn chng ti trc. Vic bo co cc s vic trn tri l kh
thng thn (bn c th sao chp v dn chng t mn hnh) nhng tt c cc chi tit thng rt quan
trng s b t ra ngoi v ai ngh n khng l vn hoc bo co c th hiu c bng bt k
cch g. Nhng iu sau y nn c trong tng bo co li:
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 18/372
Xut bn nm 2013
Bt k iu g bn lm trc tip t cc ch dn ci t.
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 19/372
Xut bn nm 2013
5.3, Bo co cc li u
Ni chung, hy gi cc bo co li vo danh sch th bo co li ti <pgsql-bugs@postgresql.org>.
Bn c yu cu s dng mt ch m t cho thng ip th in t ca bn, c l cc phn ca
thng ip li.
Mt phng php khc l in vo mu c sn trn web bo co li website ca d n 10. a vo
bo co li theo cch ny s lm cho n c gi bng th in t cho danh sch th < pgsqlbugs@postgresql.org>.
Nu bo co li ca bn c nhng lin quan v an ninh v bn thch iu khng tr thnh ngay
lp tc c nhn thy trong cc kho lu tr cng khai, hy ng gi n cho pgsql-bugs. Cc vn
v an ninh c th c bo co ring cho <security@postgresql.org>.
Khng gi cc bo co li ti bt k danh sch th no ca ngi s dng, nh <pgsqlsql@postgresql.org> hoc <pgsql-general@postgresql.org>. Cc danh sch th l dnh cho vic
tr li cc cu hi ca ngi s dng, v nhng ngi ng k ca chng thng khng mun nhn
cc bo co li. Quan trng hn, h c l s khng sa c chng.
9 http://www.chiark.greenend.org.uk/~sgtatham/bugs.html
10 http://www.postgresql.org
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 20/372
Xut bn nm 2013
Hn na, xin khng gi cc bo co li cho danh sch th ca cc lp trnh vin <pgsqlhackers@postgresql.org>. Danh sch ny l tho lun v s pht trin ca PostgreSQL, v c th
l tt nu chng ti c th gi cc bo co li c tch bit. Chng ti c th chn tin hnh
tho lun v bo co li ca bn trong pgsql-hackers, nu vn cn r sot li tip.
Nu bn c vn vi ti liu, th ni tt nht bo co n l danh sch th cho ti liu < pgsqldocs@postgresql.org>. Xin ch ra phn no ca ti liu m bn khng thch.
Nu li ca bn l mt vn v tnh kh chuyn trong mt nn tng khng c h tr, hy gi
th in t ti <pgsql-hackers@postgresql.org>, sao cho chng ti (v bn) c th lm vic v vic
chuyn PostgreSQL ti nn tng ca bn.
Lu : V khng may s lng spam ln ang xy ra hin nay, tt c cc a ch th in t
trn u l cc danh sch th ng. Ngha l, bn cn phi ng k vo mt danh sch
c php vit bi trong . (Tuy nhin, bn khng cn phi ng k s dng mu bo co
li trn web). Nu bn mun gi th nhng khng mun nhn cc th ca danh sch, th bn
c th ng k v thit lp la chn ng k ca bn thnh nomail. c thm thng tin,
hy gi th ti <majordomo@postgresql.org> vi t duy nht help (gip) thn ca thng
ip.
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 21/372
Xut bn nm 2013
I. Sch ch dn
Cho mng bn ti vi Sch ch dn PostgreSQL. Cc chng sau y c nh a ra mt gii
thiu n gin v PostgreSQL, cc khi nim v c s d liu quan h, v ngn ng SQL cho
nhng ai cn mi i vi bt k mt trong nhng kha cnh . Chng ti ch c mt s tri thc
chung v cch s dng cc my tnh. Khng c bt k kinh nghim lp trnh no hay kinh nghim
Unix c th no c yu cu. Phn ny ch yu c nh a ra cho bn mt s kinh nghim
truyn tay vi cc kha cnh quan trng ca h thng PostgreSQL. N khng c nh s l s x
l y hoc t m cc ch m n bao trm.
Sau khi bn lm vic qua vi sch ch dn ny, bn c th mun chuyn ti c Phn II c
c nhiu tri thc chnh thng hn v ngn ng SQL, hoc Phn IV c thng tin v vic pht
trin cc ng dng cho PostgreSQL. Nhng ngi m mun thit lp v qun tr my ch ca ring
h cng nn c Phn III.
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 22/372
Xut bn nm 2013
Chng 1. Lm quen
1.1. Ci t
Trc khi bn c th s dng PostgreSQL, bn cn ci t n, tt nhin. C kh nng l
PostgreSQL c ci t ri trn site ca bn, hoc v n c a vo trong pht tn h iu
hnh ca bn ri hoc v ngi qun tr h thng ci t n ri. Nu ng l nh vy, th bn nn
c thng tin t ti liu h iu hnh hoc ngi qun tr h thng ca bn v cch truy cp
PostgreSQL.
Nu bn khng chc liu PostgreSQL c sn sng ri hay liu bn c th s dng n cho th nghim
ca bn hay khng th t bn c th ci t n, ri sau tham chiu ti Chng 15 c cc ch
dn v ci t, v quay li vi sch ch dn ny khi vic ci t hon tt. Hy chc chn tun theo
mt cch st sao phn v thit lp cc bin mi trng mt cch thch hp.
Nu ngi qun tr site ca bn cn cha thit lp mi iu theo cch thc mc nh, th bn c th
c mt s cng vic na phi lm. V d, nu my tnh lm my ch c s d liu l mt my xa,
th bn s cn thit lp bin mi trng PGHOST v tn ca my lm my ch c s d liu. Bin
mi trng PGPORT cng c th phi c thit lp. Vn l th ny: nu bn c gng khi ng
mt chng trnh ng dng v n ku rng n khng th kt ni c ti c s d liu, th bn nn
hi ngi qun tr site ca bn hoc, nu l bn, hy tra cu ti liu chc chn rng mi
trng ca bn c thit lp mt cch ph hp. Nu bn khng hiu on trc th hy c
phn tip sau.
ng dng my trm (giao din mt tin frontend) ca ngi s dng m mun thc hin
cc hot ng c s d liu. Cc ng dng my trm c th rt a dng v bn cht t nhin:
mt my trm c th l mt cng c hng vn bn, mt ng dng ha, mt my ch
web m truy cp c s d liu hin th cc trang web, hoc mt cng c duy tr c s d
liu c chuyn mn ha. Mt s ng dng my trm c cung cp vi phn phi
PostgreSQL; hu ht do nhng ngi s dng pht trin.
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 23/372
Xut bn nm 2013
ni t ch (host) khc nhau. Trong trng hp chng giao tip qua mt kt ni mng TCP/IP.
Bn nn nh iu ny trong u, v cc tp c th c truy cp trong mt my tnh trm c th
khng truy cp c (hoc c th ch truy cp c bng vic s dng mt tn tp khc) trn my
tnh ch c s d liu.
My ch PostgreSQL c th x tr nhiu kt ni ng thi t cc my trm. t c iu ny
th n khi ng (r nhnh) mt tin trnh mi cho tng kt ni. T thi im tr i, my trm
v tin trnh ca my ch giao tip m khng c s can thip ca tin trnh postgres gc ban u. V
th, tin trnh ch o ca my ch lun chy, ch cc kt ni ca my trm, trong khi my trm v
cc tin trnh my ch c lin quan ti vic n v i. (Tt c iu ny tt nhin l khng nhn thy
i vi ngi s dng. Chng ti ch nu n y cho y thi).
1.3. To mt c s d liu
Bi tp u tin xem liu bn c th truy cp my ch c s d liu hay khng l th to ra mt
c s d liu. Mt my ch PostgreSQL ang chy c th qun l nhiu c s d liu. Thng
thng, mt c s d liu ring bit c s dng cho tng d n hoc cho tng ngi s dng.
C kh nng, ngi qun tr site ca bn to ri mt c s d liu bn s dng. Anh ta s phi
ni cho bn tn ca c s d liu l g. Trong trng hp bn c th b qua bc ny v nhy
tip sang phn tip sau.
to mt c s d liu mi, trong v d ny tn l mydb, bn s dng lnh sau:
$ createdb mydb
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 24/372
Xut bn nm 2013
Mt cu tr li khc c th l th ny:
createdb: could not connect to database postgres: FATAL: role "joe" does not exist
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 25/372
Xut bn nm 2013
Nhiu thng tin hn v createdb v dropdb c th thy createdb v dropdb mt cch tng ng.
Chy mt chng trnh u cui (terminal) tng tc, gi l psql, cho php bn lm vic
mt cch tng tc vi cc lnh SQL nh vo, sa v thc thi.
version
----------------------------------------------------------------------PostgreSQL 9.0.13 on i586-pc-linux-gnu, compiled by GCC 2.96, 32-bit
(1 row)
mydb=> SELECT current_date;
date
-----------2002-08-31
(1 row)
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 26/372
Xut bn nm 2013
mydb=> SELECT 2 + 2;
?column?
---------4
(1 row)
Chng trnh psql c mt s lnh ni b khng phi l cc lnh SQL. Chng bt u vi k t cho
ngc, \. V d, bn c th c c s tr gip trong c php ca cc lnh SQL khc nhau ca
PostgreSQL bng vic g:
mydb=> \h
ra khi psql, hy g:
mydb=> \q
v psql s thot ra v tr bn v vi trnh bin dch lnh shell ca bn. ( bit thm v cc lnh ni
b, hy g \? du nhc psql). Cc kh nng y ca psql c vit thnh ti liu trong psql.
Nu PostgreSQL c ci t ng th bn cng c th g man psql du nhc shell ca h iu
hnh thy ti liu . Trong sch ch dn ny chng ti s khng s dng cc tnh nng mt
cch r rng, nhng t bn c th s dng chng khi cn thit.
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 27/372
Xut bn nm 2013
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 28/372
Xut bn nm 2013
2.3. To mt bng mi
Bn c th to mt bng mi bng vic ch nh tn bng, cng vi tt c cc tn ct v cc dng
ca chng:
CREATE TABLE weather (
city
varchar(80),
temp_lo
int,
temp_hi
int,
prcp
real,
date date
);
-- low temperature
-- high temperature
-- precipitation
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 29/372
Xut bn nm 2013
INSERT INTO weather VALUES (San Francisco, 46, 50, 0.25, 1994-11-27);
C php c s dng cho ti nay i hi bn nh trt t cc ct. Mt la chn c php khc cho
php bn lit k cc ct mt cch r rng:
INSERT INTO weather (city, temp_lo, temp_hi, prcp, date)
VALUES (San Francisco, 43, 57, 0.0, 1994-11-29);
Nhiu lp trnh vin coi vic lit k r rng cc ct l dng tt hn so vi vic da vo trt t khng
r rng.
Hy vo tt c cc lnh c ch ra trn sao cho bn c mt s d liu lm vic trong cc phn
tip sau.
Bn cng c th s dng lnh sao chp COPY ti lng d liu ln t cc tp vn bn th.
iu ny thng xuyn l nhanh hn v lnh COPY c ti u ha cho ng dng ny trong khi cho
php tnh mm do t hn so vi lnh INSERT. Mt v d:
COPY weather FROM /home/user/weather.txt;
Trong khi SELECT * l hu dng cho cc truy vn t c chun b trc, th n c xem mt cch rng ri nh l dng ti
trong vic to m, v vic b sung mt ct vo bng c th lm thay i cc kt qu.
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 30/372
Xut bn nm 2013
u ra s l:
city
| temp_lo | temp_hi | prcp | date
---------------------+------------+-----------+-------+-----------------San Francisco |
46 |
50 | 0.25 | 1994-11-27
San Francisco |
43 |
57 |
0 | 1994-11-29
Hayward
|
37 |
54 |
| 1994-11-29
(3 rows)
Bn c th vit cc biu thc, khng ch cc tham chiu ct n gin, trong danh sch chn. V d,
bn c th lm:
SELECT city, (temp_hi+temp_lo)/2 AS temp_avg, date FROM weather;
iu ny s a ra:
city
| temp_avg | date
---------------------+--------------+-----------------San Francisco |
48 | 1994-11-27
San Francisco |
50 | 1994-11-29
Hayward
|
45 | 1994-11-29
(3 rows)
Kt qu:
city
| temp_lo | temp_hi | prcp | date
---------------------+------------+-----------+-------+-----------------San Francisco |
46 |
50 | 0.25 | 1994-11-27
(1 row)
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 31/372
Xut bn nm 2013
Hy quan st 2 iu v tp cc kt qu:
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 32/372
Xut bn nm 2013
c tha nhn rng ri cch thc tt nh tnh tt c cc tn ct trong truy vn lin kt, sao cho
truy vn s khng hng nu mt tn ct b p bn sau ny c thm vo mt trong cc bng.
Cc truy vn lin kt dng ti nay v th c xem l cng c th c vit dng la chn thay
th ny:
SELECT *
FROM weather INNER JOIN cities ON (weather.city = cities.name);
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 33/372
Xut bn nm 2013
xem chng lm c g.
Chng ta cng c th lin kt mt bng vi chnh n. iu ny c gi l t lin kt. V d, gi s
chng ta mun thy tt c cc bn ghi v thi tit nm trong di nhit cc bn ghi ca bng thi
tit khc. V th chng ta cn so snh cc ct temp_lo v temp_hi ca tng bng thi tit vi cc ct
temp_lo v temp_hi vi tt c cc hng khc ca bng thi tit. Chng ta c th lm iu ny bng
truy vn sau:
SELECT W1.city, W1.temp_lo AS low, W1.temp_hi AS high,
W2.city, W2.temp_lo AS low, W2.temp_hi AS high
FROM weather W1, weather W2
WHERE W1.temp_lo < W2.temp_lo
AND W1.temp_hi > W2.temp_hi;
city
| low | high | city
| low | high
---------------------+-----+-------+-------------------+-----+-----San Francisco | 43 |
57 | San Francisco | 46 | 50
Hayward
| 37 |
54 | San Francisco | 46 | 50
(2 rows)
nhng iu ny s khng lm vic v tng hp max khng th c s dng trong mnh WHERE.
(Hn ch ny tn ti v mnh WHERE xc nh cc hng no s c a vo trong tnh ton tng
hp; nn r rng n phi c nh gi trc khi cc hm tng hp c tnh ton). Tuy nhin,
thng th l trng hp truy vn c th c tuyn b li hon tt kt qu mong mun, y l
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 34/372
Xut bn nm 2013
m n trao cho chng ta mt hng u ra cho mi thnh ph. Mi kt qu tng hp c tnh ton
i vi cc hng ca bng khp vi thnh ph . Chng ta c th lc cc hng c nhm li
bng vic s dng HAVING:
SELECT city, max(temp_lo)
FROM weather
GROUP BY city
HAVING max(temp_lo) < 40;
city
| max
---------------------+-------Hayward
| 37
(1 row)
Ton t LIKE thc hin vic khp mu v c gii thch trong phn 9.7.
iu quan trng phi hiu s tng tc gia cc tng hp v cc mnh WHERE v HAVING ca
SQL. S khc bit c bn gia WHERE v HAVING l iu ny: WHERE chn cc hng u vo trc
khi cc nhm v cc tng hp c tnh ton (v th, n kim sot cc hng no i vo trong tnh
ton tng hp ), trong khi HAVING la chn cc hng ca nhm trc khi cc nhm v cc tng
hp c tnh ton. V th mnh WHERE phi khng bao gm cc hm tng hp; khng c
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 35/372
Xut bn nm 2013
2.8. Cp nht
Bn c th cp nht cc hng ang tn ti bng vic s dng lnh cp nht UPDATE. Gi s bn
pht hin ra vic c nhit tt c l lch 2 sau ngy 28/11. Bn c th sa cc d liu nh sau:
UPDATE weather
SET temp_hi = temp_hi - 2, temp_lo = temp_lo - 2
WHERE date > 1994-11-28;
2.9. Xa
Cc hng c th b xa khi mt bng bng vic s dng lnh xa DELETE. Gi s bn khng cn
quan tm ti thi tit ca Hayward na. Sau bn c th lm iu sau y xa cc hng
khi bng:
DELETE FROM weather WHERE city = Hayward;
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 36/372
Xut bn nm 2013
To s thng thong s dng cc kiu nhn l mt kha cnh chnh ca thit k tt c s d liu
SQL. Cc kiu nhn cho php bn ng gi cc chi tit cu trc cc bng ca bn, n c th thay i
khi ng dng ca bn tin ha, ng sau nhng giao din nht qun.
Cc kiu nhn c th c s dng trong hu ht bt k ch no mt bng thc t c th c s
dng. Vic xy dng cc kiu nhn da vo cc kiu nhn khc khng phi l ph bin.
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 37/372
Xut bn nm 2013
Hnh vi ca cc kha ngoi c th cui cng c tinh chnh cho ng dng ca bn. Chng ta s
khng i vt ra khi v d n gin ny trong sch ch dn ny, m ch tham chiu ti Chng 5
c thm thng tin. Vic lm cho s dng ng cc kha ngoi chc chn s ci thin cht lng
cc ng dng c s d liu ca bn, nn bn c khuyn khch mnh m hc v chng.
Cc chi tit ca cc lnh l khng quan trng y; iu quan trng l c vi bn cp nht ring
r c lin quan hon tt iu ny hn l hot ng n gin. Cc nhn vin ngn hng ca chng
ta s mun c m bo rng tt c cc bn cp nht hoc xy ra, hoc khng iu g trong s
chng xy ra c. C l chc chn khng lm v mt s hng hc h thng gy ra trong vic Bob
nhn 100.00 USD s khng c ghi n t Alice. Alice c l khng thy mnh l mt khch hng
hnh phc nu c ta c ghi n m Bob khng nhn c. Chng ta cn mt s m bo rng
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 38/372
Xut bn nm 2013
Nu, gia ng ca giao dch, chng ta quyt nh chng ta khng mun thc hin (c th chng
ta ch lu rng bn quyt ton ca Alice l khng tch cc), th chng ta c th a ra lnh
ROLLBACK thay cho lnh COMMIT, v tt c cc bn cp nht ca chng ta cho ti lc s b hon.
PostgreSQL thc s i x vi tng lnh SQL nh ang c thc thi bn trong mt giao dch. Nu
bn khng a ra lnh BEGIN, th tng lnh ring r s c mt BEGIN v (nu thnh cng) COMMIT
c bao bc xung quanh n. Mt nhm cc lnh c BEGIN v COMMIT bao bc xung quanh i
khi c gi l mt khi giao dch.
Lu : Mt s th vin my trm a ra cc lnh BEGIN v COMMIT mt cch t ng, sao
cho bn c th c c hiu qu ca cc khi giao dch m khng phi hi. Hy kim tra ti
liu cho giao din m bn ang s dng.
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 39/372
Xut bn nm 2013
C kh nng kim sot cc lnh trong mt giao dch theo mt cch thc c trng tm hn bng
vic s dng cc im an ton. Cc im an ton cho php bn hy b mt cch c la chn cc
phn ca giao dch, trong khi thc hin c phn cn li. Sau vic xc nh mt im an ton vi
SAVEPOINT, bn c th, nu cn, quay tr li ti im an ton vi lnh ROLLBACK TO. Tt c
nhng thay i ca c s d liu giao dch gia vic xc nh im an ton v vic quay ngc li
v n s c hy b, nhng nhng thay i trc im an ton s c gi li.
Sau khi quay ngc tr li ti mt im an ton, n tip tc s c nhn din, sao cho bn c th
quay ngc tr li v n vi ln. Ngc li, nu bn chc chn bn s khng cn quay ngc tr v
mt im an ton c bit mt ln na, th n c th c gii phng, sao cho h thng c th gii
phng mt s ti nguyn. Hy nh trong u rng hoc vic thot ra hoc quay ngc tr v mt
im an ton s t ng thot ra khi tt c cc im an ton m tng c xc nh sau n.
Tt c iu ny ang xy ra bn trong khi giao dch, nn khng c th g l nhn thy c i vi
cc phin khc ca c s d liu. Khi v nu bn thc hin khi giao dch, cc hnh ng c thc
hin tr nn nhn thy c nh mt n v i vi cc phin khc, trong khi cc hnh ng c
quay ngc tr li s khng bao gi tr nn nhn thy c c.
Ghi nh c s d liu trng, gi thit chng ta ghi n 100.00 USD t ti khon ca Alice, v ghi c
cho ti khon ca Bob, s ch thy sau ny rng chng ta nn c ti khon tin cy ca Wally. Chng
ta c th lm iu ny bng vic s dng cc im an ton ging th ny:
BEGIN;
UPDATE accounts SET balance = balance - 100.00
WHERE name = Alice;
SAVEPOINT my_savepoint;
UPDATE accounts SET balance = balance + 100.00
WHERE name = Bob;
-- oops ... forget that and use Wallys account
ROLLBACK TO my_savepoint;
UPDATE accounts SET balance = balance + 100.00
WHERE name = Wally;
COMMIT;
Tt nhin, v d ny l qu n gin, nhng c nhiu kh nng kim sot trong mt khi giao dch
thng qua s dng cc im an ton. Hn na, ROLLBACK TO ch l cch ginh li s kim sot
ca mt khi giao dch m c h thng t trong tnh trng b hng v mt li, ngn gn l
quay n ngc tr li hon ton v bt u li mt ln na.
3.5. Hm ca s
Mt hm ca s thc hin mt tnh ton qua mt tp hp cc hng ca bng m bng cch no
c lin quan ti hng hin hnh. iu ny c kh nng so snh c vi dng tnh ton m c th
c thc hin vi mt hm tng hp. Nhng khng ging nh cc hm tng hp thng thng, s
dng mt hm ca s khng lm cho cc hng tr nn b nhm thnh mt hng u ra duy nht cc hng vn gi li cc nh danh ring bit ca chng. pha ng sau, hm ca s c kh
nng truy cp nhiu hn l ch hng hin hnh ca kt qu truy vn .
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 40/372
Xut bn nm 2013
y l mt v d ch ra cch so snh tng khon lng ca nhn vin vi lng trung bnh trong
phng ca anh hoc ch ta:
SELECT depname, empno, salary, avg(salary) OVER (PARTITION BY depname) FROM empsalary;
depname
| empno | salary | avg
---------------------+----------+---------+-------------------------------------develop
|
11 | 5200 | 5020.0000000000000000
develop
|
7 | 4200 | 5020.0000000000000000
develop
|
9 | 4500 | 5020.0000000000000000
develop
|
8 | 6000 | 5020.0000000000000000
develop
|
10 | 5200 | 5020.0000000000000000
personnel
|
5 | 3500 | 3700.0000000000000000
personnel
|
2 | 3900 | 3700.0000000000000000
sales
|
3 | 4800 | 4866.6666666666666667
sales
|
1 | 5000 | 4866.6666666666666667
sales
|
4 | 4800 | 4866.6666666666666667
(10 rows)
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 41/372
Xut bn nm 2013
trn, khi khng c ORDER BY trong mnh OVER, th khung ca s l y ht nh phn vng ,
thiu PARTITION BY l bng tng th; ni cch khc, tng tng s c thc hin cho ton b bng v
v th chng ta c kt qu y ht cho tng hng u ra. Nhng nu chng ta b sung thm mt mnh
ORDER BY, th chng ta c cc kt qu rt khc nhau:
SELECT salary, sum(salary) OVER (ORDER BY salary) FROM empsalary;
salary | sum
----------+---------3500 | 3500
3900 | 7400
4200 | 11600
4500 | 16100
4800 | 25700
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 42/372
|
|
|
|
|
Xut bn nm 2013
25700
30700
41100
41100
47100
(10 rows)
y tng ny c thc hin t lng u tin (thp nht) cho ti hin hnh, bao gm c bt k
s p bn no ca lng hin hnh (lu cc kt qu cho cc lng b p bn).
Cc hm ca s c php ch trong danh sch SELECT v mnh ORDER BY ca truy vn .
Chng b cm u khc na, nh trong cc mnh GROUP BY, HAVING v WHERE. iu ny l
v chng, v logic, thc thi sau vic x l cc mnh . Hn na, cc hm ca s thc thi sau cc
hm tng hp thng thng. iu ny c ngha rng, l hp l a vo mt li gi hm tng hp
vo trong cc tham s ca mt hm ca s, nhng khng lm ngc li c.
Nu c mt nhu cu phi lc hoc to thnh nhm cc hng sau khi cc tnh ton ca s c thc
hin, th bn c th s dng mt la chn con (ph). V d:
SELECT depname, empno, salary, enroll_date
FROM
(SELECT depname, empno, salary, enroll_date,
rank() OVER (PARTITION BY depname ORDER BY salary DESC, empno) AS pos
FROM empsalary
) AS ss
WHERE pos < 3;
Chi tit hn v cc hm ca s c th thy trong Phn 4.2.8, Phn 9.19, Phn 7.2.4, v trang tham
chiu ca SELECT.
3.6. S k tha
S k tha l mt khi nim t cc c s d liu hng i tng. N m ra cc kh nng mi th
v ca thit k c s d liu.
Hy to 2 bng. Mt bng cc thnh ph - cities v mt bng cc th ph - capitals. Mt cch t
nhin, cc th ph cng l cc thnh ph, nn bn mun mt s cch trnh by cc th ph mt
cch n khi bn lit k tt c cc thnh ph. Nu bn thc s khn ngoan th bn c th sng to
mt s s ging th ny:
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 43/372
Xut bn nm 2013
n s tr v:
name
| altitude
---------------------+------------Las Vegas
| 2174
Mariposa
| 1953
Madison
| 845
(3 rows)
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 44/372
Xut bn nm 2013
name
| altitude
---------------------+-----------Las Vegas
| 2174
Mariposa
| 1953
(2 rows)
3.7. Kt lun
PostgreSQL c nhiu tnh nng khng c cp ti trong gii thiu ca sch ch dn ny, n
tng c hng ti nhng ngi s dng mi hn ca SQL. Cc tnh nng c tho lun chi
tit hn trong phn cn li ca sch ch dn ny.
Nu bn cm thy bn cn nhiu t liu gii thiu hn, xin hy thm website PostgreSQL2 c cc
ng lin kt ti nhiu ti nguyn hn.
http://www.postgresql.org/
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 45/372
Xut bn nm 2013
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 46/372
Xut bn nm 2013
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 47/372
Xut bn nm 2013
c th tng ng c vit nh l:
uPDaTE my_TabLE SeT a = 5;
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 48/372
Xut bn nm 2013
V d t tm thng hn sau y vit t ting Nga slon (con voi) theo cc k t Cyrillic:
U&"\0441\043B\043E\043D"
4.1.2. Hng s
C 3 dng hng s m ch dng trong PostgreSQL: cc chui, cc chui bit v cc s. Cc hng
cng c th c ch nh vi cc dng n, chng c th cho php s trnh by li chnh xc hn v
c hiu qu hn bng vic x l ca h thng. Cc la chn thay th c tho lun trong cc
tiu phn bn di.
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 49/372
Xut bn nm 2013
l tng ng vi:
SELECT foobar;
nhng
SELECT foo bar;
PostgreSQL cng chp nhn cc hng chui thot, chng l mt m rng i vi tiu chun SQL.
Mt hng chui thot c c trng bng vic vit k t E (ch hoa hoc ch thng) ngay trc
du nhy n, ngha l, E'foo'. (Khi tip tc mt hng chui thot xuyn khp cc dng, hy vit E
ch trc du nhy m u tin). Trong mt chui thot, mt k t cho ngc (\) bt u mt s
tun t thot cho ngc ging C, trong s kt hp ca du cho ngc v (cc) k t theo sau
th hin mt gi tr byte c bit, nh ch ra trong Bng 4-1.
Bng 4-1. Tun t thot ca du cho ngc
Tun t thot ca du cho ngc
Gii ngha
\b
du xa ngc (backspace)
\f
\n
dng mi (newline)
\r
carriage return
\t
tab
\xh, \xhh (h = 0 - 9, A - F)
\uxxxx, \Uxxxxxxxx (x = 0 - 9, A - F)
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 50/372
Xut bn nm 2013
p ().
L trch nhim ca bn rng nhng tun t theo byte m bn to ra, c bit khi s dng cc thot
theo cc h 8 hoc 16, to nn cc k t hp l trong vic m ha tp cc k t trn my ch. Khi
vic m ha my ch l UTF-8, th cc thot Unicode hoc c php thot Unicode cho la chn
thay th, nh trong Phn 4.1.2.3, s c s dng thay. (La chn thay th c th l vic m ha
UTF-8 bng tay v vit ra cc bytes, n c th l rt nng nhc).
C php thot Unicode lm vic y ch khi vic m ha my ch l UTF-8. Khi cc m ha
my ch khc c s dng, th ch cc im m trong di ASCII (ti \u007F) c th c ch nh.
C mu 4 ch s v 8 ch s c th c s dng ch nh cc cp thay th UTF-16 son ra
cc k t vi cc im m ln hn U+FFFF, d tnh sn sng ca mu 8 ch s, v mt k thut,
lm cho iu ny l khng cn thit. (Khi cc cp thay th c s dng khi vic m ha my ch
l UTF-8, th chng trc ht c kt hp trong mt im m duy nht m sau c m ha
theo UTF-8).
Thn trng
Nu tham s cu hnh standard_conforming_strings (cc chui tun th tiu chun)
m l tt (off), th PostgreSQL nhn cc thot du cho ngc theo c cc hng
chui thot v thng thng. y l s tng thch ngc vi hnh vi lch s, ni
m cc thot du cho ngc tng lun c tha nhn. D
standard_conforming_strings hin mc nh l tt, th mc nh ny s thay i
thnh bt (on) trong mt phin bn trong tng lai v s tun th cc tiu chun
c ci thin. Cc ng dng v th c khuyn khch chuyn i khi vic s
dng cc thot cho ngc. Nu bn cn s dng mt thot cho ngc th hin
mt k t c bit, hy vit hng chui vi mt ch E m bo n s c
iu khin cng mt cch nh trong cc phin bn trong tng lai.
B sung thm vo standard_conforming_strings, cc tham s cu hnh ca
escape_string_warning (cnh bo chui thot) v backslash_quote (du cho trong
ngoc) iu chnh i x ca cc du cho ngc trong cc hng chui.
PostgreSQL cng h tr dng c php thot khc cho cc chui m cho php vic ch nh cc k t
Unicode ty bng im m. Mt hng chui thot Unicode bt u vi U& (U l ch hoa hoc
ch thng v theo sau l du v &) ngay trc khi m du nhy, m khng c bt k du trng
no gia, v d, U&'foo'. (Lu rng iu ny to ra mt s t m vi ton t &. Hy s dng
cc du trng xung quanh ton t trnh vn ny). Bn trong cc dy nhy, cc k t
Unicode c th c ch nh dng c thot bng vic vit mt du cho ngc i sau l s
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 51/372
Xut bn nm 2013
V d t thng thng hn sau y vit t ting Nga slon (con voi) theo cc k t Cyrillic:
(U&\0441\043B\043E\043D)
Trong khi c php tiu chun cho vic ch nh cc hng chui thng l thun tin, th n c th l
kh hiu khi cc chui mong mun c cha nhiu du nhy hoc du cho ngc, v tng du
phi c p bn. cho php cc truy vn c kh nng c c nhiu hn trong nhng tnh
hun nh vy, PostgreSQL a ra cch khc, gi l a vo trong cc du $, vit cc hng
chui. Mt hng chui trong cc du $ bao gm mt du $, mt th ty chn ca 0 hoc cc k
t, mt du $ na, mt s tun t ty cc k t to nn ni dung chui, mt du $, th y ht bt
u du $ , v mt du $. V d, y l 2 cch khc nhau th hin chui Dianne's horse bng
vic s dng cc du $:
$$Diannes horse$$
$SomeTag$Diannes horse$SomeTag$
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 52/372
Xut bn nm 2013
Cc hng chui bit trng ging nh cc hng chui thng thng vi mt k t B (ch hoa hoc
ch thng) ngay lp tc trc khi m ngoc (khng c cc du trng xen gia), nh, B'1001'. Cc
k t duy nht c php bn trong cc hng chui bit l 0 v 1.
Mt cch la chn, cc hng chui bit c th c ch nh trong k hiu theo h 16, bng vic s
dng mt k t X i u (ch thng hoc ch hoa), nh, X'1FF'. K hiu ny l tng ng vi
mt hng chui bit vi 4 ch s nh phn cho tng ch s h 16.
C 2 dng hng chui bit u c th c tip tc trn cc dng theo cng cch thc nh cc hng
chui thng thng. Vic a vo trong cc du $ khng th c s dng trong hng chui bit.
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 53/372
Xut bn nm 2013
4.1.2.6. Hng l s
Mt hng l s khng bao gm du thp phn, cng khng s m ban u c gi thit l dng s
nguyn nu gi tr ca n khp theo dng s nguyn (32 bit); nu khng th n c gi thit s l
dng bigint nu gi tr ca n khp theo dng bigint (64 bit); nu khng th n c ly nh l dng
s numeric. Cc hng m c cc du thp phn v/hoc du m lun c gi thit t u l dng
s numeric.
Dng cc hng s d liu c ch nh ban u ch l im khi u cho cc thut ton qui nh
dng. Trong hu ht cc trng hp hng s c t ng p vo dng ph hp nht, ph thuc
vo ng cnh. Khi cn, bn c th p mt gi tr s s c bin dch nh mt dng d liu c th
bng vic a n ra. V d, bn c th p mt gi tr s c i x nh l dng real (float4) bng
vic vit:
REAL 1.23
-- kiu chui
1.23::REAL
Chng thc s ch l cc trng hp c bit ca cc k hiu a ra chung c tho lun tip sau.
4.1.2.7. Hng cc dng khc
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 54/372
Xut bn nm 2013
nhng khng phi tt c cc tn dng c th c s dng theo cch ny; xem Phn 4.2.9 c
thm chi tit.
Cc c php gi hm v ::, CAST(), cng c th c s dng ch nh nhng hon i dng thi
gian chy (run-time) ca cc biu thc ty , nh c tho lun trong Phn 4.2.9. trnh s t
m v c php, th c php dng 'chui' - type string duy nht c th c s dng ch nh dng
hng n gin theo ngha en. Mt gii hn khc trong c php type string l n khng lm vic i
vi cc dng mng (array); hy s dng :: hoc CAST() ch nh dng ca mt hng mng.
C php CAST() tun th SQL. C php type string l mt s tng qut ha tiu chun : SQL ch
nh c php ny ch cho mt t dng d liu, nhng PostgreSQL cho php n i vi tt c cc
dng. C php vi :: l s dng theo lch s ca PostgreSQL, nh l c php gi hm.
4.1.3. Ton t
Tn ca mt ton t l mt s tun t cho ti
sau y:
NAMEDATALEN-1
+-*/<>=~!@#%^&|?
--
Khi lm vic vi cc tn ton t khng theo tiu chun SQL, bn s thng cn phi tch bch cc
ton t lin k bng cc du trng trnh s m m. V d, nu bn xc nh c mt ton t
mt ton hng bn tri c tn l @, th bn khng th vit X* @Y; bn phi vit X* @Y m bo
rng PostgreSQL c c n nh l 2 tn ton t ch khng phi l mt.
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 55/372
Xut bn nm 2013
4.1.4. K t c bit
Mt s k t m khng phi thao abc c mt ngha c bit v l khc vi vic l mt ton t.
Cc chi tit v s dng c th c thy v tr ni m yu t c php tng ng c m t. Phn
ny ch tn ti t vn cho s tn ti v tm tt cc mc tiu ca cc k t .
Cc du ngoc n (() ) c ngha thng thng ca chng nhm cc biu thc v tng
cng quyn u tin trc. Trong mt s trng hp cc du ngoc n c yu cu nh
mt phn ca c php c nh ca mt lnh SQL c bit.
4.1.5. Cc ch gii
Mt ch gii l mt tun t cc k t bt u vi 2 du gch ngang (--) v m rng cho ti cui
dng, nh:
-- y l mt ch gii SQL tiu chun
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 56/372
Xut bn nm 2013
s c phn tch nh l:
SELECT 5 ! (- 6);
v trnh phn tch c php khng c tng cho ti khi l qu mun nn du chm than ! c
xc nh nh l mt ton t hu t, khng phi l mt trung t. c c hnh vi mong mun
trong trng hp ny, bn phi vit:
SELECT (5 !) - 6;
Tnh lin kt
M t
tri (left)
::
tri
[]
tri
phi (right)
cc du tr mt ton hng
tri
du m
*/%
tri
+-
tri
du cng, du tr
IS
ISNULL
NOTNULL
tri
IN
BETWEEN
nm trong di
OVERLAPS
khp mu chui
<>
nh hn, ln hn
phi
bng nhau, ch nh
NOT
phi
ph nh theo logic
AND
tri
v theo logic
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 57/372
Tnh lin kt
tri
Xut bn nm 2013
M t
Lu rng cc qui nh u tin trc ca cc ton t cng p dng cho cc ton t do ngi s
dng nh ngha m cng c cng cc tn nh cc ton t c xy dng sn, c nhc ti trn.
V d, nu bn nh ngha mt ton t + cho mt s dng d liu ty bin th n s c cng u
tin trc nh ton t + c xy dng sn, bt k ca bn l th no.
Khi mt tn ton t iu kin theo mt s no c s dng trong c php ton t
OPERATOR, nh v d trong:
SELECT 3 OPERATOR(pg_catalog.+) 4;
Mt gi tr hng
Mt tham chiu ct
Mt tham chiu tham s v tr, trong thn ca nh ngha hm hoc khai bo c chun b
Mt biu thc c nh ch s di
Mt vin dn ton t
Mt li gi hm
Mt li gi hm ca s
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 58/372
Xut bn nm 2013
Mt cu trc mng
Mt cu trc hng
B sung vo danh sch ny, c mt s cu trc m c th c phn loi nh mt biu thc nhng
khng tun theo bt k qui tc c php chung no. Chng thng c ng ngha ca mt hm hoc
ton t v c gii thch v tr ph hp trong Chng 9. Mt v d l mnh IS NULL.
Chng ta tho lun cc hng trong Phn 4.1.2. Cc phn sau y tho lun cc la chn cn li.
4.2.2. Tham s v tr
Mt tham chiu tham s v tr c s dng chi ra mt gi tr c cung cp t bn ngoi cho
mt lnh SQL. Cc tham s c s dng trong cc nh ngha hm SQL v trong cc truy vn
c chun b. Mt s th vin my trm cng h tr vic ch nh cc gi tr d liu tch bit khi
chui lnh SQL, trong trng hp cc tham s c s dng tham chiu ti cc gi tr d liu
nm ngoi dng. Mu ca mt tham chiu tham s l:
$number
4.2.3. Ch s di - Subscript
Nu mt biu thc c mt gi tr dng mng, th mt phn t c th ca gi tr mng c th
c trch xut bng vic vit
expression[subscript]
hoc nhiu phn t lin k (mt lt ct mng) c th c trch xut bng vic vit
expression[lower_subscript:upper_subscript]
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 59/372
Xut bn nm 2013
subscript
bn thn n
Cc du ngoc n trong v d cui c yu cu. Xem phn 8.14 bit thm v cc mng.
(V th, mt tham chiu ct tiu chun thc s ch l mt trng hp c bit ca c php chn
trng). Mt trng hp c bit quan trng l vic trch xut mt trng t mt ct ca bng
dng tng hp:
(compositecol).somefield
(mytable.compositecol).somefield
t hu t mt ton hng)
trong th ton t operator i sau cc qui tc c php ca Phn 4.1.3, hoc l mt trong nhng t
kha AND, OR, v NOT, hoc l mt tn ton t iu kin dng:
OPERATOR(schema.operatorname)
Nhng ton t c bit no tn ti v liu chng c l mt ton hng hay nh phn s ph thuc vo
cc ton t no tng c h thng hoc ngi s dng nh ngha. Chng 9 m t cc ton t
c xy dng sn.
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 60/372
Xut bn nm 2013
4.2.6. Li gi hm
C php mt li gi hm l tn ca hm (c th iu kin vi mt tn s ), theo sau l danh
sch cc i s c a vo trong cc du ngoc n:
function_name ([expression [, expression ... ]] )
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 61/372
Xut bn nm 2013
ct u ra hoc cc con s. V d:
SELECT array_agg(a ORDER BY b DESC) FROM table;
ORDER BY
i sau tt c cc i
DISTINCT
ORDER BY
trong mt hm tng hp l mt m
4.2.8. Li gi hm ca s
Mt li gi hm ca s i din cho ng dng ca mt hm dng tng hp i vi mt s phn ca
cc hng c mt truy vn la chn. Khng ging nh cc li gi hm tng hp thng thng,
iu ny khng b tri vo vic to nhm cc hng c la chn vo mt hng u ra duy nht tng hng vn gi l tch bit nhau u ra ca truy vn. Tuy nhin hm ca s c kh nng qut
tt c cc hng m c th l mt phn ca nhm cc hng hin hnh m tun theo c t to thnh
nhm (danh sch PARTITION BY) ca li gi hm ca s. C php ca mt li gi hm ca s l c
php nh sau:
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 62/372
Xut bn nm 2013
existing_window_name ]
PARTITION BY expression [, ...] ]
ORDER BY expression [ ASC | DESC | USING operator ] [ NULLS { FIRST | LAST } ] [, ...] ]
frame_clause ]
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 63/372
Xut bn nm 2013
ca hng hin hnh theo trt t ORDER BY. Cc trng hp gi tr PRECEDING v gi tr FOLLOWING
hin ch c php trong ch ROWS. Chng chi ra rng khung bt u hoc kt thc vi hng m
c nhiu hng trc hoc sau hng hin hnh. Gi tr value phi l mt biu thc s nguyn khng
cha bt k bin, cc hm tng hp hoc cc hm ca s no. Gi tr phi khng l null hoc m;
nhng n c th l 0, khi chn bn thn hng hin hnh.
Cc hm ca s c xy dng sn c m t trong Bng 9-44. Cc hm ca s khc c th c
ngi s dng cho thm vo. Hn na, bt k hm tng hp c xy dng sn hay do ngi s
dng nh ngha cng c th c s dng nh mt hm ca s.
Cc c php s dng du * c s dng gi cc hm tng hp t tham s nh cc hm ca s,
v d count(*) OVER (PARTITION BY x ORDER BY y). * khng c s dng mt cch thng thng cho
cc hm ca s khng tng hp. Cc hm ca s tng hp, khng ging nh cc hm tng hp,
khng cho php DISTINCT hoc ORDER BY c s dng bn trong danh sch i s hm.
Cc li gi hm ca s ch c php trong danh sch SELECT v mnh ORDER BY ca truy vn.
Nhiu thng tin hn v cc hm ca s c th thy trong Phn 3.5, Phn 9.19 v Phn 7.2.4.
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 64/372
Xut bn nm 2013
hm. V d, chnh xc p double precision khng th c s dng theo cch ny, nhng th
tng t l float8 th c th. Hn na, cc tn interval, time v timestamp ch c th c s dng
theo cch thc ny nu chng nm trong cc du ngoc kp, v cc xung t v c php. V th, s
dng c php cast ging hm dn ti nhng s khng nht qun v c th nn trnh.
Lu : C php ging nh hm trong thc t ch l li gi hm. Khi mt trong 2 c php
cast tiu chun c s dng thc hin mt bin i thi gian thc, th n s gi trong
ni b mt hm c ng k thc hin s bin i . Theo qui c, cc hm bin i
c tn y ht nh dng u ra ca chng, v v th c php ging nh hm khng l g
hn mt li gi trc tip hm bin i nm bn di. R rng, iu ny l th g m mt
ng dng kh chuyn s da vo. c thm cc chi tit, xem CREATE CAST.
Mc nh, dng phn t mng l dng chung ca cc biu thc thnh phn, c xc nh bng vic
s dng cng cc qui tc y ht nh cc cu trc UNION hoc CASE (xem Phn 10.5). Bn c th vit
iu ny bng vic cast r rng cu trc mng ti dng mong mun, v d:
SELECT ARRAY[1,2,22.7]::integer[];
array
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 65/372
Xut bn nm 2013
---------{1,2,23}
(1 row)
iu ny c hiu ng y ht nh vic cast tng biu thc ti dng phn t mng mt cch ring r.
c nhiu hn v vic cast, xem Phn 4.2.9.
Cc gi tr mng a chiu c th c xy dng bng vic lng cc cu trc mng. Trong cc cu
trc vng trong, t kha mng ARRAY c th b b qua. V d, iu ny to ra kt qu y ht:
SELECT ARRAY[ARRAY[1,2], ARRAY[3,4]];
array
--------------{{1,2},{3,4}}
(1 row)
SELECT ARRAY[[1,2],[3,4]];
array
--------------{{1,2},{3,4}}
(1 row)
Truy vn con phi tr v mt ct duy nht. Mng kt qu mt chiu s c mt phn t cho tng
hng trong kt qu ca truy vn con, vi mt dng phn t khp vi dng ca ct u ra ca truy
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 66/372
Xut bn nm 2013
vn con .
Ch s di ca mt gi tr mng c xy dng vi ARRAY lun bt u vi 1. c thm thng tin
v cc mng, xem Phn 8.14.
T kha hng ROW l ty chn khi c nhiu hn mt biu thc trong danh sch.
Mt cu trc hng c th bao gm c php rowvalue.*, n s c m rng ti mt danh sch cc
phn t ca gi tr hng , ht nh xy ra khi c php .* c s dng mc nh ca mt danh
sch SELECT. V d, nu bng t c cc ct f1 v f2, nhng th ny l y ht:
SELECT ROW(t.*, 42) FROM t;
SELECT ROW(t.f1, t.f2, 42) FROM t;
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 67/372
Xut bn nm 2013
------1
(1 row)
SELECT getf1(CAST(ROW(11,this is a test,2.5) AS myrowtype));
getf1
------11
(1 row)
c thm chi tit, xem Phn 9.21. Cc cu trc hng cng c th c s dng trong s kt ni
vi cc truy vn con, nh c tho lun trong Phn 9.20.
Nhng iu ny l an ton:
SELECT ... WHERE CASE WHEN x > 0 THEN y/x > 1.5 ELSE false END;
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 68/372
Xut bn nm 2013
4.3. Gi hm
PostgreSQL cho php cc hm c cc tham s c tn s c gi hoc bng k hiu v tr hoc k
hiu c tn. K hiu c tn l c bit hu dng cho cc hm c mt s lng ln cc tham s, v
n lm cho cc mi lin quan gia cc tham s v cc i s thc r rng v ng tin cy hn. Theo
k hiu v tr, mt li gi hm c vit vi cc gi tr i s ca n theo trt t y ht nh chng
c nh ngha trong khai bo hm. Theo k hiu c t tn, cc i s s c khp vi cc
tham s hm bng tn v c th c vit theo bt k trt t no.
Theo bt k k hiu no, th cc tham s m c cc gi tr mc nh c a ra trong khai bo hm
cng cn hon ton khng c vit trong li gi. Nhng iu ny c bit hu dng theo k hiu
c t tn, v bt k s kt hp cc tham s no cng c th b b qua; trong khi theo k hiu v
tr th cc tham s ch c th b b qua t phi qua tri.
PostgreSQL cng h tr k hiu pha trn, n kt hp k hiu v tr v c t tn. Trong trng
hp ny, cc tham s v tr c vit trc v cc tham s c t tn xut hin sau chng.
Cc v d sau s minh ha s s dng ca tt c 3 k hiu , s dng nh ngha hm sau:
CREATE FUNCTION concat_lower_or_upper(a text, b text, uppercase boolean DEFAULT false)
RETURNS text
AS
$$
SELECT CASE
WHEN $3 THEN UPPER($1 || || $2)
ELSE LOWER($1 || || $2)
END;
$$
LANGUAGE SQL IMMUTABLE STRICT;
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 69/372
Xut bn nm 2013
V d khc l:
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 70/372
Xut bn nm 2013
5.1. C bn v bng
Mt bng trong c s d liu quan h rt ging mt bng trn giy: n bao gm cc hng v cc
ct. S lng v th t cc ct l c nh, v tng ct u c tn. S hng l bin i - n phn nh
c bao nhiu d liu c lu tr thi im c a ra. SQL khng c bt k m bo no v
trt t ca cc hng trong mt bng. Khi mt bng c c, cc hng s xut hin theo mt trt t
khng c xc nh, tr phi vic sp xp c yu cu r rng. iu ny c cp ti trong
Chng 7. Hn na, SQL khng ch nh cc m nh danh duy nht cho cc hng, nn c kh nng
s c vi hng hon ton ging ht nh nhau trong mt bng. y l h qu ca m hnh ton hc
nm bn di SQL nhng thng l khng mong mun. Phn sau ca chng ny chng ta s xem
cch lm vic vi vn ny.
Tng ct u c mt dng d liu. Dng d liu rng buc tp hp cc gi tr c kh nng m c th
c s dng tnh ton. V d, mt ct c khai bo s l dng s th s khng chp nhn cc
chui vn bn ty , v cc d liu c lu tr trong mt ct nh vy c th c s dng cho cc
tnh ton ton hc. Ngc li, mt ct c khai bo dng chui k t s chp nhn hu ht bt
k dng d liu no nhng t n khng s dng c thc hin cc php tnh ton hc, d cc
hot ng khc nh ghp ni chui l sn sng.
PostgreSQL bao gm mt tp hp ln cc dng d liu c xy dng sn m ph hp cho nhiu
ng dng. Ngi s dng cng c th nh ngha cc dng d liu ca ring h. Hu ht cc dng
d liu c xy dng sn c cc tn v ng ngha r rng, nn chng ta s hon gii thch chi tit
cho Chng 8. Mt s dng d liu c s dng thng xuyn l s nguyn integer cho ton b
cc s, numeric cho cc s thp phn c th, text cho cc chui k t, date cho ngy thng, time cho
cc gi tr thi gian trong ngy v timestamp cho cc gi tr cha c ngy thng v thi gian.
to mt bng, bn s dng kho lo lnh c tn l to bng CREATE TABLE. Trong lnh ny bn
ch nh t nht mt tn cho bng mi, cc tn ca cc ct v dng d liu ca tng ct. V d:
CREATE TABLE my_first_table (
first_column text,
second_column integer
);
Trang 71/372
Xut bn nm 2013
5.2. Cc gi tr mc nh
Mt ct c th c ch nh mt gi tr mc nh. Khi mt hng mi c to ra v khng gi tr
no c ch nh cho mt s ct, th cc ct s c in vi cc gi tr mc nh tng ng vi
chng. Mt lnh iu khin d liu cng c th yu cu r rng l mt ct s c thit lp vi gi
tr mc nh ca n, khng cn bit gi tr l g. (Cc chi tit v cc lnh iu khin d liu nm
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 72/372
Xut bn nm 2013
Chng 6).
Nu khng gi tr mc nh no c khai bo r rng, th gi tr mc nh l gi tr null. iu ny
thng c ngha v mt gi tr null c th c xem xt trnh by cc d liu khng bit.
Trong nh ngha mt bng, cc gi tr mc nh c th c lit k sau dng d liu ct. V d:
CREATE TABLE products (
product_no integer,
name text,
price numeric DEFAULT 9.99
);
trong hm nextval() cung cp cc gi tr thnh cng t mt i tng tun t (xem Phn 9.15).
i s ny l ph bin c c s tc k c bit cho n.
CREATE TABLE products (
product_no SERIAL,
...
);
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 73/372
Xut bn nm 2013
Hai rng buc u tin s trng quen. Rng buc th 3 s dng mt c php mi. N khng c
gn vo ct c th no, thay vo n xut hin nh mt khon ring bit trong danh sch ct c
cch nhau bng du phy. Cc nh ngha ct v cc nh ngha rng buc c th c lit k
theo trt t pha trn.
Chng ti ni rng 2 rng buc u tin l cc rng buc ct, trong khi rng buc th 3 l mt rng
buc bng v n c vit tch bit vi bt k nh ngha ct no. Cc rng buc ct cng c th
c vit nh cc rng buc bng, trong khi ngc li c kh nng l khng cn thit, v mt rng
buc ct c cho l tham chiu ti ch ct m n c gn ti. (PostgreSQL khng p tun th
qui tc , nhng bn nn tun theo n nu bn mun cc nh ngha bng ca bn lm vic c
vi cc h thng bng khc). V d trn cng c th c vit l:
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 74/372
Xut bn nm 2013
iu ch l vn s thch.
Cc tn c th c ch nh cho cc rng buc bng theo cch y ht nh cc rng buc ct:
CREATE TABLE products (
product_no integer,
name text,
price numeric,
CHECK (price > 0),
discounted_price numeric,
CHECK (discounted_price > 0),
CONSTRAINT valid_discount CHECK (price > discounted_price)
);
ng lu rng mt rng buc kim tra c tha mn nu biu thc kim tra nh gi thnh gi
tr ng hoc null. V hu ht cc biu thc s nh gi v gi tr null nu bt k ton hng no l
null, chng s khng ngn cn cc gi tr null trong cc ct b rng buc. m bo rng mt ct
khng c cc gi tr null, th cc rng buc khng null (not null) c m t trong phn tip sau c
th c s dng.
Mt rng buc khng null lun c vit nh mt rng buc ct. Mt rng buc khng null, v
chc nng, tng ng vi vic to ra mt rng buc kim tra CHECK (column_name IS NOT NULL),
nhng trong PostgreSQL vic to ra mt rng buc r rng khng null l hiu qu hn. Yu im l
bn khng th trao cc tn r rng cho cc rng buc khng null c to ra theo cch ny.
Tt nhin, mt ct c th c nhiu hn mt rng buc. Hy vit cc rng buc tng ci mt, ci ny
sau ci kia:
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 75/372
Xut bn nm 2013
Trt t khng l vn . Khng nht thit phi xc nh vi trt t no cc rng buc c kim tra.
Rng buc NOT NULL c mt s nghch o: rng buc NULL. iu ny khng c ngha l ct phi l
null, m c th chc chn l v dng. Thay vo , iu ny n gin chn hnh vi mc nh m ct
c th l null. Rng buc NULL khng th hin trong tiu chun SQL v khng nn s dng trong
cc ng dng kh chuyn. (N ch c a vo PostgreSQL tng thch c vi mt s h
thng c s d liu khc). Tuy nhin, mt s ngi s dng, thch iu ny v n lm d dng
hon i rng buc trong tp script.
V d, bn c th bt u vi:
CREATE TABLE products (
product_no integer NULL,
name text NULL,
price numeric NULL
);
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 76/372
Xut bn nm 2013
5.3.4. Kha ch
V mt k thut, mt rng buc kha ch (Primary Key) n gin l mt s kt hp ca mt rng
buc c nht v mt rng buc khng null. V th, 2 nh ngha bng sau y chp nhn cc d
liu ht nhau:
CREATE TABLE products (
product_no integer UNIQUE NOT NULL,
name text,
price numeric
);
CREATE TABLE products (
product_no integer PRIMARY KEY,
name text,
price numeric
);
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 77/372
Xut bn nm 2013
my trm. V d, mt ng dng giao din ha cho ngi s dng GUI m cho php sa i cc
gi tr hng c kh nng cn bit kha ch ca mt bng c kh nng xc nh mt cch c nht
cc hng.
B sung thm vo mt kha ch s t ng to ra mt ch s B-tree c nht trong ct hoc nhm
cc ct c s dng trong kha ch .
Mt bng c th c nhiu nht mt kha ch. (C th l bt k s no trong cc rng buc c nht
v khng null, v chc nng, n l iu y ht, nhng ch mt c th c xc nh nh l kha ch).
L thuyt c s d liu quan h ch ra rng mi bng phi c mt kha ch. Qui tc ny khng b
PostgreSQL p tun th, nhng thng tt nht phi tun theo n.
product_no
Chng ta ni rng trong tnh hung ny th bng cc n hng l bng tham chiu v bng cc sn
phm l bng c tham chiu ti. Tng t, c cc ct tham chiu v ct c tham chiu ti.
Bn cng c th rt gn lnh trn thnh:
CREATE TABLE orders (
order_id integer PRIMARY KEY,
product_no integer REFERENCES products,
quantity integer
);
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 78/372
Xut bn nm 2013
Mt kha ch cng c th rng buc v tham chiu ti mt nhm cc ct. Nh thng l, n sau
cn phi c vit dng rng buc bng. y l mt v d c php c tr tnh trc:
CREATE TABLE t1 (
a integer PRIMARY KEY,
b integer,
c integer,
FOREIGN KEY (b, c) REFERENCES other_table (c1, c2)
);
Cng xa c cc n hng
Th g na y?
minh ha iu ny, hy trin khai chnh sch sau trong v d v mi quan h nhiu - nhiu
trn: khi ai mun loi b mt sn phm m vn cn c tham chiu ti t mt n hng (thng
qua order_items), chng ta khng cho php iu ny. Nu ai loi b mt n hng, cc khon ca
n hng cng s b loi b:
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 79/372
Xut bn nm 2013
Vic hn ch v xa theo kiu thc nc (cascade) l 2 la chn ph bin nht. RESTRICT ngn cn
s xa mt hng c tham chiu. NO ACTION c ngha l nu bt k cc hng tham chiu no vn
cn tn ti khi rng buc c kim tra, th mt li s ny sinh; y l hnh vi mc nh nu bn
khng ch nh bt k iu g. (S khc bit c bn gia 2 la chn l NO ACTION cho php s
kim tra s c tr hon cho ti sau trong giao dch, trong khi RESTRICT th khng). CASCADE ch
nh rng khi mt hng c tham chiu b xa, th (cc) hng tham chiu ti n cng s t ng b
xa. C 2 la chn khc: SET NULL v SET DEFAULT. Chng lm cho cc ct tham chiu s c thit
lp v null hoc v cc gi tr mc nh, mt cch tng ng, khi hng c tham chiu b xa. Lu
rng chng khng tha th cho bn i vi vic quan st thy bt k cc rng buc no. V d, nu
mt hnh ng ch nh SET DEFAULT nhng gi tr mc nh c th khng lm tha mn kha ngoi,
th hnh ng s hng.
Tng t nh vi ON DELETE cng c ON UPDATE m n c gi ra khi mt ct c tham chiu
c thay i (c cp nht). Cc hnh ng c kh nng l y ht nh nhau.
V mt lnh DELETE mt hng khi bng c tham chiu hoc mt lnh UPDATE ca mt ct c
tham chiu s i hi mt s qut bng tham chiu i vi cc hng khp vi gi tr c , nn
thng mt tng tt l nh ch s cho cc ct tham chiu. V iu ny khng lun l cn thit,
v c nhiu s la chn c sn v cch nh ch s, s khai bo mt rng buc kha ngoi khng
t ng to ra mt ch s trong cc ct tham chiu.
Nhiu thng tin hn v vic cp nht v xa d liu c trong Chng 6.
Cui cng, chng ta nn lu rng mt kha ngoi phi tham chiu ti cc ct m hoc l mt
kha ch hoc to thnh mt rng buc c nht. Nu kha ngoi tham chiu ti mt rng buc
c nht, th s c mt s kh nng b sung lin quan ti vic cc gi tr null s khp c nh th
no. Chng s c gii thch trong ti liu tham chiu ca lnh to bng CREATE TABLE.
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 80/372
Xut bn nm 2013
Xem thm CREATE TABLE ... CONSTRAINT ... EXCLUDE c thm chi tit.
Vic b sung thm mt rng buc loi tr s t ng to ra mt ch s ca dng c ch nh trong
khai bo rng buc .
5.4. Ct h thng
Mi bng c vi ct h thng c h thng nh ngha theo mt cch n. V th, cc tn khng
th c s dng nh l tn cc ct do ngi s dng nh ngha. (Lu rng nhng hn ch l
tch bch vi vic liu tn c l mt t kha hay khng; a vo ngoc mt ci tn s khng cho
php bn thot khi nhng gii hn ). Bn thc s khng cn lo ngi v cc ct ; ch bit
chng c tn ti.
oid
OID ca bng c cha hng ny. Ct ny c bit thun tin cho cc truy vn m chn t cc
tn ti trt t cp bc tha k (xem Phn 5.8), v khng c n, kh ni mt hng ti t
bng ring r no. tableoid c th c kt ni i vi ct oid ca pg_class c c tn
bng.
xmin
S nh danh (ID giao dch) ca giao dch chn cho phin bn hng. (Mt phin bn hng l
tnh trng mt hng ring r; tng cp nht ca mt hng to ra mt phin bn hng mi cho
hng logic y ht).
cmin
S nh danh (ID giao dch) ca giao dch xa, hoc 0 cho mt phin bn hng b xa. C
kh nng i vi ct ny s l khng bng 0 trong mt phin bn hng nhn thy c. iu
thng ch ra rng giao dch xa cn cha c thc hin, hoc mt s xa c nh
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 81/372
Xut bn nm 2013
WITH OIDS.
T PostgreSQL 8.1,
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 82/372
Xut bn nm 2013
5.5. Sa i bng
Khi bn to mt bng v bn nhn thy rng bn to mt sai lm, hoc cc yu cu ca ng dng
thay i, bn c th b bng v to n li. Nhng iu ny khng phi l mt la chn thun tin
nu bng c in cc d liu ri, hoc nu bng c cc i tng c s d liu khc
tham chiu ti (v d mt rng buc kha ngoi). V th PostgreSQL cung cp mt h cc lnh
tin hnh cc sa i i vi cc bng ang tn ti. Lu l iu ny, v mt khi nim, l khc vi
vic ty bin cc d liu nm trong bng : y chng ta c quan tm trong vic ty bin nh
ngha, hoc cu trc ca bng.
Bn c th:
Thm cc ct
Loi b cc ct
Thay i cc gi tr mc nh
i tn cc ct
i tn cc bng
Tt c cc hnh ng c thc hin bng vic s dng lnh ALTER TABLE, trang tham chiu ca
n c cc chi tit vt ra khi nhng g c nu y.
5.5.1. Thm ct
thm mt ct, hy s dng mt lnh ging nh:
ALTER TABLE products ADD COLUMN description text;
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 83/372
Xut bn nm 2013
5.5.2. Loi b ct
loi b mt ct, hy s dng mt lnh ging nh l:
ALTER TABLE products DROP COLUMN description;
Bt k d liu no tng c trong ct s bin mt. Cc rng buc bng c lin quan ti ct cng s b
xa nt. Tuy nhin, nu ct c mt rng buc kha ngoi ca mt bng khc tham chiu ti,
th PostgreSQL s khng loi b mt cch m thm rng buc . Bn c th cho php vic loi b
bt k th g m ph thuc vo ct bng vic thm vo CASCADE:
ALTER TABLE products DROP COLUMN description CASCADE;
thm mt rng buc khng null, m n khng th c vit nh mt rng buc bng, hy s
dng c php ny:
ALTER TABLE products ALTER COLUMN product_no SET NOT NULL;
Rng buc s c kim tra ngay lp tc, nn d liu ca bng phi lm tha mn rng buc
trc khi n c th c thm vo.
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 84/372
Xut bn nm 2013
5.5.5. Thay i gi tr mc nh ca ct
thit lp mt mc nh mi cho mt ct, hy s dng mt lnh nh:
ALTER TABLE products ALTER COLUMN price SET DEFAULT 7.77;
5.5.7. i tn ct
i tn mt ct:
ALTER TABLE products RENAME COLUMN product_no TO product_number;
5.5.8. i tn bng
i tn bng:
ALTER TABLE products RENAME TO items;
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 85/372
Xut bn nm 2013
Vic vit ALL vo ch ca mt quyn u tin c bit trao tt c cc quyn u tin l ph hp cho
dng i tng .
Tn ca ngi s dng c bit PUBLIC c th c s dng trao mt quyn u tin cho tng
ngi s dng trong h thng. Hn na, cc vai tr nhm c th c thit lp gip qun l
cc quyn u tin khi c nhiu ngi s dng ca mt c s d liu - xem cc chi tit Chng 20.
thu hi mt quyn u tin, hy s dng lnh thu hi REVOKE c tn thch hp:
REVOKE ALL ON accounts FROM PUBLIC;
Cc quyn u tin c bit ca ngi ch i tng (nh, quyn thc hin DROP, GRANT, REVOKE,
) lun l n khi l ngi ch, v khng th c trao hoc b thu hi. Nhng ngi ch i tng
c th chn thu hi cc quyn u tin thng thng ca anh ta, v d lm cho mt bng ch
c i vi bn thn anh ta cng nh nhng ngi khc.
Thng thng, ch ngi ch i tng (hoc mt siu ngi s dng superuser) c th trao hoc
thu hi cc quyn u tin i vi mt i tng. Tuy nhin, c kh nng trao mt quyn u tin
vi la chn trao, n trao cho ngi nhn quyn ti lt trao n cho nhng ngi khc. Nu
la chn trao b thu hi sau th tt c nhng ai nhn c quyn u tin t ngi nhn
(mt cch trc tip hoc thng qua mt chui cc cuc trao) s mt quyn u tin . Cc chi tit
thm c trong cc trang tham chiu ca GRANT v REVOKE.
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 86/372
Xut bn nm 2013
5.7. S (schema)
Mt b c s d liu PostgreSQL bao gm mt hoc nhiu c s d liu c tn. Nhng ngi s
dng v cc nhm ngi s dng c chia s qua ton b b, nhng khng d liu no khc c
chia s qua cc c s d liu. Bt k kt ni my trm ti my ch no c a ra cng ch c th
truy cp c cc d liu trong mt c s d liu duy nht, c s d liu c ch nh theo yu
cu kt ni.
Lu : Ngi s dng ca mt b my khng nht thit phi c quyn u tin truy cp
bt k c s d liu no trong b my . Vic chia s cc tn ngi s dng c ngha l
khng th c nhng ngi s dng khc c t tn, v d, joe trong 2 c s d liu trong
cng mt b my; nhng h thng c th c thit lp cu hnh cho php joe truy cp ti
ch mt s c s d liu .
Mt c s d liu bao gm mt hoc nhiu s , ti lt chng bao gm cc bng. Cc s cng
bao gm cc dng khc cc i tng c tn, bao gm cc dng d liu, cc hm v cc ton t.
Tn i tng y ht c th c s dng trong cc s khc nhau m khng c xung t; v d, c
schema1 v myschema u c th c cc bng c tn l mytable. Khng ging nh cc c s d liu,
cc s khng c tch bch nhau mt cch cng nhc: mt ngi s dng c th truy cp cc
i tng trong bt k s no trong c s d liu m anh ta c kt ni ti, nu anh ta c cc
quyn u tin lm th.
C vi l do v sao mt ngi c th mun s dng cc s :
cho php nhiu ngi s dng dng mt c s d liu m khng quy ry ln nhau.
5.7.1. To s
to mt s , hy s dng lnh to s CREATE SCHEMA. Hy t tn cho s theo bn.
V d:
CREATE SCHEMA myschema;
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 87/372
Xut bn nm 2013
v cc lnh truy cp d liu c tho lun trong cc chng sau. (V s khc trit chng ti s ch
ni v cc bng, nhng cc tng y ht p dng cho cc dng khc cc i tng c tn, nh cc
dng v cc hm).
Thc s, thm ch c php thng thng hn
database.schema.table
c th cng c s dng, nhng hin ti iu ny ch cho s tun th chnh thng vi tiu chun
SQL. Nu bn vit mt tn c s d liu, n phi l tn nh c s d liu bn c kt ni ti.
V th to mt bng trong mt s mi, hy s dng:
CREATE TABLE myschema.mytable (
...
);
pg_
v
CREATE TABLE public.products ( ... );
5.7.3. ng tm kim s
Cc ci tn c iu kin l nng nhc vit, v thng tt nht l khng vit mt tn s c
th no vo cc ng dng c. V th cc bng thng c cc tn khng iu kin tham chiu
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 88/372
Xut bn nm 2013
Trong thit lp mc nh th iu ny tr v:
search_path
-------------"$user",public
(Chng ta b qua $user y v chng ta cha cn ngay i vi n). V sau chng ta c th truy
cp bng m khng c s nh phm cht s :
DROP TABLE mytable;
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 89/372
Xut bn nm 2013
(Public (Cng khai) u tin trong s , bn ghi public c ngha l tng ngi s dng.
Theo ngha u tin th n l mt m nh danh, theo ngha th 2 th n l mt t kha, v th vit
ch hoa hay ch thng l khc nhau; hy nh li cc ch dn t Phn 4.1.1).
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 90/372
Xut bn nm 2013
bn c th sau c gii quyt nh l bng h thng). Cc bng h thng s tip tc tun theo
qui c c cc tn bt u vi pg_, sao cho chng s khng xung t vi cc tn bng ca ngi s
dng khng iu kin, min l nhng ngi s dng trnh tin t pg_.
5.7.6. S dng cc mu
Cc s c th c s dng t chc cc d liu ca bn theo nhiu cch. C mt t cc mu
s dng c khuyn co v d dng c cu hnh mc nh h tr.
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 91/372
Xut bn nm 2013
cung cp s h tr khng gian tn bng vic cho php (c th c gii hn) s truy cp lin cc c s
d liu. Nu bn cn lm vic vi cc h thng , th tnh kh chuyn cc i c th t c bng
vic hon ton khng s dng cc s .
5.8. K tha
PostgreSQL trin khai s k tha bng, n c th l cng c hu dng cho cc nh thit k bng.
(SQL:1999 v sau ny nh ngha mt tnh nng k tha dng, n khc theo nhiu kha cnh vi cc
tnh nng c m t y).
Hy bt u vi mt v d: gi s chng ta ang c gng xy dng mt m hnh d liu cho cc
thnh ph. Tng bang c nhiu thnh ph, nhng ch c mt th ph. Chng ta mun c kh nng
nhanh chng truy xut thnh ph th ph cho bt k bang c bit no. iu ny c th c thc
hin bng vic to ra 2 bng, mt cho cc th ph bang v mt cho cc thnh ph m khng phi l
cc th ph. Tuy nhin, iu g xy ra khi chng ta mun yu cu cc d liu v mt thnh ph, bt
k liu n c l th ph hay khng? Tnh nng k tha c th gip gii quyt vn ny. Chng ta
nh ngha cc bng th ph - capitals sao cho n k tha t bng cc thnh ph - cities:
CREATE TABLE cities (
name text,
population float,
altitude int -- in feet
);
CREATE TABLE capitals (
state char(2)
) INHERITS (cities);
cities.
Cc th
Trong PostgreSQL, mt bng c th k tha t 0 hoc nhiu bng khc, v mt truy vn c th tham
chiu hoc tt c cc hng ca mt bng, hoc tt c cc hng ca mt bng cng vi tt c cc
bng con ca n. Hnh vi sau l mc nh. V d, truy vn sau y tm cc tn ca tt c cc thnh
ph, bao gm c cc th ph bang, m nm mt cao hn 500 feet:
SELECT name, altitude
FROM cities
WHERE altitude > 500;
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 92/372
Xut bn nm 2013
y t kha ONLY ch rng truy vn ch nn p dng cho bng cities, v khng cho bt k bng no
bn di cities trong tn ti trt t k tha . Nhiu lnh m chng ta tho lun ri - SELECT,
UPDATE v DELETE - h tr cho t kha ONLY.
Bn cng c th vit tn bng vi mt ci ui * ch nh r rng rng cc bng con c bao gm:
SELECT name, altitude
FROM cities*
WHERE altitude > 500;
n tr v:
tableoid | name
| altitude
-----------+-------------------+---------139793 | Las Vegas
| 2174
139793 | Mariposa
| 1953
139798 | Madison
| 845
n tr v:
relname | name
| altitude
------------+------------------+-----------cities
| Las Vegas
| 2174
cities
| Mariposa
| 1953
capitals | Madison
| 845
S k tha khng t ng truyn ging cc d liu t cc lnh INSERT hoc COPY ti cc bng khc
trong tn ti trt t k tha. Trong v d ca chng ta, lnh INSERT sau y s hng:
INSERT INTO cities (name, population, altitude, state)
VALUES (New York, NULL, NULL, NY);
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 93/372
Xut bn nm 2013
Tuy nhin iu khng gip c i vi trng hp trn v bng cities khng cha ct state, v
v th lnh s b t chi trc khi qui tc c th c p dng.
Tt c cc rng buc kim tra v cc rng buc khng null trong mt bng cha t ng c cc
con ca n k tha. Cc dng rng buc khc (cc rng buc c nht, kha ch v kha ngoi)
khng c k tha.
Mt bng c th k tha t nhiu hn 1 bng cha, trong trng hp n c s hp nht cc ct
c cc bng cha nh ngha. Bt k ct no c khai bo trong nh ngha ca bng con cng s
c b sung vo . Nu tn ct y ht xut hin trong nhiu bng cha, hoc trong c mt bng cha
v nh ngha ca bng con, th cc ct c trn sao cho ch c mt ct nh vy trong bng
con. c trn, cc ct phi c cng cc dng d liu, nu khng th mt li s pht sinh. Ct
c trn s c cc bn sao ca tt c cc rng buc kim tra ti t bt k mt trong s cc nh
ngha ct no m n t ti, v s c nh du l khng null.
S k tha bng in hnh c thit lp khi bng con c to ra, bng vic s dng mnh k
tha INHERITS ca lnh to bng CREATE TABLE. Nh mt s la chn, mt bng m c xc nh
ri theo mt cch tng thch c th c mt mi quan h cha mi c b sung vo, bng vic s
dng phng n INHERIT ca ALTER TABLE. lm iu ny th bng con mi phi a vo ri cc
ct vi cng tn v dng nh cc ct ca bng cha. N cng phi a vo cc rng buc kim tra
vi cc tn y ht v cc biu thc kim tra nh cc biu thc ca bng cha. Tng t mt lin kt
k tha c th b loi b khi mt bng con bng vic s dng phng n NO INHERIT ca ALTER
TABLE. Vic b sung v loi b ng cc lin kt k tha ging th ny c th l hu dng khi mi
quan h k tha ang c s dng cho vic phn vng bng (xem Phn 5.9).
Mt cch thun tin to mt bng tng thch m sau s c lm thnh mt bng con mi l
s dng mnh LIKE trong CREATE TABLE. iu ny to ra mt bng mi vi cc ct y ht nh bng
ngun. Nu c bt k rng buc CHECK no c nh ngha trong bng ngun, th ty chn
INCLUDING CONSTRAINTS i vi LIKE s c ch nh, khi bng con mi phi c cc rng buc
khp vi bng cha c cho l tng thch.
Mt bng cha khng th b b trong khi bt k bng con no ca n vn cn. Cc ct hoc cc rng
buc kim tra ca cc bng con u khng th b b hoc c ty bin nu chng c k tha t
bt k bng cha no. Nu bn mun loi b mt bng v tt c cc con chu ca n, mt cch d
dng b bng cha vi ty chn CASCADE.
s nhn ging bt k s thay i no trong cc nh ngha d liu ct v cc rng
buc kim tra xung tn ti trt t k tha. Mt ln na, vic b cc ct m b ph thuc vo cc
bng khc ch c kh nng khi s dng ty chn CASCADE. ALTER TABLE tun theo cng cc qui tc
i vi vic trn v t chi cc ct p bn m p dng trong qu trnh CREATE TABLE.
ALTER TABLE
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 94/372
Xut bn nm 2013
5.8.1. Cc vn cn tn ti
Lu rng khng phi tt c cc lnh SQL c kh nng lm vic trong cc tn ti trt t k tha. Cc
lnh m c s dng cho vic truy vn d liu, sa i d liu hoc sa i s (nh, SELECT,
UPDATE, DELETE, hu ht cc phng n ca ALTER TABLE, nhng khng INSERT hoc ALTER TABLE ...
RENAME) thng mc nh a vo cc bng con v h tr k hiu ONLY loi b chng. Cc lnh
m thc hin duy tr v tinh chnh c s d liu (nh, REINDEX, VACUUM) thng ch lm vic vi
cc bng ring r, vt l v khng h tr vic lp i vi cc tn ti trt t k tha. Hnh vi tng
ng ca tng lnh ring r c lm thnh ti liu trong trang tham chiu ca n (Tham chiu I,
Cc lnh SQL).
Hn ch nghim trng ca tnh nng k tha l cc ch s (bao gm c cc rng buc c nht) v
cc rng buc kha ngoi ch p dng cho cc bng n, khng cho cc bng con k tha. iu ny
l ng cho c bn tham chiu v bn c tham chiu ca mt rng buc kha ngoi. V th v v
d trn:
Vic ch nh rng ct ca bng khc REFERENCES cities(name) c th cho php bng khc
rng buc cc tn thnh ph, nhng khng rng buc c cc tn th ph. Khng c s
khc phc tt cho trng hp ny.
Nhng ph thuc c th s c sa trong mt s phin bn trong tng lai, nhng trong khi
ch i th s ch ng k l cn thit trong vic quyt nh liu s k tha c l hu dng hay
khng cho ng dng ca bn.
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 95/372
Xut bn nm 2013
Hiu nng truy vn c th c ci thin ng k trong nhng tnh hung nht nh, c bit
khi hu ht cc hng c truy cp nhiu ca bng l trong mt phn vng duy nht hoc
mt s lng nh cc phn vng. Vic phn vng thay th cho vic dn dt cc ct ch s,
lm gim kch thc ch s v lm cho c kh nng hn i vi cc phn c s dng
nhiu ca cc ch s ph hp trong b nh.
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 96/372
Xut bn nm 2013
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 97/372
Xut bn nm 2013
Mi trong s cc phn vng l cc bng hon chnh theo quyn ca ring chng, nhng
chng k tha cc nh ngha ca chng t bng o m.
iu ny gii quyt mt trong nhng vn ca chng ta: xa cc d liu c. Mi thng, tt
c iu chng ta s cn phi lm l thc hin mt lnh b bng DROP TABLE trong bng con
c nht v to ra mt bng con mi cho cc d liu ca thng mi.
3. Chng ta phi a ra cc rng buc bng khng chng ln. Thay v ch to cc bng phn
vng nh trn, script to bng thc s s l:
CREATE TABLE measurement_y2006m02 (
CHECK ( logdate >= DATE 2006-02-01
) INHERITS (measurement);
CREATE TABLE measurement_y2006m03 (
CHECK ( logdate >= DATE 2006-03-01
) INHERITS (measurement);
...
CREATE TABLE measurement_y2007m11 (
CHECK ( logdate >= DATE 2007-11-01
) INHERITS (measurement);
CREATE TABLE measurement_y2007m12 (
CHECK ( logdate >= DATE 2007-12-01
) INHERITS (measurement);
CREATE TABLE measurement_y2008m01 (
CHECK ( logdate >= DATE 2008-01-01
) INHERITS (measurement);
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 98/372
Xut bn nm 2013
Chng ta phi ti nh ngha hm trigger mi thng sao cho n lun ch ti phn vng hin
hnh. Tuy nhin, nh ngha trigger khng cn phi c cp nht.
Chng ta c th mun chn cc d liu v my ch t ng nh v phn vng vo hng
no m s c thm vo. Chng ta c th lm iu ny bng mt hm trigger phc tp hn,
v d:
CREATE OR REPLACE FUNCTION measurement_insert_trigger()
RETURNS TRIGGER AS $$
BEGIN
IF ( NEW.logdate >= DATE 2006-02-01 AND
NEW.logdate < DATE 2006-03-01 ) THEN
INSERT INTO measurement_y2006m02 VALUES (NEW.*);
ELSIF ( NEW.logdate >= DATE 2006-03-01 AND
NEW.logdate < DATE 2006-04-01 ) THEN
INSERT INTO measurement_y2006m03 VALUES (NEW.*);
...
ELSIF ( NEW.logdate >= DATE 2008-01-01 AND
NEW.logdate < DATE 2008-02-01 ) THEN
INSERT INTO measurement_y2008m01 VALUES (NEW.*);
ELSE
RAISE EXCEPTION Date out of range. Fix the measurement_insert_trigger()
function!;
END IF;
RETURN NULL;
END;
$$
LANGUAGE plpgsql;
IF
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 99/372
Xut bn nm 2013
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 100/372
Xut bn nm 2013
Khng c s loi tr rng buc, th truy vn trn c th qut tng trong cc phn vng ca bng
o m. Vi s loi tr rng buc c kch hot, trnh hoch nh (planner) s xem xt cc rng
buc ca tng phn vng v c gng chng minh rng phn vng cn khng c qut v n c th
khng c bt k hng no p ng c mnh WHERE ca truy vn . Khi trnh hoch nh c
th chng minh c iu ny, n loi tr phn vng khi k hoch truy vn.
Bn c th s dng lnh EXPLAIN ch ra s khc bit gia mt k hoch vi constraint_exclusion
c bt (kch hot) v mt k hoch m n b tt (gii hot). Mt k hoch in hnh khng c
ti u ha cho dng thit lp ny ca bng l:
SET constraint_exclusion = off;
EXPLAIN SELECT count(*) FROM measurement WHERE logdate >= DATE 2008-01-01;
QUERY PLAN
----------------------------------------------------------------------------------------------Aggregate (cost=158.66..158.68 rows=1 width=0)
-> Append (cost=0.00..151.88 rows=2715 width=0)
-> Seq Scan on measurement (cost=0.00..30.38 rows=543 width=0)
Filter: (logdate >= 2008-01-01::date)
-> Seq Scan on measurement_y2006m02 measurement (cost=0.00..30.38
width=Filter: (logdate >= 2008-01-01::date)
-> Seq Scan on measurement_y2006m03 measurement (cost=0.00..30.38
width=Filter: (logdate >= 2008-01-01::date)
...
-> Seq Scan on measurement_y2007m12 measurement (cost=0.00..30.38
width=Filter: (logdate >= 2008-01-01::date)
-> Seq Scan on measurement_y2008m01 measurement (cost=0.00..30.38
width=Filter: (logdate >= 2008-01-01::date)
rows=543
rows=543
rows=543
rows=543
Lu rng s loi tr rng buc ch c dn dt bng cc rng buc kim tra CHECK, khng bng
s hin din ca cc ch s. V th khng cn thit phi nh ngha cc ch s trong cc ct kha.
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 101/372
Xut bn nm 2013
UNION ALL,
thay v k
Tuy nhin, s cn thit phi ti to kiu nhn s thm mt bc na vo vic b sung v loi b cc
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 102/372
Xut bn nm 2013
5.9.6. Cc vn cn tn ti
Cc vn cn tn ti sau y p dng cho cc bng c phn vng:
Khng c cch no kim tra tt c cc rng buc CHECK c l loi tr ln nhau hay khng.
L an ton hn to m m sinh ra cc phn vng v to ra v/hoc sa i cc i tng
c lin quan so vi vit tng th bng tay.
Nu bn ang s dng bng tay cc lnh VACUUM hoc ANALYZE, ng qun rng bn cn
chy chng trong tng phn vng mt cch ring r. Mt lnh ging nh:
ANALYZE measurement;
s ch x l bng ch.
Cc vn cn tn ti sau y p dng cho s loi tr cc rng buc:
Loi tr rng buc ch lm vic khi mnh WHERE ca truy vn c cc rng buc. Mt truy
vn c tham s s khng c ti u ha, v trnh hoch nh khng th bit cc phn vng
no gi tr tham s c th chn lc chy. V cng l do , cc hm n nh nh
CURRENT_DATE phi c trnh.
Hy gi cho vic phn vng cc rng buc l n gin, nu khng th trnh hoch nh c
th khng c kh nng chng minh rng cc phn vng khng cn phi c thm ving.
Hy s dng cc iu kin ngang bng n gin cho vic phn vng theo lit k, hoc cc
kim th khong n gin cho vic phn vng theo khong, nh c minh ha trong cc v
d trc. Mt qui tc ngn tay ci tt l vic phn vng cc rng buc nn ch bao gm
nhng so snh ca vic phn vng (cc) ct vi cc hng s bng vic s dng cc ton t
nh ch s c theo Btree.
Tt c cc rng buc trong tt c cc phn vng ca bng ch c kim tra trong qu trnh
loi tr rng buc, sao cho cc s phn vng ln c kh nng lm gia tng thi gian ln k
hoch truy vn mt cch ng k. Vic phn vng bng vic s dng cc k thut s lm
vic tt vi, c l, hng trm phn vng; khng c s dng nhiu ngn phn vng.
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 103/372
Xut bn nm 2013
Cc hm v ton t
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 104/372
Xut bn nm 2013
phin bn trc 7.3 s khng c duy tr hoc to ra trong qu trnh nng cp. Tt c cc
dng ph thuc khc s c to ra mt cch ph hp trong mt bn nng cp t c s d
liu trc 7.3.
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 105/372
Xut bn nm 2013
Cc gi tr d liu c lit k theo trt t trong cc ct xut hin trong bng, cch nhau bng
cc du phy.
Thng thng, cc gi tr d liu s l cc hng, nhng cc biu thc v hng cng c php. C
php trn c nhc im l bn cn bit th t ca cc ct trong bng. trnh iu ny bn
cng c th lit k cc ct mt cch r rng. V d, c 2 lnh sau c cng hiu qu nh lnh trn:
INSERT INTO products (product_no, name, price) VALUES (1, Cheese, 9.99);
INSERT INTO products (name, price, product_no) VALUES (Cheese, 9.99, 1);
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 106/372
Xut bn nm 2013
INSERT INTO products (product_no, name, price) VALUES (1, Cheese, DEFAULT);
INSERT INTO products DEFAULT VALUES;
Mo: Khi chn nhiu d liu cng mt lc, xem xt s dng lnh COPY. Khng mm do
nh lnh INSERT, nhng l c hiu qu hn. Hy tham chiu ti Phn 14.4 c thm thng
tin v vic ci thin hiu nng ti theo b.
Nh bn thy, biu thc cho gi tr mi c th tham chiu ti (cc) gi tr ang tn ti trong hng.
Chng ta cng li mnh WHERE. Nu n b b qua, th c ngha l tt c cc hng trong bng
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 107/372
Xut bn nm 2013
UPDATE
6.3. Xa d liu
Cho ti nay chng ta gii thch cch thm d liu vo cc bng v cch thay i d liu.
iu cn li l tho lun cch loi b d liu m khng cn cn thit na. Ht nh vic thm d
liu ch c kh nng trong ton b cc hng, bn ch c th loi b ton b cc hng khi mt bng.
Trong phn trc chng ta gii thch rng SQL khng a ra cch thc trc tip cp ti cc
hng ring r. V th, vic loi b cc hng ch c th c thc hin bng vic ch nh cc iu
kin m cc hng s c loi b phi trng khp. Nu bn c mt kha ch trong bng th bn c
th ch nh hng chnh xc. Nhng bn cng c th loi b nhm cc hng khp vi mt iu kin,
hoc bn c th loi b tt c cc hng trong mt bng cng mt ln.
Bn hy s dng lnh xa DELETE loi b cc hng; c php rt tng t nh vi lnh UPDATE.
V d, loi b tt c cc hng khi bng cc sn phm m c gi l 10, hy s dng:
DELETE FROM products WHERE price = 10;
Nu bn n gin vit:
DELETE FROM products;
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 108/372
Xut bn nm 2013
Chng 7. Truy vn
Cc chng trc gii thch cch to cc bng, cch in y d liu cho chng, v cch
iu khin cc d liu . By gi chng ta cui cng tho lun cch truy xut d liu t c
s d liu.
Cc phn sau y m t cc chi tit ca danh sch chn, biu thc ca bng, v c t cc kiu. Cc
truy vn WITH c cp cui cng v chng l mt tnh nng cao cp.
Mt dng truy vn n gin c dng:
SELECT * FROM table1;
(gi thit rng a, b v c l dng d liu s). Xem Phn 7.3 c thm cc chi tit.
l mt dng biu thc bng n gin: n ch c mt bng. Ni chung, cc biu thc
bng c th l cc cu trc phc tp ca cc bng c bn, cc ghp ni lin kt v cc truy vn con.
Nhng bn cng c th b qua ton b biu thc bng v s dng lnh SELECT nh mt my tnh:
FROM table1
SELECT 3 * 4;
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 109/372
Xut bn nm 2013
Cc lin kt c iu kin
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 110/372
Xut bn nm 2013
INNER
i vi tng hng R1 ca bng T1, bng c lin kt c mt hng cho tng hng trong
bng T2 tha mn iu kin lin kt vi R1.
LEFT OUTER JOIN (Lin kt tri bn ngoi)
Trc tin, mt lin kt bn trong c thc hin. Sau , i vi tng hng trong T1 m
khng lm tha mn iu kin lin kt vi bt k hng no trong T2, th mt hng c lin
kt c thm vo vi cc gi tr null trong cc ct ca T2.
RIGHT OUTER JOIN (Lin kt phi bn ngoi)
Trc tin, mt lin kt bn trong c thc hin. Sau , i vi tng hng trong T2 m
khng lm tha mn iu kin lin kt vi bt k hng no trong T1, th mt hng c lin
kt c thm vo vi cc gi tr null trong cc ct ca T1.
FULL OUTER JOIN (Lin kt y bn ngoi)
Trc ht, mt lin kt bn trong c thc hin. Sau , i vi tng hng trong T1 m
khng lm tha mn iu kin lin kt vi bt k hng no trong T2, th mt hng c lin
kt c thm vo vi cc gi tr null trong cc ct T2. Hn na, i vi tng hng ca T2
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 111/372
Xut bn nm 2013
t2:
num | value
------+------1 | xxx
3 | yyy
5 | zzz
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 112/372
Xut bn nm 2013
iu kin lin kt c ch nh vi
ti lin kt .
ON
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 113/372
Xut bn nm 2013
hoc
FROM table_reference alias
Tn hiu tr thnh tn mi ca tham chiu bng cho ti nay nh truy vn hin hnh c quan tm
- khng c php tham chiu ti bng bng tn gc bt k u khc trong truy vn . V th,
iu ny l khng hp l:
SELECT * FROM my_table AS m WHERE my_table.a > 5; --
sai
Cc tn hiu ca bng ch yu l v s thun tin, nhng l cn thit s dng chng khi lin kt
mt bng ti bn thn n, nh:
SELECT * FROM people AS mother JOIN people AS child ON mother.id = child.mother_id;
Hn na, mt tn hiu c yu cu nu tham chiu bng l mt truy vn con (xem Phn 7.2.1.3).
Cc du ngoc n s c s dng gii quyt nhng t m. Trong v d sau, lnh u tin ch
nh tn hiu b cho s xut hin th 2 ca my_table, nhng lnh th 2 ch nh tn hiu cho kt qu
ca lin kt:
SELECT * FROM my_table AS a CROSS JOIN my_table AS b ...
SELECT * FROM (my_table AS a CROSS JOIN my_table) AS b ...
JOIN,
th tn hiu n i (cc) tn
l SQL hp l, nhng:
SELECT a.* FROM (my_table AS a JOIN your_table AS b ON ...) AS c
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 114/372
Xut bn nm 2013
Cc truy vn con (hoc ph) ch nh mt bng dn xut phi nm trong cc du ngoc n v phi
c ch nh cho mt tn hiu bng. (Xem Phn 7.2.1.2). V d:
FROM (SELECT * FROM table1) AS alias_name
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 115/372
Xut bn nm 2013
trong
boolean.
search_condition
Sau khi x l mnh FROM, mi hng ca bng o dn xut c kim tra i vi iu kin tm
kim. Nu kt qu ca iu kin l ng, th hng c gi trong bng u ra, nu khng (nh,
nu kt qu l sai hoc null) th s b b. iu kin tm kim thng tham chiu t nht ti mt ct
ca bng c to ra trong mnh FROM; iu ny khng b yu cu, nhng nu khng th mnh
WHERE s kh l v dng.
Lu : iu kin lin kt ca mt lin kt vng trong c th c vit hoc trong mnh
WHERE hoc trong mnh JOIN. V d, cc biu thc bng sau l tng ng:
FROM a, b WHERE a.id = b.id AND b.val > 5
v:
FROM a INNER JOIN b ON (a.id = b.id) WHERE b.val > 5
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 116/372
...
...
...
...
FROM
FROM
FROM
FROM
fdt
fdt
fdt
fdt
WHERE
WHERE
WHERE
WHERE
Xut bn nm 2013
x |y
---+--a|3
c|2
b|5
a|1
(4 rows)
=> SELECT x FROM test1 GROUP BY x;
x
--a
b
c
(3 rows)
Trong truy vn th 2, chng ta c th khng vit SELECT * FROM test1 GROUP BY x, v khng c
gi tr duy nht cho ct y m c th c lin kt vi tng nhm. Cc ct c nhm c th c tham
chiu trong danh sch chn v chng c mt gi tr duy nht trong tng nhm.
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 117/372
Xut bn nm 2013
x | sum
---+----a|4
b|5
c|2
(3 rows)
Trong v d ny, cc ct product_id, p.name, v p.price phi nm trong mnh GROUP BY v chng
c tham chiu trong danh sch chn ca truy vn. (Ph thuc vo cch m bng cc sn phm
c thit lp, tn v gi c th hon ton ph thuc vo m ID sn phm, nn vic to cc nhm
b sung c th v l thuyt l khng cn thit, d iu ny khng c trin khai). Ct s.units khng
phi nm trong danh sch GROUP BY v n ch c s dng trong mt biu thc tng hp (sum(...) ),
n th hin tin bn hng ca mt sn phm. i vi tng sn phm, truy vn tr v mt hng
tng tt c tin bn hng ca sn phm .
Trong SQL kht khe, GROUP BY ch c th nhm theo cc ct ca bng ngun nhng PostgreSQL
m rng iu ny cng cho php GROUP BY i vi nhm theo cc ct trong danh sch chn.
Vic nhm theo cc biu thc gi tr thay v cc tn ct n gin cng c php.
Nu mt bng tng c nhm bng vic s dng GROUP BY, nhng ch cc nhm nht nh c
quan tm, th mnh HAVING c th c s dng, rt ging mt mnh WHERE, loi b cc
nhm khi kt qu . C php l:
SELECT select_list FROM ... [WHERE ...] GROUP BY ... HAVING boolean_expression
Cc biu thc trong mnh HAVING c th tham chiu ti c cc biu thc c nhm v cc biu
thc khng c nhm (chng nht thit lin quan ti mt hm tng hp). V d:
=> SELECT x, sum(y) FROM test1 GROUP BY x HAVING sum(y) > 3;
x | sum
---+----a|4
b|5
(2 rows)
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 118/372
Xut bn nm 2013
x | sum
---+----a|4
b|5
(2 rows)
Trong v d trn, mnh WHERE ang chn cc hng theo mt ct m khng c nhm (biu
thc ch ng cho cc bn hng trong 4 tun cui), trong khi mnh HAVING hn ch u ra i vi
cc nhm vi tng lng bn hng hn 5.000. Lu rng cc biu thc tng hp khng nht thit
cn phi l y ht trong tt c cc phn ca truy vn.
Nu mt truy vn gm cc li gi hm tng hp, nhng khng c mnh GROUP BY, th vic nhm
vn xy ra; kt qu l mt hng nhm duy nht (hoc c l khng hng no c, nu hng duy nht
sau b HAVING loi b). Y ht l ng nu n c mnh HAVING, thm ch khng c bt k li
gi hm tng hp no hoc mnh GROUP BY no.
7.2.4. X l hm ca s
Nu truy vn c bt k hm ca s no (xem Phn 3.5, Phn 9.19 v Phn 4.2.8), th cc hm
c nh gi sau bt k vic to nhm, tng hp v lc HAVING no c thc hin. l, nu
truy vn s dng bt k tng hp GROUP BY hoc HAVING no th cc hng c cc hm ca s xem
l cc hng ca nhm thay v cc hng ca bng gc t FROM /WHERE.
Khi nhiu hm ca s c s dng, tt c cc hm ca s, v mt c php tng ng vi cc
mnh PARTITION BY v ORDER BY trong cc nh ngha ca s c m bo s c nh gi
theo mt s truyn d liu duy nht. V th chng s thy cng y ht vic sp xp trt t, thm ch
nu ORDER BY khng xc nh mt cch duy nht mt trt t. Tuy nhin, khng m bo no c
thc hin i vi s nh gi cc hm c cc c t khc nhau v PARTITION BY hoc ORDER BY.
(Trong cc trng hp nh vy mt bc sp xp in hnh c yu cu gia cc vic truyn cc
nh gi hm ca s, v s sp xp khng c m bo gi li trt t cc hng m ORDER BY
ca n coi nh l tng ng).
Hin hnh, cc hm ca s lun yu cu cc d liu trc khi c sp xp, v v th u ra ca
truy vn s c trt t theo cch ny hay cch khc ca cc mnh PARTITION BY /ORDER BY i vi
cc hm ca s. Tuy nhin, khng c khuyn co da vo iu ny. Hy s dng mt mnh
ORDER BY mc nh r rng nu bn mun chc chn cc kt qu c sp xp theo mt cch thc
c bit.
SELECT
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 119/372
Xut bn nm 2013
bng vic c kh nng kt hp cc bng, cc kiu nhn, vic loi b cc hng, vic to nhm,
Bng ny cui cng c truyn ti cho vic x l bng danh sch chn. Danh sch chn xc nh
cc ct no ca bng trung gian thc s s l u ra.
7.3.2. Nhn ct
Cc khon u vo trong danh sch chn c th l cc tn c ch nh cho vic x l sau, nh
s dng trong mt mnh ORDER BY hoc hin th i vi ng dng my trm. V d:
SELECT a AS value, b + c AS sum FROM ...
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 120/372
Xut bn nm 2013
nhng iu ny th lm vic:
SELECT a "value", b + c AS sum FROM ...
bo v chng li vic c thm cc t kha c kh nng trong tng lai, c khuyn co rng
bn lun hoc vit AS hoc cho vo trong ngoc kp tn ct u ra.
Lu : Vic t tn cc ct u ra y l khc so vi c lm trong mnh FROM (xem
Phn 7.2.1.2). C kh nng i tn ct y ht 2 ln, nhng tn c ch nh trong danh
sch chn l tn m s c chuyn i.
7.4. Kt hp cc truy vn
Cc kt qu ca 2 truy vn c th c kt hp bng vic s dng s kt hp tp hp cc hot ng,
s giao nhau v s khc nhau.
C php l
query1 UNION [ALL] query2
query1 INTERSECT [ALL] query2
query1 EXCEPT [ALL] query2
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 121/372
Xut bn nm 2013
query2.
tnh ton s kt hp, s giao nhau hoc s khc nhau ca 2 truy vn, 2 truy vn phi l
tng thch kt hp, c ngha l chng tr v s ct y ht v cc ct tng ng c cc dng d
liu tng thch, nh c m t trong Phn 10.5.
7.5. Sp xp hng
Sau khi mt truy vn sn sinh ra mt bng u ra (sau khi danh sch chn c x l), n c th
c sp xp ty . Nu vic sp xp khng c chn, th cc hng s c tr v theo mt trt t
khng c ch nh. Trt t thc s trong trng hp s ph thuc vo cc dng qut v lin kt
v trt t trn a, nhng n phi khng c da vo. Mt trt t sp xp u ra c bit ch c th
c m bo nu bc sp xp c chn r rng.
Mnh ORDER BY ch nh trt t sp xp:
SELECT select_list
FROM table_expression
ORDER BY sort_expression1 [ASC | DESC] [NULLS { FIRST | LAST }]
[, sort_expression2 [ASC | DESC] [NULLS { FIRST | LAST }] ...]
Thc s, PostgreSQL s dng lp ton t mc nh B-tree cho dng d liu ca biu thc xc nh trt t sp
xp ASC v DESC. Theo qui c, cc dng d liu s c thit lp sao cho cc ton t < and > tng ng vi trt
t sp xp ny, nhng mt nh thit k dng d liu do ngi s dng nh ngha c th chn lm th g khc.
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 122/372
Xut bn nm 2013
trc hay sau cc gi tr khng null trong trt t sp xp hay khng. Mc nh, cc gi tr null sp
xp dng nh ln hn so vi bt k gi tr khng null (non-null) no; l, NULLS FIRST l mc
nh cho trt t DESC, nu khc th l NULLS LAST.
Lu rng cc la chn sp xp trt t c xem l c lp i vi tng ct sp xp. V d ORDER
BY x, y DESC c ngha l ORDER BY x ASC, y DESC, n khng l y ht nh ORDER BY x DESC, y DESC.
Mt sort_expression cng c th l nhn ct hoc s ca mt ct u ra, nh trong:
SELECT a + b AS sum, c FROM table1 ORDER BY sum;
SELECT a, max(b) FROM table1 GROUP BY a ORDER BY 1;
v OFFSET cho php truy xut ch mt phn cc hng c phn cn li ca truy vn to ra:
SELECT select_list
FROM table_expression
[ ORDER BY ... ]
[ LIMIT { number | ALL } ] [ OFFSET number ]
Khi s dng LIMIT, iu quan trng phi s dng mt mnh ORDER BY m rng buc cc hng kt
qu vo mt trt t c nht. Nu khng th bn s c mt tp con cc hng ca truy vn mt
cch khng th on trc c. Bn c th c yu cu t 10-20 hng, nhng 10-20 theo trt t
sp xp no? Trt t sp xp l khng r, tr phi bn ch nh ORDER BY.
Trnh ti u ha truy vn tnh ti LIMIT khi to cc k hoch truy vn, nn bn rt c kh nng c cc
k hoch khc nhau (c cc trt t hng khc nhau) ph thuc vo nhng g bn trao cho LIMIT v
OFFSET. V th, vic s dng cc gi tr khc nhau ca LIMIT/OFFSET chn cc tp con khc nhau
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 123/372
Xut bn nm 2013
OFFSET
Tng danh sch cc biu thc trong cc du ngoc n sinh ra mt hng trong bng. Cc danh sch
tt c phi c cng y ht s cc phn t (nh, s ct trong bng), v cc khon u vo tng ng
trong tng danh sch phi c cc dng d liu tng thch. Dng d liu thc s c ch nh cho
tng ct kt qu c xc nh bng vic s dng cc qui tc y ht nh i vi UNION (xem Phn
10.5). Nh mt v d:
VALUES (1, one), (2, two), (3, three);
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 124/372
Xut bn nm 2013
ch v truy vn ny. Ngi ta s dng tnh nng ny l chia cc truy vn phc tp thnh cc phn
n gin hn. Mt v d l:
WITH regional_sales AS (
SELECT region, SUM(amount) AS total_sales
FROM orders
GROUP BY region
), top_regions AS (
SELECT region
FROM regional_sales
WHERE total_sales > (SELECT SUM(total_sales)/10 FROM regional_sales)
)
SELECT region,
product,
SUM(quantity) AS product_units,
SUM(amount) AS product_sales
FROM orders
WHERE region IN (SELECT region FROM top_regions)
GROUP BY region, product;
n hin th tng bn hng theo tng sn phm ch trong cc khu vc bn hng hng u. V d ny
c th c vit m khng c WITH, nhng chng ta c th cn ti 2 mc lng nhau cc lnh
SELECT con. D dng hn tun theo cch ny.
Trnh sa i ty chn RECURSIVE lm thay i WITH t ch s thun tin v c php trong mt tnh
nng hon thnh cc iu m nu khc i th khng c kh nng trong SQL tiu chun. S dng
RECURSIVE, mt truy vn WITH c th tham chiu ti u ra ca ring n. Mt v d rt n gin l
truy vn ny tnh tng cc s nguyn t 1 ti 100:
WITH RECURSIVE t(n) AS (
VALUES (1)
UNION ALL
SELECT n+1 FROM t WHERE n < 100
)
SELECT sum(n) FROM t;
Dng chung ca mt truy vn qui WITH lun l mt khon khng qui, ri UNION (hoc UNION
ALL), ri mt khon qui, ni m ch khon qui c th c mt tham chiu ti u ra ca ring
truy vn . Mt truy vn nh vy c thc thi nh sau:
nh gi truy vn qui
1. Hy nh gi khon khng qui. i vi UNION (nhng khng vi UNION ALL), hy b cc
hng p bn. Hy a vo tt c cc hng cn li trong kt qu ca truy vn qui, v
cng t chng vo mt bng lm vic tm thi.
2. Min l bng lm vic khng rng, hy lp li cc bc:
a) nh gi khon qui, thay th cc ni dung ca bng lm vic i vi t tham chiu
qui. i vi UNION (nhng khng vi UNION ALL), hy b cc hng p bn v cc hng
p bt k hng kt qu no trc . a vo tt c cc hng cn li vo trong kt qu
ca truy vn qui, v cng t chng vo mt bng trung gian tm.
b) Thay th cc ni dung ca bng lm vic bng cc ni dung ca bng trung gian, ri lm
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 125/372
Xut bn nm 2013
Khi lm vic vi cc truy vn qui, iu quan trng phi chc chn rng phn qui ca truy vn
cui cng s khng tr v b s liu, nu khng th truy vn s lp v tn. i khi, vic s dng
UNION thay cho UNION ALL c th hon tt c iu ny bng vic b cc hng m p bn cc
hng u ra trc . Tuy nhin, thng th mt chu k khng lin quan ti cc hng u ra m
hon ton p bn: c th l cn thit kim tra ch mt hoc mt t cc trng thy liu im y
ht c t c trc hay khng. Phng php tiu chun cho vic iu khin cc tnh hung nh
vy l tnh ton bt k mng gi tr no c thm ving ri. V d, xem xt truy vn sau y
tm kim ha mt bng bng vic s dng mt trng lin kt:
WITH RECURSIVE search_graph(id, link, data, depth) AS (
SELECT g.id, g.link, g.data, 1
FROM graph g
UNION ALL
SELECT g.id, g.link, g.data, sg.depth + 1
FROM graph g, search_graph sg
WHERE g.id = sg.link
)
SELECT * FROM search_graph;
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 126/372
Xut bn nm 2013
Ngoi vic ngn cc chu k, gi tr mng thng hu dng theo quyn ca ring n nh vic i
din cho ng (path) c ly vi ti c bt k hng c bit no.
Trong trng hp chung ni m nhiu hn mt trng cn phi c kim tra nhn thc c
mt chu k, hy s dng mt mng cc hng. V d, nu chng ta cn so snh cc trng f1 v f2:
WITH RECURSIVE search_graph(id, link, data, depth, path, cycle) AS (
SELECT g.id, g.link, g.data, 1,
ARRAY[ROW(g.f1, g.f2)],
false
FROM graph g
UNION ALL
SELECT g.id, g.link, g.data, sg.depth + 1,
path || ROW(g.f1, g.f2),
ROW(g.f1, g.f2) = ANY(path)
FROM graph g, search_graph sg
WHERE g.id = sg.link AND NOT cycle
)
SELECT * FROM search_graph;
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 127/372
Xut bn nm 2013
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 128/372
Xut bn nm 2013
Tn hiu
M t
bigint
int8
s nguyn 8 byte c k
bigserial
serial8
bit [ (n) ]
chui bit di c nh
varbit
boolean
bool
box
bytea
varchar [ (n) ]
chui k t di bin i
character [ (n) ]
char [ (n) ]
chui k t di c nh
cidr
circle
date
double precision
float8
inet
integer
int, int4
s nguyn 4 byte c k
line
ng v cc trn mt mt phng
lseg
macaddr
money
numeric [ (p, s) ]
path
ng a l trn mt phng
point
im a l trn mt phng
polygon
real
float4
smallint
int2
s nguyn 2 byte c k
serial
serial4
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 129/372
Tn hiu
Xut bn nm 2013
M t
text
chui k t di bin i
timetz
timestamp [ (p) ] [
without time zone ]
timestamp [ (p) ] with
time zone
timestamptz
tsquery
truy vn tm kim vn bn
tsvector
ti liu tm kim vn bn
txid_snapshot
uuid
xml
d liu XML
timestamp
(c
8.1. Dng s
Cc dng s bao gm cc s nguyn 2, 4 v 8 byte, cc s du chm ng 4 v 8 byte, v cc s
thp phn chnh xc c kh nng chn c. Bng 8-2 lit k cc dng c sn.
Bng 8-2. Cc dng s
Tn
Kch c lu tr
M t
Di
smallint
2 bytes
s nguyn dy nh
-32768 ti +32767
integer
4 bytes
-2147483648 ti +2147483647
bigint
8 bytes
s nguyn dy ln
- 9223372036854775808 ti
9223372036854775807
decimal
variable
numeric
variable
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 130/372
Kch c lu tr
Xut bn nm 2013
M t
Di
real
4 bytes
double precision
8 bytes
serial
4 bytes
s nguyn t ng tng
1 ti 2147483647
bigserial
8 bytes
s nguyn t ng tng ln
1 ti 9223372036854775807
8.1.2. S chnh xc ty
Dng numeric c th lu tr cc s ti 1.000 ch s chnh xc v thc hin cc tnh ton mt cch
chnh xc. c bit c khuyn co cho vic lu tr cc lng tin v cc lng khc ni m tnh
chnh xc c yu cu. Tuy nhin, tnh ton s hc trn cc gi tr numeric l rt chm so vi cc
dng s nguyn, hoc vi cc dng du chm ng c m t trong phn sau.
Chng ta s dng cc khi nim sau bn di: Phm vi ca mt numeric l s tnh ton cc ch s
thp phn trong phn phn s, bn phi ca du thp phn. chnh xc ca numeric l tnh tng
ca cc ch s c ngha trong ton b s , l, s cc ch s c 2 pha ca du thp phn. V
th s 23.5141 c chnh xc ca 6 v thang s 4. Cc s nguyn c th c coi l c thang s 0.
C chnh xc ti a v thang ti a ca mt ct
ct dng numeric, hy s dng c php:
numeric
c th c cu hnh. khai bo mt
NUMERIC(precision, scale)
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 131/372
Xut bn nm 2013
NUMERIC(precision)
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 132/372
Xut bn nm 2013
So snh 2 gi tr chm thp phn cho s bng nhau c th khng phi lc no cng lm vic
c nh mong i.
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 133/372
Xut bn nm 2013
nn tng.
is equivalent to specifying:
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 134/372
Xut bn nm 2013
SELECT 1234::text::money;
Kch c lu tr
8 bytes
M t
lng tin
Di
- 92233720368547758.08 ti +92233720368547758.07
8.3. Dng k t
Bng 8-4. Cc dng k t
Tn
M t
di bin i vi hn ch
character(n) , char(n)
text
di khng hn ch v bin i
text,
n lu tr cc chui di bt k. D dng
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
text
l khng
Trang 135/372
Xut bn nm 2013
a
| char_length
------+------------ok | 2
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 136/372
Xut bn nm 2013
b
| char_length
------------ +------------ok
|2
good
|5
too l
1
|5
Kch c lu tr
M t
"char"
1 byte
dng ni b 1 byte
name
64 bytes
Kch c lu tr
1 hoc 4 byte cng vi chui nh phn thc t
M t
chui nh phn di bin i
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 137/372
Xut bn nm 2013
M t
Trnh by u vo
c thot
V d
Trnh by
u ra
zero octet
E\\000
SELECT E\\000::bytea;
\000
39
nhy n
hoc E\\047
SELECT E\::bytea;
92
du cho ngc
SELECT E\\\\::bytea;
\\
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 138/372
M t
Xut bn nm 2013
Trnh by u vo
c thot
E\\xxx (gi tr h 8)
V d
SELECT E\\001::bytea;
Trnh by
u ra
\001
M t
du cho ngc
Trnh by u ra c
thot
V d
Kt qu
u ra
\\
SELECT E\\134::bytea;
\\
\xxx (gi tr h 8)
SELECT E\\001::bytea;
\001
32 ti 126
i din b k t my trm
SELECT E\\176::bytea;
cc byte in c
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 139/372
Xut bn nm 2013
Kch c
lu tr
M t
Gi tr thp
Gi tr cao
Gii php
8 bytes
4713 BC
294276 AD
1 microsecond
/ 14 ch s
4713 BC
294276 AD
1 microsecond
/ 14 ch s
date
4 bytes
4713 BC
5874897 AD
1 ngy
8 bytes
24:00:00
1 microsecond
/ 14 ch s
12 bytes
24:00:00-1459
1
microsecond /
14 ch s
-178000000 nm 178000000 nm
1 microsecond
/ 14 ch s
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 140/372
Xut bn nm 2013
Lu l nu c fields v p c ch nh, th
ch cho cc giy.
fields
phi bao gm
SECOND,
v chnh xc p dng
Dng thi gian vi vng thi gian (time with time zone) c tiu chun SQL xc nh, nhng nh
ngha a ra cc c tnh dn ti s hu dng ng ng. Trong hu ht cc trng hp, s kt hp
ca date, time, timestamp without time zone v timestamp with time zone s a ra mt di hon
chnh chc nng ngy thng/thi gian c bt k ng dng no yu cu.
Cc dng abstime v reltime l cc dng c chnh xc thp hn v c s dng trong ni b.
Bn khng c khuyn khch s dng cc dng trong cc ng dng; cc dng ni b c th
bin mt trong mt phin bn trong tng lai.
Trang 141/372
Xut bn nm 2013
M t
1999-01-08
January 8, 1999
1/8/1999
1/18/1999
01/02/03
Ngy 2 thng 1 nm 2003 theo ch MDY, ngy 1 thng 2 nm 2003 theo ch DMY; ngy 3
thng 2 nm 2001 theo ch YMD
1999-Jan-08
Jan-08-1999
08-Jan-1999
99-Jan-08
08-Jan-99
Jan-08-99
19990108
990108
1999.008
nm v ngy ca nm
J2451187
January 8, 99 BC
Nm 99 BC
time zone
u vo hp l cho cc dng bao gm thi gian ca ngy theo sau l mt vng thi gian ty
chn. (Xem Bng 8-11 v Bng 8-12). Nu mt vng thi gian c ch nh u vo cho time
without time zone, th n m thm c b qua. Bn cng c th ch nh mt ngy thng nhng n
s b b qua, ngoi tr khi bn s dng mt tn vng thi gian c lin quan ti mt qui tc tit kim
nh sng ban ngy nh America/New_York. Trong trng hp ny vic ch nh ngy thng c yu
cu xc nh liu tiu chun hoc thi gian tit kim nh sng ban ngy c c p dng hay
khng. S b tr vng thi gian ph hp c ghi nhn trong gi tr time with time zone.
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 142/372
Xut bn nm 2013
M t
04:05:06.789
ISO 8601
04:05:06
ISO 8601
04:05
ISO 8601
040506
ISO 8601
04:05 AM
04:05 PM
04:05:06.789-8
ISO 8601
04:05:06-08:00
ISO 8601
04:05-08:00
ISO 8601
040506-08
ISO 8601
04:05:06 PST
M t
PST
America/New_York
PST8PDT
-8:00
-800
-8
zulu
Tham kho Phn 8.5.3 c thm thng tin v cch ch nh cc vng thi gian.
8.5.1.3. Du thi gian
u vo hp l cho cc dng du thi gian cu to t s ghp mt ngy thng v mt thi gian, theo
sau l mt vng thi gian ty chn, theo sau l mt la chn AD hoc BC. (Nh mt la chn,
AD/BC c th xut hin trc vng thi gian, nhng y khng l trt t c u tin). V th:
1999-01-08 04:05:06
v
1999-01-08 04:05:06 -8:00
l cc gi tr hp l, chng tun theo tiu chun ISO 8601. Hn na, nh dng chung:
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 143/372
Xut bn nm 2013
c h tr.
Tiu chun SQL phn bit cc hng timestamp without time zone v timestamp with time zone bng
s hin din ca mt biu tng du + hoc - v b tr vng thi gian sau thi gian . V th,
theo tiu chun,
TIMESTAMP 2004-10-19 10:23:54
l mt timestamp with time zone. PostgreSQL khng bao gi kim tra ni dung ca mt chui hng
trc khi xc nh dng ca n, v v th s i x vi c 2 trn nh l timestamp without time
zone. m bo rng mt hng c i x nh l timestamp with time zone, hy trao cho n dng
r rng ng:
TIMESTAMP WITH TIME ZONE 2004-10-19 10:23:54+02
Trang 144/372
Xut bn nm 2013
Cc dng hp l
M t
epoch
date , timestamp
infinity
date , timestamp
-infinity
date , timestamp
now
today
date , timestamp
na m hm nay
tomorrow
date , timestamp
na m ngy mai
yesterday
date , timestamp
na m hm qua
allballs
time
00:00:00.00 UTC
Cc hm tng thch SQL sau y cng c th c s dng ginh c gi tr thi gian hin
hnh i vi dng d liu tng ng: CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP,
LOCALTIME, LOCALTIMESTAMP. 4 dng sau chp nhn mt c t chnh xc phn giy ty chn.
(Xem Phn 9.9.4). Lu chng l cc hm SQL v khng c tha nhn trong cc chui u vo
d liu.
M t
V d
ISO
1997-12-17 07:37:16-08
SQL
POSTGRES
kiu gc ban u
German
kiu vng
Trong cc kiu SQL v POSTGRES, ngy xut hin trc thng nu trt t trng DMY tng c
ch nh, nu khc th thng s xut hin trc ngy. (Xem Phn 8.5.1 bit cch iu ny thit lp
cng nh hng ti s nhn bit cc gi tr u vo). Bng 8-15 ch ra mt v d.
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 145/372
Xut bn nm 2013
Trt t u vo
u ra
SQL, DMY
day/month/year
SQL, MDY
month/day/year
Postgres, DMY
day/month/year
Cc kiu ngy thng/thi gian c th c ngi s dng chn bng lnh SET datestyle, tham s
DateStyle trong tp cu hnh postgresql.conf, hoc bin mi trng PGDATESTYLE trn my ch hoc
my trm. Hm nh dng to_char (xem Phn 9.8) cng sn sng nh mt cch thc mm do hn
nh dng kt qu u ra ngy thng/thi gian.
D dng date khng th c mt vng thi gian c lin quan, th dng time li c th. Cc
vng trong th gii thc c t ngha, tr phi c lin quan ti ngy thng cng nh thi
gian, v s b tr c th khc nhau trong nm vi cc bin thi gian tit kim nh sng ban
ngy.
gii quyt cc kh khn , chng ti khuyn co s dng cc dng ngy thng/thi gian c
cha c ngy thng v thi gian khi s dng cc vng thi gian. Chng ti khng khuyn co s
dng dng time with time zone (d n c PostgreSQL h tr cho cc ng dng c trc ri v
v s thun tin vi tiu chun SQL). PostgreSQL gi thit vng thi gian bn a ca bn cho bt
k dng no ch cha ngy thng hoc thi gian.
Tt c cc ngy thng v thi gian m vng thi gian hiu c s c lu ni b trong UTC.
Chng c chuyn i sang thi gian bn a trong vng c tham s cu hnh timezone ch nh
trc khi c hin th cho my khch.
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 146/372
Xut bn nm 2013
Ngn gn, y l s khc bit gia nhng vit tt v cc tn y : cc vit tt lun i din cho
mt s b tr c nh t UTC, trong khi hu ht cc tn y ng mt qui nh thi gian a
phng v tit kim nh sng ban ngy, v v th c 2 b tr c kh nng theo UTC.
Bn c th lo rng tnh nng vng thi gian dng POSIX c th m thm dn ti vic chp nhn cc
u vo gi to, v khng c s kim tra v tnh hp l ca cc t vit tt vng thi gian. V d, SET
TIMEZONE TO FOOBAR0 s lm vic, lm cho h thng s dng mt cch c hiu qu hn l s vit
tt k d khc thng theo UTC.
Mt vn khc phi nh trong u l theo cc tn vng thi gian POSIX, cc phn b dng c
s dng cho cc v tr pha ty ca Greenwich. nhng ni khc, PostgreSQL tun theo qui c
chun ISO 8601 m cc phn b vng thi gian dng l pha ng ca Greenwich.
Trong mi trng hp, cc tn vng thi gian c tha nhn l phn bit ch hoa v ch thng.
(y l s thay i vi cc phin bn PostgreSQL trc 8.2, n tng l phn bit ch hoa v ch
thng trong mt s ng cnh ny nhng li khng trong cc ng cnh khc). Cc tn y v cc
tn vit tt u khng c gn cng vo my ch; chng c c t cc tp cu hnh c lu tr
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 147/372
Xut bn nm 2013
Lnh SET TIME ZONE ca SQL thit lp vng thi gian cho phin lm vic. y l mt la
chn thay th ni SET TIMEZONE TO vi mt c php tng thch c t ca SQL.
8.5.4. u vo khong
Cc gi tr khong interval c th c vit bng vic s dng c php rm r sau:
[@] quantity unit [quantity unit...] [direction]
trong
quantity
l mt s (c kh nng c k hiu);
unit
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 148/372
Xut bn nm 2013
Years
Months
Weeks
Days
Hours
Minutes
Seconds
Nm
Thng
Tun
Ngy
Gi
Pht
Giy
chui phi bt u bng ch P, v mt ch T tch cc phn ngy thng v thi gian ca khong
. Cc gi tr c a ra nh l cc s tng t vi ngy thng theo ISO 8601.
Khi vit mt hng khong vi mt c t cc trng fields, hoc khi ch nh mt chui cho mt ct
khong m c xc nh vi mt c t fields, ngha ca s lng khng c nh du ph
thuc vo fields. V d INTERVAL 1 YEAR c c nh l 1 nm, trong khi INTERVAL 1 c ngha l 1
giy. Hn na, cc gi tr trng bn phi ca trng c ngha nht c c t fields cho
php s b loi b mt cch m thm. V d, vit INTERVAL 1 day 2:03:04 HOUR TO MINUTE s c kt
qu loi b trng giy, nhng khng loi b trng ngy.
Theo tiu chun SQL th tt c cc trng ca mt gi tr khong phi c du y ht, nn mt du m
u s p dng cho tt c cc trng; v d du m trong hng khong '-1 2:03:04' s p dng cho
c cc ngy v cc phn gi/pht/giy. PostgreSQL cho php cc trng c cc du khc nhau, v
theo truyn thng i x vi tng trng theo s trnh by theo ng cnh nh c k hiu mt cch
c lp, sao cho phn gi/pht/giy c xem l dng trong v d ny. Nu IntervalStyle c thit
lp cho sql_standard th mt du u c coi l s p dng cho tt c cc trng (m ch khi
khng c du b sung no xut hin). Nu khng th din gii theo truyn thng ca PostgreSQL s
c s dng. trnh s nhm ln, c khuyn co gn mt du r rng cho tng trng nu c
bt k trng no l m.
V ni b, cc gi tr interval c lu tr nh l cc thng, ngy v giy. iu ny c lm v s
ngy trong thng l khc nhau, v mt ngy c th c 23 hoc 25 gi nu s chnh sa thi gian tit
kim nh sng ban ngy c lin quan. Cc trng thng v ngy l s nguyn, trong khi trng giy
c th l phn s. V cc khong thng c to ra t cc chui hng hoc t php tr timestamp,
nn phng php lu tr ny lm vic tt trong hu ht cc trng hp. Cc hm justify_days v
justify_hours l sn sng cho vic chnh sa ngy v gi m trn khi di thng thng ca chng.
nh dng u vo di dng, v trong mt s trng ca cc nh dng u vo gn cht hn, cc
gi tr trng c th c cc phn thp phn; v d '1.5 week' hoc '01:02:03.45'. u vo nh vy
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 149/372
Xut bn nm 2013
M t
1-2
3 4:05:06
P1Y2M3DT4H5M6S
P0001-02-03T04:05:06
8.5.5. u ra khong
nh dng u ra ca dng khong c th c thit lp v mt trong 4 dng sql_standard, postgres,
postgres_verbose hoc iso_8601, bng vic s dng lnh SET intervalstyle. Mc nh l nh dng
postgres. Bng 8-18 ch cc v d ca tng dng u ra.
Dng sql_standard to u ra m tun th vi c t tiu chun SQL cho cc chui hng khong, nu
gi tr khong p ng c nhng hn ch ca tiu chun (hoc ch nm-thng hoc ch ngy-thi
gian, khng pha trn cc thnh phn dng v m). Nu khng u ra s trng ging nh mt chui
hng tiu chun nm-thng i theo sau l mt chui hng ngy-thi gian, vi cc du r rng c
thm vo trnh nhm ln cc khong du b pha trn.
u ra dng postgres khp vi u ra cc phin bn PostgreSQL trc 8.4 khi m tham s
DateStyle c thit lp theo ISO.
u ra ca dng postgres_verbose khp vi u ra ca cc phin bn PostgreSQL trc 8.4 khi tham
s DateStyle tng c thit lp cho u ra khng theo ISO.
u ra ca dng iso_8601 khp vi nh dng c cc b ch nh c m t phn 4.4.3.2 ca
tiu chun ISO 8601.
Bng 8-18 Cc v d dng u ra khong
c t dng
Khong nm-thng
sql_standard
1-2
3 4:05:06
-1-2 +3 -4:05:06
postgres
1 nm 2 thng
3 ngy 04:05:06
postgres_verbose @
1 nm 2 thng
@ 1 nm 2 thng -3 ngy 4 gi 5
pht 6 giy trc
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 150/372
Khong nm-thng
P1Y2M
Xut bn nm 2013
Khong pha trn
P-1Y-2M3DT-4H-5M-6S
Kch c lu tr
1 byte
M t
trng thi ng hoc sai
Du trng u hoc sau s b b qua, v khng phn bit ch hoa v ch thng. Cc t kha
TRUE v FALSE c u tin (tun theo SQL) s dng.
V d 8-2 ch ra rng cc gi tr boolean l cc u ra s dng cc k t t v f.
V d 8-2. S dng dng boolean
CREATE TABLE test1 (a boolean, b text);
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 151/372
Xut bn nm 2013
8.7. Cc dng nh s
Cc dng nh s (enum) l cc dng d liu bao gm mt tp hp cc gi tr tnh, c sp xp
theo trt t. Chng l tng ng vi cc dng enum c h tr trong mt s ngn ng lp trnh.
Mt v d dng enum c th l cc ngy ca tun, hoc mt tp hp cc gi tr trng thi cho mt
mu d liu.
Mt khi c to ra, dng enum c th c s dng trong cc nh ngha bng hoc hm ging ht
nh bt k dng no khc:
CREATE TYPE mood AS ENUM (sad, ok, happy);
CREATE TABLE person (
name text,
current_mood mood
);
INSERT INTO person VALUES (Moe, happy);
SELECT * FROM person WHERE current_mood = happy;
name | current_mood
--------+-------------Moe | happy
(1 row)
8.7.2. Xp th t
Vic xp th t cc gi tr trong mt dng enum l trt t theo cc gi tr c lit k khi dng
c to ra. Tt c cc ton t so snh tiu chun v cc hm tng hp c lin quan c h
tr cho enum. V d:
INSERT INTO person VALUES (Larry, sad);
INSERT INTO person VALUES (Curly, ok);
SELECT * FROM person WHERE current_mood > sad;
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 152/372
Xut bn nm 2013
name | current_mood
--------+-------------Moe | happy
Curly | ok
(2 rows)
SELECT * FROM person WHERE current_mood > sad ORDER BY current_mood;
name | current_mood
--------+-------------Curly | ok
Moe | happy
(2 rows)
SELECT name
FROM person
WHERE current_mood = (SELECT MIN(current_mood) FROM person);
name
------Larry
(1 row)
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 153/372
Xut bn nm 2013
8.8. Dng a l
Cc dng d liu a l th hin cc i tng khng gian 2 chiu. Bng 8-20 ch ra cc dng a l
c sn trong PostgreSQL. Dng c bn nht, im, to nn c s cho tt c cc dng khc.
Bng 8-20. Cc dng a l
Tn
Kch c lu tr
Trnh by
M t
point (im)
16 bytes
im trn mt mt phng
(x,y)
32 bytes
((x1,y1),(x2,y2))
32 bytes
on thng c gii hn
((x1,y1),(x2,y2))
box (hp)
32 bytes
Hp ch nht
((x1,y1),(x2,y2))
path (ng)
16+16n bytes
((x1,y1),...)
path (ng)
16+16n bytes
ng m
[(x1,y1),...]
polygon (a gic)
40+16n bytes
((x1,y1),...)
24 bytes
ng trn
8.8.1. im
Cc im l khi xy dng 2 chiu c bn cho cc dng a l. Cc gi tr dng
bng vic s dng cc c php sau:
point
c ch nh
(x,y)
x,y
8.8.2. Cc on thng
Cc on thng (lseg) c trnh by theo cp cc im. Cc gi tr dng
vic s dng bt k c php no sau y:
lseg
c ch nh bng
[ ( x1 , y1 ) , ( x2 , y2 ) ]
( ( x1 , y1 ) , ( x2 , y2 ) )
( x1 , y1 ) , ( x2 , y2 )
x1 , y1 , x2 , y2
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 154/372
Xut bn nm 2013
8.8.3. Cc hp
Cc hp c th hin bng cp cc im m chng nm cc gc i din ca hp . Cc gi tr
dng box c ch nh bng vic s dng bt k c php no sau y:
( ( x1 , y1 ) , ( x2 , y2 ) )
( x1 , y1 ) , ( x2 , y2 )
x1 , y1 , x2 , y2
8.8.4. ng
Cc ng c cc danh sch cc im kt ni th hin. Cc ng c th l m, ni m cc im
u v cui trong danh sch c xem l khng ni vi nhau, hoc ng, ni m cc im u v
cui c thy c ni vi nhau.
Cc gi tr dng path c ch nh bng vic s dng bt k c php no sau y:
[ ( x1 , y1 ) , ... , ( xn , yn ) ]
( ( x1 , y1 ) , ... , ( xn , yn ) )
( x1 , y1 ) , ... , ( xn , yn )
( x1 , y1 , ... , xn , yn )
x1 , y1 , ... , xn , yn
8.8.5. a gic
Cc a gic c cc danh sch cc im (cc nh ca a gic) th hin. Cc a gic rt ging vi
cc ng khp kn, nhng c lu gi khc v c tp cc th tc h tr ring ca chng.
Cc gi tr dng polygon c ch nh bng vic s dng bt k c php no sau y:
( ( x1 , y1 ) , ... , ( xn , yn ) )
( x1 , y1 ) , ... , ( xn , yn )
( x1 , y1 , ... , xn , yn )
x1 , y1 , ... , xn , yn
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 155/372
Xut bn nm 2013
8.8.6. ng trn
Cc ng trn c mt im tm v bn knh th hin. Cc gi tr dng
vic s dng bt k c php no sau y:
circle
c ch nh bng
<(x,y),r>
((x,y),r)
(x,y),r
x,y,r
Kch c lu tr
M t
cidr
7 hoc 19 bytes
inet
7 hoc 19 bytes
macaddr
6 bytes
Cc a ch MAC
Khi sp xp cc dng d liu inet hoc cidr, cc a ch IPv4 s lun sp xp trc cc a ch IPv6,
bao gm c cc a ch IPv4 c gi hoc c nh x ti cc a ch IPv6, nh ::10.2.3.4 hoc
::ffff:10.4.3.2.
8.9.1. inet
Dng inet gi mt a ch my ch IPv4 hoc IPv6, v mng con (subnet) ca n mt cch ty chn,
tt c trong mt trng. Mng con c th hin bng s cc bit a ch mng th hin trong a
ch my ch (mt n mng [netmask]). Nu mt n mng l 32 bit v a ch l IPv4, th gi
tr khng ch mt mng con, m ch l mt my ch (host) duy nht. Trong IPv6, di a ch
l 128 bit, nn 128 bit ch nh mt a ch my ch duy nht. Lu l nu bn mun chp nhn ch
cc mng, th bn nn s dng dng cidr hn l dng inet.
nh dng u vo cho dng ny l address/y trong address l mt a ch IPv4 hoc IPv6 v y l
s cc bit trong mt n mng . Nu phn /y khng c, th mt n mng l 32 bit cho IPv4 v 128
bit cho IPv6, nn gi tr ch th hin mt my ch host duy nht. hin th, phn /y c nn
nu mt n mng ch nh mt my ch host duy nht.
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 156/372
Xut bn nm 2013
8.9.2. cidr
Dng cidr gi mt c t mng IPv4 hoc IPv6. Cc nh dng u vo v u ra tun theo cc qui
c nh tuyn Min Internet Khng c lp (Classless Internet Domain Routing). nh dng
cho vic ch nh cc mng l address/y trong address l mng c th hin nh mt a ch
IPv4 hoc IPv6, v y l s cc bit trong mt n mng. Nu y b b qua, th n c tnh bng vic s
dng nhng gi thit t h thng nh s mng lp c hn, ngoi tr n s t nht l ln
bao gm tt c cc byte c vit u vo. L mt li ch nh mt a ch mng m c cc bit
c thit lp bn phi ca mt n mng c ch nh.
Bng 8-22 ch mt s v d.
Bng 8-22. Cc v d u vo dng cidr
u vo cidr
u ra cidr
abbrev(cidr)
192.168.100.128/25
192.168.100.128/25
192.168.100.128/25
192.168/24
192.168.0.0/24
192.168.0/24
192.168/25
192.168.0.0/25
192.168.0.0/25
192.168.1
192.168.1.0/24
192.168.1/24
192.168
192.168.0.0/24
192.168.0/24
128.1
128.1.0.0/16
128.1/16
128
128.0.0.0/16
128.0/16
128.1.2
128.1.2.0/24
128.1.2/24
10.1.2
10.1.2.0/24
10.1.2/24
10.1
10.1.0.0/16
10.1/16
10
10.0.0.0/8
10/8
10.1.2.3/32
10.1.2.3/32
10.1.2.3/32
2001:4f8:3:ba::/64
2001:4f8:3:ba::/64
2001:4f8:3:ba::/64
2001:4f8:3:ba:2e0:81ff:fe22:d1f1
/2102081:4f8:3:ba:2e0:81ff:fe22:d1f1
/2102081:4f8:3:ba:2e0:81ff:fe22:d1f1
::ffff:1.2.3.0/120
::ffff:1.2.3.0/120
::ffff:1.2.3/120
::ffff:1.2.3.0/128
::ffff:1.2.3.0/128
::ffff:1.2.3.0/128
inet
hoc
cidr,
hy th cc
8.9.4. macaddr
Dng
macaddr
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 157/372
Xut bn nm 2013
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 158/372
Xut bn nm 2013
Mt gi tr chui bit i hi 1 byte cho tng nhm 8 bit, cng 5 hoc 8 byte tng th ph thuc vo
di ca chui (nhng cc gi tr di c th c nn hoc c dch chuyn vt ra khi
dng, nh c gii thch Phn 8.3 cho cc chui k t).
8.11.1. tsvector
Mt gi tr tsvector l mt danh sch c sp xp cc t v khc bit nhau, chng l cc t c
bnh thng ha trn cc bin th khc nhau ca cng t y ht (xem Chng 12 c cc chi
tit). Vic sp xp v loi b p bn c thc hin t ng u vo, nh trong v d ny:
SELECT a fat cat sat on a mat and ate a fat rat::tsvector;
tsvector
---------------------------------------------------a and ate cat fat mat on rat sat
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 159/372
Xut bn nm 2013
8.11.2. tsquery
Mt gi tr
&
& (AND)
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 160/372
Xut bn nm 2013
so vi | (OR).
Mt cch ty chn, cc t v trong mt tsquery c th c gn nhn vi mt hoc nhiu hn cc k
t trng s, hn ch chng trng khp ch cc t v ca tsvector vi cc trng s trng khp:
SELECT fat:ab & cat::tsquery;
tsquery
-----------------fat:AB & cat
130
PostgreSQL cng chp nhn cc mu la chn thay th sau cho u vo: s dng cc k t s ch
hoa, nh dng tiu chun trong cc du ngoc nhn, b qua mt s du gch ngang, b sung thm
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 161/372
Xut bn nm 2013
8.13.1. To gi tr XML
to mt gi tr dng xml t cc d liu k t, hy s dng hm xmlparse:
XMLPARSE ( { DOCUMENT | CONTENT } value)
Cc v d:
XMLPARSE (DOCUMENT <?xml version="1.0"?><book><title>Manual</title><chapter>...</chapter></
XMLPARSE (CONTENT abc<foo>bar</foo><bar>foo</bar>)
Trong khi y ch l cch bin i cc chui k t thnh cc gi tr XML theo tiu chun SQL,
th cc c php c th PostgreSQL l:
xml <foo>bar</foo>
<foo>bar</foo>::xml
cng c th c s dng.
Dng xml khng kim tra hp l cc gi tr u vo i vi mt khai bo dng ti liu - DTD
(Document Type Declaration), thm ch khi gi tr u vo ch nh mt DTD. Hin cng khng c
s h tr no c xy dng sn cho vic kim tra hp l i vi cc ngn ng s khc XML
nh XML Schema.
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 162/372
Xut bn nm 2013
dng c th l character, character varying hoc text (hoc mt tn hiu cho mt trong s ). Mt
ln na, theo tiu chun SQL, y ch l cch bin i gia dng xml v cc dng k t, nhng
PostgreSQL cng cho php bn n gin a ra gi tr .
Khi mt gi tr chui k t c a ra hoc t dng xml m khng i qua XMLPARSE hoc
XMLSERIALIZE, mt cch tng ng, th s la chn ca DOCUMENT so vi CONTENT c xc nh
bng tham s cu hnh phin lm vic ca la chn XML, n c th c thit lp bng vic s
dng lnh tiu chun:
SET XML OPTION { DOCUMENT | CONTENT };
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 163/372
Xut bn nm 2013
8.14. Mng
PostgreSQL cho php cc ct ca mt bng c xc nh nh l cc mng a chiu di bin
thin. Cc mng dng c bn c xy dng sn hoc do ngi s dng nh ngha, hoc dng tng
hp c th c to ra. Cc mng ca cc min cn cha c h tr.
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 164/372
Xut bn nm 2013
Nh c ch ra, mt dng d liu mng c t tn bng vic ni thm cc du ngoc vung ([])
vo tn cc phn t mng ca dng d liu . Lnh trn s to mt bng c tn l sal_emp vi
mt ct dng text (name), mt mng mt chiu dng s nguyn integer (pay_by_quarter - tr theo
qu), n th hin lng nhn vin theo qu, v mt mng vn bn (schedule - lch) 2 chiu, n th
hin lch tun ca nhn vin .
C php i vi CREATE TABLE cho php kch c chnh xc ca cc mng s c ch nh, v d:
CREATE TABLE tictactoe (
squares integer[3][3]
);
Tuy nhin, s trin khai hin hnh b qua bt k cc gii hn kch c mng c cung cp no,
ngha l, hnh vi l y ht nh i vi cc mng di khng c ch nh.
Trin khai hin hnh cng khng p tun th s chiu c khai bo. Cc mng ca mt dng yu
t c bit tt c c xem xt l dng y ht, bt chp kch c hoc s chiu. V th, vic khai bo
kch c hoc s lng chiu ca mng trong lnh to bng CREATE TABLE n gin l ti liu; n
khng tc ng ti hnh vi trong thi gian thc.
Mt c php la chn thay th tun th tiu chun SQL bng vic s dng t kha mng
th c s dng cho cc mng 1 chiu. pay_by_quarter c th c nh ngha nh l:
ARRAY,
Tuy nhin, nh trc, PostgreSQL khng p tun th hn ch kch c trong bt k trng hp no.
8.14.2. u vo gi tr mng
vit mt gi tr mng nh mt hng theo ngha en, hy a cc gi tr phn t vo trong cc
du ngoc nhn v tch bch chng bng du phy. (Nu bn bit C, th iu ny khng ging c
php ca C v cc cu trc khi to). Bn c th t cc du ngoc kp xung quanh bt k gi tr
phn t mng no, v phi lm th nu n c cha cc du phy hoc cc du ngoc nhn. (Chi tit
hn xut hin bn di). V th, nh dng chung ca mt hng mng l nh sau:
{ val1 delim val2 delim ... }
trong delim l k t phn cch cho dng ny, nh c ghi li trong khon u vo its pg_type.
Trong s cc dng d liu tiu chun c cung cp trong phn phi ca PostgreSQL, tt c u s
dng du phy (,), ngoi tr dng hp box m n s dng mt du chm phy (;). Tng gi tr val
hoc l mt hng s ca dng phn t mng, hoc l mt mng ph. V d ca mt hng mng l:
{{1,2,3},{4,5,6},{7,8,9}}
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 165/372
Xut bn nm 2013
Cc mng a chiu phi c s trng khp m rng cho tng chiu. Mt s khng trng khp gy ra
mt li, v d:
INSERT INTO sal_emp
VALUES (Bill,
{10000, 10000, 10000, 10000},
{{"meeting", "lunch"}, {"meeting"}});
ERROR: multidimensional arrays must have array expressions with matching dimensions
Lu rng cc phn t mng l cc hng hoc cc biu thc SQL thng thng; v d, cc hng
chui s nm trong cc du ngoc n, thay v trong cc du ngoc kp nh chng c th trong
mt hng mng. C php cu trc mng ARRAY c tho lun chi tit hn trong Phn 4.2.11.
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 166/372
Xut bn nm 2013
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 167/372
Xut bn nm 2013
8.14.4. Sa i mng
Mt gi tr mng c th c thay th hon ton:
UPDATE sal_emp SET pay_by_quarter = {25000,25000,27000,27000}
WHERE name = Carol;
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 168/372
Xut bn nm 2013
Ton t ghp ni cho php mt phn t duy nht s c y vo u hoc cui mt mng 1 chiu.
N cng chp nhn 2 mng N chiu, hoc mt mng N chiu v mt mng N+1 chiu.
Khi mt phn t duy nht c y vo hoc u hoc cui ca mt mng 1 chiu, th kt qu l
mt mng vi ch s di gii hn thp hn y ht nh ton hng ca mng. V d:
SELECT array_dims(1 || [0:1]={2,3}::int[]);
array_dims
-----------[0:2]
(1 row)
SELECT array_dims(ARRAY[1,2] || 3);
array_dims
-----------[1:3]
(1 row)
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 169/372
Xut bn nm 2013
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 170/372
Xut bn nm 2013
Tuy nhin, iu ny nhanh chng tr nn nng nhc cho nhng mng ln, v khng hu dng nu
khng bit kch c ca mng. Mt phng php thay th c m t trong Phn 9.21. Truy vn
trn c th c thay th bng:
SELECT * FROM sal_emp WHERE 10000 = ANY (pay_by_quarter);
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 171/372
Xut bn nm 2013
Trnh x l chui thot loi b mt mc cc du cho ngc, sao cho nhng g ti trong
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 172/372
Xut bn nm 2013
trnh phn tch gi tr bt k no ca mng trong cng ging nh {"\\","\""}. i li, cc chui
i vi th tc u vo dng d liu vn bn text s tr thnh \ v " mt cch tng ng.
(Nu chng ta tng lm vic vi mt dng d liu m th tc u vo ca n cng i x
vi cc du cho ngc mt cch c bit, v d bytea, th chng ta c th cn ti 8 du cho
ngc trong lnh c c mt du cho ngc trong phn t mng c lu tr). Vic
a vo cc du $ (xem Phn 4.1.2.4) c th c s dng trnh nhu cu phi nhn i
cc du cho ngc.
Mo: C php cu trc mng ARRAY (xem Phn 4.2.11) thng d hn lm vic so vi c
php hng mng khi vit cc gi tr mng trong cc lnh SQL. Trong ARRAY, cc gi tr phn
t ring r c vit theo cch y ht m chng c th c vit khi khng l cc thnh vin
ca mt mng.
hoc cc hm:
CREATE FUNCTION price_extension(inventory_item, integer) RETURNS numeric
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 173/372
Xut bn nm 2013
8.15.2. u vo gi tr tng hp
vit mt gi tr tng hp nh mt hng s theo ngha en, hy a cc gi tr ca trng vo
cc du ngoc n v phn cch chng bng cc du phy. Bn c th t cc du ngoc kp xung
quanh bt k gi tr trng no, v phi lm th nu n c cha cc du phy hoc cc du ngoc
n. (Chi tit hn xem bn di). V th, nh dng chung ca mt hng tng hp l nh sau:
( val1 , val2 , ... )
Mt v d l:
("fuzzy dice",42,1.99)
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 174/372
Xut bn nm 2013
T kha hng ROW thc s l ty chn min l bn c nhiu hn 1 trng trong biu thc, sao cho
chng c th n gin ha thnh:
(fuzzy dice, 42, 1.99)
(, 42, NULL)
C php biu thc hng ROW c tho lun chi tit hn trong Phn 4.2.12.
item,
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 175/372
Xut bn nm 2013
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 176/372
Xut bn nm 2013
Trnh x l hng chui loi b mt mc cc du cho ngc, sao cho nhng g ti trnh phn
tch gi tr tng hp trng ging nh ("\"\\"). i li, chui c dng cho th tc u vo
dng d liu vn bn text s tr thnh "\. (nu chng ta tng lm vic vi mt dng d liu
m th tc u vo ca n cng i x vi cc du cho ngc mt cch c bit, v d
bytea, th chng ta c th cn ti 8 du cho ngc trong lnh c c mt du cho
ngc trong trng tng hp c lu tr). Vic cho vo ngoc cc du $ (xem Phn
4.1.2.4) c th c s dng trnh cn phi nhn i cc du cho ngc.
Mo: C php cu trc hng ROW thng d dng hn lm vic so vi c php hng tng
hp khi vit cc gi tr tng hp trong cc lnh SQL. Trong ROW, cc gi tr trng ring r
c vit theo cch y ht nh chng c th c vit khi khng c cc thnh vin ca mt
s tng hp.
hn l
SELECT * FROM pg_attribute
WHERE attrelid = (SELECT oid FROM pg_class WHERE relname = mytable);
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 177/372
Xut bn nm 2013
Tham chiu
M t
V d gi tr
oid
any
nh danh i tng s
564182
regproc
pg_proc
tn hm
sum
regprocedure
pg_proc
hm vi cc dng i s
sum(int4)
regoper
pg_operator
tn ton t
regoperator
pg_operator
ton t vi cc dng i s
regclass
pg_class
tn quan h
pg_type
regtype
pg_type
tn dng d liu
integer
regconfig
pg_ts_config
cu hnh tm kim vn bn
english
regdictionary
pg_ts_dict
t in tm kim vn bn
simple
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 178/372
Xut bn nm 2013
M t
any
anyarray
anyelement
anyenum
Ch rng mt hm chp nhn bt k dng d liu enum no (xem Phn 35.2.5 v Phn 8.7).
anynonarray
Ch rng mt hm chp nhn bt k dng d liu khng l mng no (xem Phn 35.2.5).
cstring
internal
language_handler
record
trigger
void
Ch rng mt hm tr v khng gi tr no c.
opaque
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 179/372
Xut bn nm 2013
Chng 9. Hm v ton t
PostgreSQL a ra mt s lng ln cc hm v ton t cho cc dng d liu c xy dng sn.
Ngi s dng cng c th nh ngha cc hm v ton t ca ring mnh, nh c m t trong
Phn V. Cc lnh psql \df v \do c th c s dng lit k tt c cc hm v ton t c sn mt
cch tng ng.
Nu bn c quan tm v tnh kh chuyn th hy lu rng hu ht cc hm v ton t c m t
trong chng ny, vi ngoi l ca hu ht cc ton t s hc v so snh thng thng v mt s
hm c lu r rng, s khng c tiu chun SQL xc lp. Mt s trong chc nng c m
rng c hin din trong cc h thng qun l c s d liu SQL khc, v trong nhiu trng hp
chc nng l tng thch v nht qun gia cc trin khai khc nhau. Chng ny cng khng
phi l ton din mi kha cnh; cc hm b sung thm s c trong cc phn ph hp ca sch ch
dn ny.
SQL s dng mt h thng logic 3 gi tr vi true (ng), false (sai) v null (khng bit). Hy quan
st cc bng ng sau y:
a
a AND b
a OR b
TRUE
TRUE
TRUE
TRUE
TRUE
FALSE
FALSE
TRUE
TRUE
NULL
NULL
TRUE
FALSE
FALSE
FALSE
FALSE
FALSE
NULL
FALSE
NULL
FALSE
NULL
FALSE
NULL
NULL
NULL
NULL
NULL
NOT a
TRUE
FALSE
FALSE
TRUE
NULL
NULL
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 180/372
Xut bn nm 2013
M t
<
nh hn
>
ln hn
<=
nh hn hoc bng
>=
ln hn hoc bng
bng
<> hoc !=
khng bng
Lu : Ton t != c chuyn thnh <> trong pha ca trnh phn tch c php. Khng c
kh nng trin khai cc ton t != v <> m lm cc iu khc nhau.
Cc ton t so snh l c sn cho tt c cc dng d liu ph hp. Tt c cc ton t u l cc ton
t nh phn tr v cc gi tr dng boolean; cc biu thc nh 1 < 2 < 3 l khng hp l (v khng c
ton t < so snh mt gi tr Boolean vi 3).
Hn na i vi cc ton t so snh, cu trc BETWEEN c th l c sn:
a BETWEEN x AND y
l tng ng vi
a >= x AND a <= y
Lu l
NOT
l tng ng vi
a < x OR a > y
Hy khng vit
expression = NULL
NULL
l khng bng vi
NULL.
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 181/372
Xut bn nm 2013
gi tr khng c bit, v khng r liu 2 gi tr khng c bit c bng nhau hay khng). Hnh
vi ny tun th theo tiu chun SQL.
Mo: Mt s ng dng c th mong i rng expression = NULL tr v ng (true) nu expression
c tnh gi tr null. c khuyn co mnh m rng cc ng dng s c sa i
tun th vi tiu chun SQL. Tuy nhin, nu iu khng th c thc hin th bin cu
hnh transform_null_equals l sn sng. Nu iu c kch hot, th PostgreSQL s bin
i cc mnh x = NULL thnh x IS NULL.
Lu : Nu expression l c gi tr hng, th IS NULL l ng (true) khi bn thn biu thc hng
l null hoc khi tt c cc trng ca hng l null, trong khi IS NOT NULL l ng khi
bn thn biu th l non-null v tt c cc trng ca hng l non-null. V hnh vi ny,
IS NULL v IS NOT NULL khng lun tr v cc kt qu ngc nhau i vi cc biu thc c gi
tr hng, ngha l mt biu thc c gi tr hng m c cha c cc gi tr null v not-null s
tr v sai (false) cho c 2 kim th. nh ngha ny tun th tiu chun SQL, v l mt thay
i t hnh vi khng nht qun c trong PostgreSQL cc phin bn trc 8.2.
Cc ton t so snh thng thng mang li null (biu th khng bit), khng l ng (true) hoc
sai (false), khi u vo l null. V d, 7 = NULL mang li null. Khi hnh vi ny l khng ph hp,
hy s dng cc cu trc IS [ NOT ] DISTINCT FROM:
expression IS DISTINCT FROM expression
expression IS NOT DISTINCT FROM expression
Chng s lun tr v true hoc false, khng bao gi tr v mt gi tr null, thm ch khi ton t l
null. Mt u vo null c i x nh l gi tr logic khng bit. Lu rng IS UNKNOWN v IS
NOT UNKNOWN c hiu lc nh nhau nh IS NULL v IS NOT NULL mt cch tng ng, ngoi tr l
biu thc u vo phi dng Boolean.
Trang 182/372
Xut bn nm 2013
M t
V d
Kt qu
cng
2+3
tr
2-3
-1
nhn
2*3
4/2
5%4
ly tha
2.0 ^ 3.0
|/
cn bc 2
|/ 25.0
||/
cn bc 3
||/ 27.0
giai tha
5!
120
!!
!! 5
120
gi tr tuyt i
@ -5.0
&
bitwise
AND 91 & 15
11
bitwise
OR 32 | 3
35
bitwise
XOR 17 # 5
20
bitwise
NOT ~1
-2
<<
1 << 4
16
>>
8 >> 2
Cc ton t bitwise ch lm vic trong cc dng d liu tch phn, trong khi cc ton t khc l sn
sng cho tt c cc dng d liu s. Cc ton t bitwise cng sn sng cho cc dng chui bit bit v
bit varying, nh c ch ra trong bng 9-10.
Bng 9-3 ch ra cc hm ton hc c sn. Trong bng, dp ch chnh xc gp i double precision.
Nhiu trong s cc hm c a ra nhiu dng vi cc dng i s khc nhau. Ngoi tr
nhng ni c lu , bt k dng no ca mt hm c a ra cng tr v dng d liu y ht nh
i s ca n. Cc hm lm vic vi cc d liu double precision hu ht c trin khai trn nh
ca th vin C h thng ch (host system); chnh xc v hnh vi trong cc trng hp bin v th
c th bin i, ph thuc vo h thng ch .
Bng 9-3. Cc hm ton hc
Hm
Dng tr v
M t
V d
Kt qu
abs(x)
(y ht nh u vo) gi tr tuyt i
abs(-17.4)
17.4
cbrt(dp)
dp
cbrt(27.0)
ceil(dp or numeric)
-42
ceiling(dp or numeric)
-95
cn bc 3
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 183/372
Dng tr v
Xut bn nm 2013
M t
V d
Kt qu
nh hn i s (tn hiu
cho ceil)
degrees(dp)
dp
t radians sang
degrees(0.5)
28.6478897565412
div(y numeric, x
numeric)
numeric
thng s s nguyn ca
y/x
div(9,4)
exp(dp or numeric)
(y ht nh u vo) s m
exp(1.0)
2.71828182845905
floor(dp or numeric)
floor(-42.8)
-43
ln(dp or numeric)
ln(2.0)
0.693147180559945
log(dp or numeric)
(y ht nh u vo) logarithm c s 10
log(100.0)
log(b numeric, x
numeric)
numeric
Logarithm c s b
Log(2.0, 64.0)
6.0000000000
mod(y, x)
(y ht dng i s)
phn cn li ca y/x
mod(9,4)
pi()
dp
hng s
pi()
3.14159265358979
dp
a ly tha b
power(9.0, 3.0)
729
power(a numeric, b
numeric)
numeric
a ly tha b
Power(9.0, 3.0)
729
radians(dp)
dp
t sang radians
radians(45.0)
0.785398163397448
random()
dp
random()
round(dp or numeric)
42
numeric
lm trn ti s du thp
phn
42.44
setseed(dp)
void
sign(dp or numeric)
sign(-8.4)
-1
sqrt(dp or numeric)
(y ht nh u vo) cn bc 2
sqrt(2.0)
1.4142135623731
trunc(dp or numeric)
(y ht nh u vo) ct ngn ti 0
trunc(42.8)
42
numeric
round(42.4382,
2)
width_bucket(op
int
numeric, b1 numeric, b2
numeric, count int)
width_bucket(op dp, b1
dp, b2 dp, count int)
int
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
42.43
Trang 184/372
Xut bn nm 2013
acos(x)
asin(x)
atan(x)
atan2(y, x)
cos(x)
M t
ngc vi
cosine
ngc vi
sine
ngc vi
tangent
ngc vi cosine
tangent ca
y/x
cot(x)
sin(x)
tan(x)
cotangent
sine
tangent
Dng tr v
M t
V d
Kt qu
string || string
text
Ghp chui
Post || greSQL
PostgreSQL
String || non-string or
non-string || string
text
Ghp chui vi mt u vo
khng phi l chui
Value: || 42
Value: 42
bit_length(string)
int
bit_length(jose32)
char_length(string) hoc
character_length(string)
int
S k t trong chui
char_length(jos4e)
lower(string)
text
lower(TOM)
octet_length(string)
int
octet_length(jo4se)
overlay(string placing
string from int [for int])
text
overlay(Txxxxas
t hom t 2 vi 4)
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
tom
Thomas
Trang 185/372
Dng tr v
int
Xut bn nm 2013
M t
V d
Kt qu
V tr chui con c ch nh
position(om trong
Thomas)
substring(Thomas
t 2 vi 3)
hom
substring(string from
pattern)
text
mas
substring(string from
pattern for escape)
text
oma
trim([leading | trailing |
both] [characters] from
string)
text
trim(both x t
xTomxx)
Tom
upper(string)
text
upper(tom)
TOM
Dng tr v
M t
V d
Kt qu
ascii(string)
int
120
btrim(string text [,
characters text])
text
trim
chr(int)
text
K t vi m c a ra. chr(65)
Vi UTF8 th i s c
theo di nh mt im m
Unicode, i vi cc m
ha nhiu byte khc th i
s phi ch nh mt k t
ASCII. K t NULL (0) l
khng c php v cc
dng d liu vn bn khng
th lu tr cc byte nh
vy.
convert(string bytea,
src_encoding name,
dest_encoding name)
bytea
text_in_utf8
represented in
Latin-1 encoding
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 186/372
Dng tr v
M t
Xut bn nm 2013
V d
Kt qu
(ISO 8859-1)
convert_from(string
bytea, src_encoding
name)
text
convert_to(string text,
dest_encoding name)
bytea
convert_to(some text,
UTF8)
some text
represented in the
UTF8 encoding
initcap(string)
text
Hi Thomas
length(string)
int
length(stringbytea,
encoding name )
int
xyxhi
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
x3132330001
Trang 187/372
Dng tr v
M t
Xut bn nm 2013
V d
Kt qu
ltrim(string text [,
characters text])
text
md5(string)
text
900150983cd24fb0
d6963f7d28e17f72
pg_client_encoding()
name
SQL()ASCII
quote_ident(string text)
text
"Foo bar"
quote_literal(string
text)
text
Tr v chui c a ra quote_literal(EO\RR
ph hp c a vo cc eeiilllyy)
du ngoc kp s dng
nh mt hng chui trong
mt chui lnh SQL. Cc
du ngoc kp n c
nhng v cc du cho
ngc c p bn ph
hp. Lu quote_literal tr
v null u vo null; nu
i s c th l null,
quote_nullable thng ph
hp hn. Xem thm V d
39-1.
quote_literal(value
anyelement)
text
p gi tr c a ra thnh quote_literal(42.452).5
vn bn v sau a n
vo du ngoc kp nh mt
hng. Cc du ngoc kp
n v cc du cho ngc
c p bn ph hp.
quote_nullable(string
text)
text
Tr v chui c a ra quote_nullable(NULL)
c a vo cc du
ngoc kp ph hp s
dng nh mt hng chui
trong mt chui lnh SQL
hoc, nu i s l null, th
tr v NULL. Cc du
ngoc n c nhng v
cc du cho ngc c
p bn ph hp. Xem
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 188/372
Dng tr v
M t
Xut bn nm 2013
V d
Kt qu
thm V d 39-1.
quote_nullable(value
anyelement)
text
regexp_matches(string
text, pattern text [, flags
text]) setof text[]
regexp_replace(string
text, pattern text,
replacement text
[, flags text])
p gi tr c a ra thnh quote_nullable(424.25.
vn bn v sau a n )5
vo cc du ngoc kp nh
mt hng; hoc, nu i s
l null, th tr v NULL.
Cc du ngoc kp c
nhng v cc du cho
ngc c p bn ph
hp.
Tr v tt c cc chui con regexp_matches(foobar
bt c c c t vic bequebaz, (bar)
trng vi mt biu thc (beque)) {bar,beque}
POSIX thng thng i
vi chui . Xem phn
9.7.3 c thm thng tin.
text
regexp_split_to_array(stri
ng text, pattern text [,
flags text ]) text[]
regexp_split_to_table(stri
ng text, pattern text [,
flags text]) setof text
Helloworld (2 rows)
Lp li chui vi s ln repeat(Pg, 4)
c ch nh.
PgPgPgPg
Thay th tt c cc trng
hp trong chui ca chui
con t bng chui con ti
text
replace(abcdefabcdef, abXXefabXXef
cd, XX)
hixyx
rtrim(string text [,
characters text])
text
trim
split_part(string
text, delimiter
text, field int)
text
strpos(string, substring)
int
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 189/372
Dng tr v
M t
Xut bn nm 2013
V d
Kt qu
text
to_hex(number int or
bigint)
text
ffffff
translate(string
text, from text,
to text)
text
a23x5
M ngun
M ch
ascii_to_mic
SQL_ASCII
MULE_INTERNAL
ascii_to_utf8
SQL_ASCII
UTF8
big5_to_euc_tw
BIG5
EUC_TW
big5_to_mic
BIG5
MULE_INTERNAL
big5_to_utf8
BIG5
UTF8
euc_cn_to_mic
EUC_CN
MULE_INTERNAL
euc_cn_to_utf8
EUC_CN
UTF8
euc_jp_to_mic
EUC_JP
MULE_INTERNAL
euc_jp_to_sjis
EUC_JP
SJIS
euc_jp_to_utf8
EUC_JP
UTF8
euc_kr_to_mic
EUC_KR
MULE_INTERNAL
euc_kr_to_utf8
EUC_KR
UTF8
euc_tw_to_big5
EUC_TW
BIG5
euc_tw_to_mic
EUC_TW
MULE_INTERNAL
euc_tw_to_utf8
EUC_TW
UTF8
gb18030_to_utf8
GB18030
UTF8
gbk_to_utf8
GBK
UTF8
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 190/372
Xut bn nm 2013
M ngun
M ch
iso_8859_10_to_utf8
LATIN6
UTF8
iso_8859_13_to_utf8
LATIN7
UTF8
iso_8859_14_to_utf8
LATIN8
UTF8
iso_8859_15_to_utf8
LATIN9
UTF8
iso_8859_16_to_utf8
LATIN10
UTF8
iso_8859_1_to_mic
LATIN1
MULE_INTERNAL
iso_8859_1_to_utf8
LATIN1
UTF8
iso_8859_2_to_mic
LATIN2
MULE_INTERNAL
iso_8859_2_to_utf8
LATIN2
UTF8
iso_8859_2_to_windows_1250
LATIN2
WIN1250
iso_8859_3_to_mic
LATIN3
MULE_INTERNAL
iso_8859_3_to_utf8
LATIN3
UTF8
iso_8859_4_to_mic
LATIN4
MULE_INTERNAL
iso_8859_4_to_utf8
LATIN4
UTF8
iso_8859_5_to_koi8_r
ISO_8859_5
KOI8R
iso_8859_5_to_mic
ISO_8859_5
MULE_INTERNAL
iso_8859_5_to_utf8
ISO_8859_5
UTF8
iso_8859_5_to_windows_1251
ISO_8859_5
WIN1251
iso_8859_5_to_windows_866
ISO_8859_5
WIN866
iso_8859_6_to_utf8
ISO_8859_6
UTF8
iso_8859_7_to_utf8
ISO_8859_7
UTF8
iso_8859_8_to_utf8
ISO_8859_8
UTF8
iso_8859_9_to_utf8
LATIN5
UTF8
johab_to_utf8
JOHAB
UTF8
koi8_r_to_iso_8859_5
KOI8R
ISO_8859_5
koi8_r_to_mic
KOI8R
MULE_INTERNAL
koi8_r_to_utf8
KOI8R
UTF8
koi8_r_to_windows_1251
KOI8R
WIN1251
koi8_r_to_windows_866
KOI8R
WIN866
koi8_u_to_utf8
KOI8U
UTF8
mic_to_ascii
MULE_INTERNAL
SQL_ASCII
mic_to_big5
MULE_INTERNAL
BIG5
mic_to_euc_cn
MULE_INTERNAL
EUC_CN
mic_to_euc_jp
MULE_INTERNAL
EUC_JP
mic_to_euc_kr
MULE_INTERNAL
EUC_KR
mic_to_euc_tw
MULE_INTERNAL
EUC_TW
mic_to_iso_8859_1
MULE_INTERNAL
LATIN1
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 191/372
Xut bn nm 2013
M ngun
M ch
mic_to_iso_8859_2
MULE_INTERNAL
LATIN2
mic_to_iso_8859_3
MULE_INTERNAL
LATIN3
mic_to_iso_8859_4
MULE_INTERNAL
LATIN4
mic_to_iso_8859_5
MULE_INTERNAL
ISO_8859_5
mic_to_koi8_r
MULE_INTERNAL
KOI8R
mic_to_sjis
MULE_INTERNAL
SJIS
mic_to_windows_1250
MULE_INTERNAL
WIN1250
mic_to_windows_1251
MULE_INTERNAL
WIN1251
mic_to_windows_866
MULE_INTERNAL
WIN866
sjis_to_euc_jp
SJIS
EUC_JP
sjis_to_mic
SJIS
MULE_INTERNAL
sjis_to_utf8
SJIS
UTF8
tcvn_to_utf8
WIN1258
UTF8
uhc_to_utf8
UHC
UTF8
utf8_to_ascii
UTF8
SQL_ASCII
utf8_to_big5
UTF8
BIG5
utf8_to_euc_cn
UTF8
EUC_CN
utf8_to_euc_jp
UTF8
EUC_JP
utf8_to_euc_kr
UTF8
EUC_KR
utf8_to_euc_tw
UTF8
EUC_TW
utf8_to_gb18030
UTF8
GB18030
utf8_to_gbk
UTF8
GBK
utf8_to_iso_8859_1
UTF8
LATIN1
utf8_to_iso_8859_10
UTF8
LATIN6
utf8_to_iso_8859_13
UTF8
LATIN7
utf8_to_iso_8859_14
UTF8
LATIN8
utf8_to_iso_8859_15
UTF8
LATIN9
utf8_to_iso_8859_16
UTF8
LATIN10
utf8_to_iso_8859_2
UTF8
LATIN2
utf8_to_iso_8859_3
UTF8
LATIN3
utf8_to_iso_8859_4
UTF8
LATIN4
utf8_to_iso_8859_5
UTF8
ISO_8859_5
utf8_to_iso_8859_6
UTF8
ISO_8859_6
utf8_to_iso_8859_7
UTF8
ISO_8859_7
utf8_to_iso_8859_8
UTF8
ISO_8859_8
utf8_to_iso_8859_9
UTF8
LATIN5
utf8_to_johab
UTF8
JOHAB
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 192/372
Xut bn nm 2013
M ngun
M ch
utf8_to_koi8_r
UTF8
KOI8R
utf8_to_koi8_u
UTF8
KOI8U
utf8_to_sjis
UTF8
SJIS
utf8_to_tcvn
UTF8
WIN1258
utf8_to_uhc
UTF8
UHC
utf8_to_windows_1250
UTF8
WIN1250
utf8_to_windows_1251
UTF8
WIN1251
utf8_to_windows_1252
UTF8
WIN1252
utf8_to_windows_1253
UTF8
WIN1253
utf8_to_windows_1254
UTF8
WIN1254
utf8_to_windows_1255
UTF8
WIN1255
utf8_to_windows_1256
UTF8
WIN1256
utf8_to_windows_1257
UTF8
WIN1257
utf8_to_windows_866
UTF8
WIN866
utf8_to_windows_874
UTF8
WIN874
windows_1250_to_iso_8859_2
WIN1250
LATIN2
windows_1250_to_mic
WIN1250
MULE_INTERNAL
windows_1250_to_utf8
WIN1250
UTF8
windows_1251_to_iso_8859_5
WIN1251
ISO_8859_5
windows_1251_to_koi8_r
WIN1251
KOI8R
windows_1251_to_mic
WIN1251
MULE_INTERNAL
windows_1251_to_utf8
WIN1251
UTF8
windows_1251_to_windows_8
W6I6N1251
WIN866
windows_1252_to_utf8
WIN1252
UTF8
windows_1256_to_utf8
WIN1256
UTF8
windows_866_to_iso_8859_5
WIN866
ISO_8859_5
windows_866_to_koi8_r
WIN866
KOI8R
windows_866_to_mic
WIN866
MULE_INTERNAL
windows_866_to_utf8
WIN866
UTF8
windows_866_to_windows_12
W5I1N866
WIN
windows_874_to_utf8
WIN874
UTF8
euc_jis_2004_to_utf8
EUC_JIS_2004
UTF8
ut8_to_euc_jis_2004
UTF8
EUC_JIS_2004
shift_jis_2004_to_utf8
SHIFT_JIS_2004
UTF8
ut8_to_shift_jis_2004
UTF8
SHIFT_JIS_2004
euc_jis_2004_to_shift_jis
EU2C00J4IS_2004
SHIFT_JIS_2004
shift_jis_2004_to_euc_jis
SH2I0F0T4_JIS_2004
EUC_JIS_2004
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 193/372
Xut bn nm 2013
M ngun
M ch
Lu :
a. Cc tn chuyn i theo mt s gi tn tiu chun: tn chnh thc ca m ngun vi tt c cc k t khng phi
l abc c cc du gch chn thay th, c theo sau bng _to_, c theo sau bng tn m ch c x l tng t.
V th, cc tn c th khc nhau vi cc tn m ha theo thi thng.
bytea_output
Dng tr v
bytea
M t
Ghp chui
V d
E\\\\Post::bytea
||
E\\047gres\\000::bytea
Kt qu
\\Postgres\000
octet_length(string) int
overlay(string
bytea
placing string from
int [for int])
position(substring
in string)
substring(string
bytea
[from int] [for int])
h\000o
trim([both] bytes
from string)
int
bytea
overlay(ETh\\000omas::bytea
T\\002\\003mas
placing E\\002\\003::bytea from 2
for 3)
substring(ETh\\000omas::bytea
from 2 for 3)
Tom
Dng tr v
M t
V d
Kt qu
\\000
123\000456
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 194/372
Dng tr v
Xut bn nm 2013
M t
V d
Kt qu
chn v nh dng l y ht nh
trong m ha.
encode(data
text
bytea, format text)
get_bit(string,
offset)
int
get_bit(ETh\\000omas:: 1
bytea, 45)
get_byte(string,
offset)
int
get_byte(ETh\\000omas 109
::bytea, 4)
length(string)
int
di chui nh phn
length(Ejo\\000se::bytea 5
)
md5(string)
text
md5(ETh\\000oma8sab: 9aaf18
2:db3yct9e6a8)
b4958c334c82d8b1
set_bit(string,
offset, newvalue)
bytea
set_bit(ETh\\000omas::
bytea, 45, 0)
set_byte(string,
offset, newvalue)
bytea
set_byte(ETh\\000omas: Th\000o@as
:bytea, 4, 64)
Th\000omAs
M t
V d
Kt qu
||
ghp (concatenation )
B10001 ||
B011
10001011
&
B10001 &
B01101
00001
B10001 |
B01101
11101
bitwise XOR
B10001 #
B01101
11100
bitwise NOT
~ B10001
01110
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 195/372
M t
Xut bn nm 2013
V d
Kt qu
<<
B10001 << 3
01000
>>
00100
Cc hm tiu chun SQL sau y lm vic trong c cc chui bit cng nh cc chui k t:
bit_length, octet_length, position, substring, overlay.
length,
Cc hm sau lm vic trong cc chui bit cng nh cc chui nh phn: get_bit, set_bit. Khi lm vic
vi mt chui bit, cc hm nh s cho bit u tin (bn tri nht) ca chui nh l bit 0. Hn
na, c kh nng a ra cc gi tr tch phn ti v t dng bit. Mt s v d:
44::bit(10)
44::bit(3)
cast(-44 as bit(12))
1110::bit(4)::integer
0000101100
100
111111010100
14
bit(1),
Lu : Trc PostgreSQL 8.0, vic a ra mt s interger cho bit(n) c th sao chp n bit tri
nht ca s interger , trong khi by gi n sao chp n bit phi nht. Hn na, vic a ra
mt s integer ti mt chui bit rng ln hn so vi bn thn s integer s m rng
du hiu v bn tri.
9.7. Khp mu
C 3 tip cn ring r khp mu c PostgreSQL cung cp: ton t LIKE ca SQL truyn thng,
ton t gn y hn SIMILAR TO (c b sung vo SQL:1999), v cc biu thc dng POSIX thng
thng. Ngoi cc ton t c bn lm cho chui ny khp vi mu ny?, cc hm l sn sng
m rng hoc thay th cc chui trng khp v chia mt chui cc v tr khp.
Mo: Nu bn c cc nhu cu khp mu m vt ra khi iu ny, hy cn nhc vic vit
mt hm do ngi s dng nh ngha trong Perl hoc TCL.
9.7.1. LIKE
string LIKE pattern [ESCAPE escape-character]
string NOT LIKE pattern [ESCAPE escape-character]
Biu thc LIKE tr v ng - true nu chui khp vi mu pattern c cung cp. (Nh c k
vng, biu thc NOT LIKE tr v sai - false nu LIKE tr v ng, v ngc li. Mt biu thc tng
ng l NOT (string LIKE pattern)).
Nu mu pattern khng cha cc du % hoc cc du gch chn, th mu ch i din cho bn
thn chui ; trong trng hp th LIKE hnh ng nh l ton t bng. Mt du gch chn (_)
trong pattern s i din cho (cc trng khp) bt k k t no; mt du % khp vi bt k tun t
no ca s 0 hoc nhiu hn cc k t. Mt s v d:
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 196/372
LIKE
LIKE
LIKE
LIKE
abc
a%
_b_
c
Xut bn nm 2013
true
true
true
false
Khp mu LIKE lun bao trm ton b chui. V th, khp mt tun t bt k u trong mt
chui, th mu phi bt u v kt thc vi mt du %.
khp mt du gch chn hoc % ca hng m khng c vic khp vi cc k t khc, k t
tng ng trong mu pattern phi c k t thot i trc. K t thot mc nh l du cho ngc
nhng mt cch thot khc cng c th c chn bng vic s dng mnh thot ESCAPE.
khp bn thn k t thot, hy vit 2 k t thot.
Lu rng du cho ngc c ri mt ngha c bit trong cc hng chui, nn vit mt hng
mu c cha mt du cho ngc th bn phi vit 2 du cho ngc trong mt lnh SQL (gi thit
c php chui thot c s dng, xem Phn 4.1.2.1). V th, vic vit mt mu thc s khp vi
mt du cho ngc ngha l vit 4 du cho ngc trong lnh. Bn c th trnh iu ny bng vic
chn mt k t thot khc vi ESCAPE; ri mt du cho ngc s khng l c bit vi LIKE na.
(Nhng du cho ngc vn l c bit vi trnh phn tch hng chui, nn bn vn cn 2 du
khp vi mt du cho ngc).
Cng c kh nng khng chn k t thot no bng vic vit ESCAPE . iu ny s v hiu ha c
hiu qu c ch thot, n lm cho c kh nng tt ngha c bit ca cc du % v gch chn
trong mu .
T kha ILIKE c th c s dng thay cho LIKE to s khp phn bit ch hoa ch thng theo
ngn ng bn a ang hin din. y khng phi l tiu chun SQL nhng l mt m rng ca
PostgreSQL.
Ton t ~ ~ l tng ng vi LIKE, cn ~ ~ * l tng ng vi ILIKE. Cng c cc ton t !~ ~
v !~ ~* i din cho NOT LIKE v NOT ILIKE, mt cch tng ng. Tt c cc ton t l c th
cho PostgreSQL.
Ton t SIMILAR TO tr v ng - true hoc sai - false ph thuc vo vic liu mu c khp vi
chui c a ra hay khng. Tng t nh LIKE, ngoi tr l n din gii mu bng vic s
dng nh ngha tiu chun SQL ca mt biu thc thng dng. Cc biu thc thng dng SQL l
mt s t m gia k hiu LIKE v k hiu biu thc thng thng.
Ging nh LIKE, ton t SIMILAR TO ch thnh cng nu mu ca n khp vi ton b chui; y c
l khng l hnh vi ca biu thc thng thng chung nhng ni m mu c th khp vi bt
k phn no ca chui. Hn na, ging nh LIKE , SIMILAR TO s dng cc du _v % nh l cc k
t * biu th bt k k t duy nht no v bt k chui no, mt cch tng ng (c s so snh du
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 197/372
Xut bn nm 2013
chm (.) vi du chm i vi k t sao (.*) trong cc biu thc POSIX thng thng).
B sung thm vo cc c s c mn t LIKE , SIMILAR TO h tr cho cc k t khp mu c
mn t cc biu thc POSIX thng thng:
biu th s xoay chiu (hoc 2 la chn thay th cho nhau).
SIMILAR
SIMILAR
SIMILAR
SIMILAR
TO
TO
TO
TO
abc
a
%(b|d)%
(b|c)%
true
false
true
false
oob
NULL
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 198/372
Xut bn nm 2013
M t
V d
thomas ~ .*thomas.*
~*
Khp biu thc thng thng, khng phn bit ch hoa ch thng
thomas ~* .*Thomas.*
!~
Khng khp biu thc thng thng, phn bit ch hoa ch thng
thomas !~ .*Thomas.*
!~*
Khng khp biu thc thng thng, khng phn bit ch hoa ch thng
Cc biu thc POSIX thng thng a ra mt phng tin mnh hn cho vic khp mu so vi
cc ton t LIKE v SIMILAR TO. Nhiu cng c Unix nh egrep, sed hoc awk s dng mt ngn ng
khp mu l tng t vi th c m t y.
Mt biu thc thng thng l mt s tun t cc k t m l mt nh ngha ngn gn ca mt tp
hp cc chui (mt tp hp thng thng). Mt chui c ni l khp vi mt biu thc thng
thng nu n l mt thnh vin ca tp thng thng c biu thc thng thng m t. Nh
vi LIKE, cc k t mu khp cc k t chui mt cch chnh xc tr phi chng l nhng k t c
bit trong ngn ng ca biu thc thng thng - nhng cc biu thc thng thng s dng cc k
t c bit khc vi LIKE lm. Khng ging nh mu LIKE, mt biu thc thng thng c php
khp bt k u trong mt chui, tr phi biu thc thng thng r rng neo u u hoc
cui ca chui. Mt vi v d
abc
abc
abc
abc
~
~
~
~
abc
^a
(b|d)
^(b|c)
true
true
true
false
oob
o
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 199/372
Xut bn nm 2013
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 200/372
Xut bn nm 2013
Hm regexp_split_to_table chia mt chui bng vic s dng mt mu biu thc POSIX thng
thng nh mt k t phn cch. N c c php regexp_split_to_table (string , pattern [, flags ]).
Nu khng c s trng khp no i vi mu pattern, th hm tr v chui string. Nu c t nht
mt s trng khp, i vi mi s trng khp n tr v vn bn t cui ca s trng khp cui cng
(hoc u ca chui ) ti u ca s trng khp. Khi khng c cc trng khp khc na, th n
tr v vn bn t cui ca s trng khp cui cng ti cui ca chui . Tham s flags l mt
chui vn bn ty chn c cha cc c 0 hoc nhiu hn 1 k t duy nht m thay i hnh vi ca
hm . regexp_split_to_table h tr cc c c m t trong Bng 9-19.
Hm regexp_split_to_array hnh x y ht nh regexp_split_to_table, ngoi tr l regexp_split_to_array
tr v kt qu ca n nh mt mng vn bn text. N c c php regexp_split_to_array (string ,
pattern [, flags ]). Cc tham s l y ht nh i vi regexp_split_to_table. Mt s v d:
SELECT foo FROM regexp_split_to_table(the quick brown fox jumped over the lazy dog, E\\
foo
-------the
quick
brown
fox
jumped
over
the
lazy
dog
(9 rows)
SELECT regexp_split_to_array(the quick brown fox jumped over the lazy dog, E\\s+);
regexp_split_to_array
-----------------------------------------------{the,quick,brown,fox,jumped,over,the,lazy,dog}
(1 row)
SELECT foo FROM regexp_split_to_table(the quick brown fox, E\\s*) AS foo;
foo
----t
h
e
q
u
i
c
k
b
r
o
w
n
f
o
x
(16 rows)
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 201/372
Xut bn nm 2013
hoc cui ca chui hoc ngay sau mt s trng khp trc . iu ny l ngc li vi nh
ngha kht khe ca vic trng khp regexp m c regexp_matches trin khai, nhng thng l
hnh vi tin li nht trong thc tin. Cc h thng phn mm khc nh Perl s dng cc nh ngha
tng t.
9.7.3.1. Chi tit ca biu thc thng thng
Cc biu thc thng thng ca PostgreSQL c trin khai bng vic s dng mt gi phn mm
c Henry Spencer vit. Nhiu m t cc biu thc thng thng bn di c sao chp nguyn
bn t sch ch dn ca ng.
Cc biu thc thng thng - RE (Regular Expressions), nh c nh ngha trong POSIX 1003.2,
c 2 dng: cc RE c m rng hoc cc ERE (th thin nh cc biu thc egrep), v cc RE
hoc BRE c bn (th thin nh cc dng ed). PostgreSQL h tr c 2 dng, v cng trin khai mt
s m rng m khng c trong tiu chun POSIX, nhng c s dng rng ri v tnh sn sng
ca chng trong cc ngn ng lp trnh nh Perl v TCL. Cc RE s dng cc m rng phi POSIX
c gi l cc RE hoc ARE tin tin trong ti liu ny. Cc ARE hu nh chnh xc l mt
siu tp hp cc ERE, nhng cc BRE c vi s khng tng thch ng lu (cng nh b hn ch
hn nhiu). Chng ti ln u m t cc dng ARE v ERE, lu cc tnh cht p dng ch cho cc
ARE, v sau m t cch m cc BRE khc bit.
Lu : PostgreSQL lun ngay t u gi nh rng mt biu thc thng thng tun theo
cc qui tc ca ARE. Tuy nhin, cc qui tc ca ERE hoc BRE b hn ch hn c th c
la chn bng vic thm vo trc mt la chn c nhng vo mu RE, nh c m t
trong Phn 9.7.3.4. iu ny c th l hu dng cho tnh tng thch vi cc ng dng m
k vng chnh xc cc qui tc ca POSIX 1003.2.
Mt biu thc thng thng c xc nh nh mt hoc nhiu nhnh hn, c phn tch nhau
bng du |. N khp vi bt k iu g m khp c vi mt trong cc nhnh .
Mt nhnh l 0 hoc cc nguyn t hoc rng buc nh lng c hn, c ghp vo nhau. N
trng khp vi mt s trng khp cho ci u, tip sau l s trng khp cho ci th 2...; mt nhnh
rng trng khp vi chui rng.
Mt nguyn t iu kin l mt nguyn t c kh nng sau c mt trnh nh lng duy nht.
Khng c mt trnh nh lng, n khp vi mt s trng khp cho nguyn t . Vi mt trnh
nh lng, n c th khp vi vi s trng khp ca nguyn t . Mt nguyn t c th l bt k
trong cc kh nng c ch ra trong Bng 9-12. Cc trnh nh lng c kh nng v cc ngha
ca chng c ch ra trong Bng 9-13.
Mt rng buc khp vi mt chui rng, nhng ch trng khp khi cc iu kin c bit c p
ng. Mt rng buc c th c s dng ni m mt nguyn t c th c s dng, ngoi tr n
khng th c i theo vi mt trnh nh lng. Cc rng buc n gin c ch ra trong Bng 914; mt s rng buc hn c m t sau.
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 202/372
Xut bn nm 2013
M t
(re)
( nhng ni m re l bt k biu thc no) khp vi mt trng khp cho re, vi s trng khp c lu
v vic bo co c kh nng
(?:re)
khp vi bt k k t n no
[chars]
biu thc trong du ngoc vung, khp vi bt k mt trong s cc k t (xem Phn 9.7.3.2 c thm
chi tit)
\k
\c
nhng ni m c l k t abc (c kh nng c cc k t khc theo sau) l mt s thot, xem Phn 9.7.3.3
(ch cc ARE; trong cc ERE v BRE, iu ny trng khp vi c)
khi i theo sau l mt k t khc vi mt k t s, trng khp k t p tri {; khi theo sau l mt k t
s, y l u ca mt rng buc (xem bn di)
Cc trng khp
{m}
{m,}
{m,n}
*?
+?
??
{m}?
{m,}?
{m,n}?
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 203/372
Xut bn nm 2013
Cc trnh nh lng khng tham (ch sn sng cc ARE) khp vi cng cc kh nng nh cc i
tc (tham) thng thng tng ng ca chng, nhng u tin hn s nh nht thay v s ln nht
cc trng khp. Xem Phn 9.7.3.5 c thm chi tit.
Lu : Mt trnh nh lng khng th ngay lp tc theo sau mt trnh nh lng khc,
nh, ** l khng hp l. Mt trnh nh lng khng th bt u mt biu thc hoc biu
thc con hoc i theo du m ^ hoc du |.
Bng 9-14. Cc rng buc biu thc thng thng
Rng buc
M t
khp u ca chui
(?=re)
ci nhn tch cc v pha trc trng khp vi thi im bt k ni m mt chui con khp vi RE
bt u (ch cc ARE)
(?!re)
ci nhn tiu cc v pha trc khp vi bt k im no ni m khng chui con no trng khp vi
RE bt u (ch cc ARE)
Cc rng buc hng v pha trc khng th c cc tham chiu ngc (xem Phn 9.7.3.3), v tt
c cc du ngoc n bn trong chng c xem nh l khng bt c.
9.7.3.2. Cc biu thc du ngoc vung
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 204/372
Xut bn nm 2013
mt phn t duy nht ca danh sch cc biu thc du ngoc vung. iu ny cho php mt biu
thc du ngoc vung cha mt phn t i snh c nhiu k t khp nhiu hn so vi mt k t,
ngha l, nu tun t i snh bao gm mt phn t i snh ch, th RE [[.ch.]]*c s khp vi 5 k
t u tin ca chchcc.
Lu : PostgreSQL hin hnh khng h tr cc phn t i snh nhiu k t. Thng tin ny
m t hnh vi c kh nng trong tng lai.
Trong mt biu thc du ngoc vung, mt phn t i snh c a vo trong [= and =] l lp
tng ng, thay cho cc tun t cc k t ca tt c cc phn t i snh tng ng cho tun t
, bao gm chnh n. (Nu khng c cc phn t i snh tng ng khc, th i x dng nh l
vic a vo cc du ngt l [.and.]). V d, nu o v ^ l cc thnh vin ca mt lp tng ng, th
[[=o=]], [[=^=]], v [o^] l tt c cc ng ngha. Mt lp tng ng khng th l mt im kt
thc ca mt dy.
Trong mt biu thc du ngoc vung, tn ca mt lp k t c a vo trong [: and :] cc ch
cho danh sch tt c cc k t thuc v lp . Cc tn lp k t tiu chun l: alnum, alpha, blank,
cntrl, digit, graph, lower, print, punct, space, upper, xdigit. Cc ch cho cc lp k t c xc
nh theo ctype. Mt min a phng c th a ra cc th khc. Mt lp k t khng th c s
dng nh mt im cui ca mt dy .
C 2 trng hp c bit cc biu thc du ngoc vung: cc biu thc du ngoc vung [[:<:]] v
[[:>:]] l cc rng buc, khp vi cc chui rng u v cui ca mt t mt cch tng ng. Mt
t c xc nh nh mt s tun t cc k t ca t m khng c ng trc cng khng ng
ng sau cc k t ca t. Mt k t ca t l mt k t alnum (nh c ctype xc nh) hoc mt
du gch chn. y l mt m rng, tng thch vi nhng khng do POSIX 1003.2 ch nh, v
nn c s dng vi s thn trng trong phn mm c nh s l kh chuyn i vi cc h
thng khc. Cc s thot rng buc c m t bn di thng c u tin; chng khng cn l
tiu chun na, m d dng hn g.
9.7.3.3. Cc thot biu thc thng thng
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 205/372
Xut bn nm 2013
M t
\a
\b
\B
ng ngha cho du cho ngc (\) gip lm gim nhu cu v p bn du cho ngc
\cX
\e
\f
mu nui, nh trong C
\n
\r
\t
\uwxyz
(trong wxyz chnh xc l 4 k t s h 16) k t UTF16 (Unicode, 16 bit) U+wxyz trong trt t byte
cc b
\Ustuvwxyz (trong stuvwxyz chnh xc l 8 k t s h 16) c gi li cho mt m rng Unicode gi cho 32 bit
\v
\xhhh
\0
k t m gi tr ca n l 0 (byte null)
\xy
\xyz
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 206/372
Xut bn nm 2013
M t
\d
[[:digit:]]
\s
[[:space:]]
\w
\D
[^[:digit:]]
\S
[^[:space:]]
\W
Trong cc biu thc du ngoc vung, \d, \s, v \w nh mt cc du ngoc vung bn ngoi hn,
v \D, \S v \W l khng hp l. (V th, v d, [a-c\d] l tng ng vi [a-c[:digit:]]. Hn na, [ac\D], n l tng ng vi [a-c^[:digit:]], l khng hp l).
Bng 9-17. Cc thot rng buc biu thc thng thng
Thot
M t
\A
\m
ch khp u ca mt t
\M
ch khp cui ca mt t
\y
\Y
\Z
Mt t c nh ngha nh trong c t ca [[:<:]] and [[:>:]] trn. Cc thot rng buc l khng
hp l trong cc biu thc du ngoc vung.
Bng 9-18. Cc tham chiu ngc ca biu thc thng thng
Thot
M t
\m
\mnn
Trang 207/372
Xut bn nm 2013
M t
phn cn li ca RE l mt BRE
phn cn li ca RE l mt ERE
khp phn bit ch hoa ch thng (xem Phn 9.7.3.5) ( dng ton t)
ng ngha v lch s i vi n
khp dng mi phn bit ch hoa ch thng mt phn (xem Phn 9.7.3.5)
khp phn bit ch hoa ch thng dng mi ngc mt phn (k l) (xem Phn 9.7.3.5)
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 208/372
Xut bn nm 2013
Cc qui tc trn c lin quan ti cc thuc tnh tham khng ch vi cc nguyn t nh lng c
nhn, m cn vi cc chi nhnh v ton b cc RE cha cc nguyn t c nh lng . Nhng
g iu c ngha l vic khp c thc hin theo mt cch thc m nhnh , hoc ton b RE,
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 209/372
Xut bn nm 2013
khp vi chui con c kh nng di nht hoc ngn nht nh mt tng th. Mt khi chiu di ca
ton b s khp c xc nh, th phn ca n m khp vi bt k biu thc con c th no c
xc nh trn c s ca thuc tnh tham ca biu thc ph , vi cc biu thc ph bt u sm
hn trong RE ly u tin hn cc biu thc ph bt u mun hn.
Mt v d ca nhng g iu ny c ngha:
SELECT SUBSTRING(XY1234Z, Y*([0-9]{1,3}));
Result: 123
SELECT SUBSTRING(XY1234Z, Y*?([0-9]{1,3}));
Result: 1
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 210/372
Xut bn nm 2013
cui ca chui mt cch tng ng. Nhng thot ARE \A v \Z tip tc ch khp u hoc cui ca
chui.
Nu vic khp mt phn dng mi phn bit ch hoa ch thng c ch nh, v cc biu thc
du ngoc vung nh vi vic khp phn bit ch hoa ch thng dng mi, nhng khng phi ^
v $.
Nu vic khp phn bit ch hoa ch thng dng mi mt phn ngc li c ch nh, th iu
ny tc ng ti ^ v $ nh vi vic khp phn bit ch hoa ch thng dng mi, nhng khng l
du chm (.) v cc biu thc du ngoc vung. iu ny rt khng hu dng nhng c a ra v
s i xng.
9.7.3.6. Gii hn v tnh tng thch
Trong cc ARE, du cho ngc \ i theo sau l mt k t abc hoc l mt k t thot hoc
l mt li, trong khi trong cc phin bn trc , n tng ch l mt cch vit khc cho abc.
iu ny s khng l mt vn g ln v khng c l do vit mt s tun t nh vy
trong cc phin bn trc .
Trang 211/372
Xut bn nm 2013
and \},
Dng tr v
M t
V d
to_char(timestamp, text)
text
to_char(current_timestamp,
HH12:MI:SS)
to_char(interval, text)
text
to_char(int, text)
text
to_char(125, 999)
to_char(125.8::real,
999D9)
to_char(numeric, text)
text
to_char(-125.8, 999D99S)
to_date(text, text)
date
to_number(text, text)
numeric
to_number(12,454.8-,
99G999D9S)
to_timestamp(text, text)
to_timestamp(double
precision)
to_timestamp(1284352323)
Trang 212/372
Xut bn nm 2013
M t
HH
gi ca ngy (01-12)
HH12
gi ca ngy (01-12)
HH24
gi ca ngy (00-23)
MI
pht (00-59)
SS
giy (00-59)
MS
US
SSSS
Y,YYY
YYYY
Nm (4 v nhiu hn cc k t s)
YYY
3 k t cui ca nm
YY
2 k t s cui ca nm
k t s cui ca nm
IYYY
IYY
IY
BC , bc , AD hoc ad
ch s k nguyn (c cc du chm)
MONTH
Month
month
MON
Mon
mon
MM
s thng (01-12)
DAY
Day
day
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 213/372
Xut bn nm 2013
M t
DY
Dy
dy
DDD
ngy ca nm (001-366)
IDDD ISO
DD
ID ISO
WW
IW ISO
CC
th k (2 k t s) (th k 21 bt u vo 01/01/2001)
RM
rm
TZ
tz
M t
V d
Tin t FM
FMMonth
Hu t TH
Hu t th
Tin t FX
FX Month DD Day
Tin t TM
TMMonth
Hu t SP
DDSP
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 214/372
Xut bn nm 2013
Nhiu khong trng to_timestamp v to_date skip trong chui u vo tr phi la chn FX
c s dng. V d, to_timestamp(2000 JUN, YYYY MON) lm vic, nhng
to_timestamp(2000 JUN, FXYYYY MON) tr v mt li v to_timestamp k vng mt khong
trng duy nht. FX phi c ch nh nh l khon u tin trong mu template.
Trong bin i t chui sang timestamp hoc date, trng CC (th k) b b qua nu c mt
trng YYY, YYYY hoc Y,YYY. Nu CC c s dng vi YY hoc Y th nm c tnh nh l
(CC-1)*100+YY.
Trong mt bin i t chui sang timestamp, cc gi tr mili giy (MS) hoc mili giy (US)
s c s dng nh l cc k t s cho cc giy sau du chm thp phn. V d
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 215/372
Xut bn nm 2013
Vic nh s ngy ca tun ca to_char(..., ID) khp vi hm extract(isodow from ...), nhng
to_char(..., D) khng khp vi vic nh s ngy ca extract(dow from ...).
to_char(interval)
M t
gi tr vi s cc k t s c ch nh
gi tr vi cc s 0 dn u
. (du chm)
du thp phn
, (du phy)
PR
MI
du tr v tr c ch nh (nu s nh hn 0)
PL
du cng v tr c ch nh (nu s ln hn 0)
SG
du cng/tr v tr c ch nh
RN
s La m (u vo gia 1 v 3999)
TH hoc th
hu t ca s thng thng
EEEE
Mt k hiu c nh dng bng vic s dng Si Gn, PL, hoc MI khng c neo cho
s; v d, to_char(-12,MI9999) to ra - 12 nhng to_char(-12, S9999) to ra -12. Trin khai
ca Oracle khng cho php s dng MI trc 9, nhng thay vo yu cu l 9 i trc MI.
9 dn ti mt gi tr vi s cc k t s y ht nh c 9 s. Nu mt k t s khng sn sng
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 216/372
Xut bn nm 2013
th n a ra mt du trng.
M t
V d
Tin t FM
FM9999
Hu t TH
999TH
Hu t th
999th
to_char
Biu thc
Kt qu
Tuesday , 06 05:39:18
Tuesday, 6 05:39:18
to_char(-0.1, 99.99)
-.10
to_char(-0.1, FM9.99)
-.1
to_char(0.1, 0.9)
0.1
to_char(12, 9990999.9)
0012.0
to_char(12, FM9990999.9)
0012.
to_char(485, 999)
485
to_char(-485, 999)
-485
to_char(485, 9 9 9)
4 8 5
to_char(1485, 9,999)
1,485
to_char(1485, 9G999)
1 485
to_char(148.5, 999.999)
148.500
to_char(148.5, FM999.999)
148.5
to_char(148.5, FM999.990)
148.500
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 217/372
Xut bn nm 2013
Kt qu
to_char(148.5, 999D999)
148,500
to_char(3148.5, 9G999D999)
3 148,500
to_char(-485, 999S)
485-
to_char(-485, 999MI)
485-
to_char(485, 999MI)
485
to_char(485, FM999MI)
485
to_char(485, PL999)
+485
to_char(485, SG999)
+485
to_char(-485, SG999)
-485
to_char(-485, 9SG99)
4-85
to_char(-485, 999PR)
<485>
to_char(485, L999)
DM 485
to_char(485, RN)
CDLXXXV
to_char(485, FMRN)
CDLXXXV
to_char(5.2, FMRN)
to_char(482, 999th)
482nd
to_char(12, 99V999)
12000
to_char(12.4, 99V999)
12400
to_char(12.45, 99V9)
125
to_char(0.0004859, 9.99EEEE)
4.86e-04
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 218/372
Xut bn nm 2013
V d
Kt qu
date 2001-10-05
time 04:00:00
- interval 23 hours
interval -23:00:00
integer 3 (days)
date 2001-09-24
interval 02:00:00
time 03:00:00
interval 00:15:00
21 * interval 1 day
interval 21 days
interval 03:30:00
interval 00:40:00
Dng tr v
M t
V d
Kt qu
age(timestamp,
timestamp)
interval
43 nm 9
thng 27 ngy
age(timestamp)
interval
43 nm 8
thng 3 ngy
clock_timestamp() timestamp
with time
zone
current_date
date
current_time
age(timestamp 1957-06-13)
current_timestamp timestamp
Ngy thng v thi gian hin
with time zone hnh (bt u giao dch hin
hnh); xem Phn 9.9.4
date_part(text,
double
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
20
Trang 219/372
Dng tr v
M t
Xut bn nm 2013
V d
Kt qu
timestamp)
precision
2001-02-16 20:38:40)
date_part(text,
interval)
double
precision
date_trunc(text,
timestamp)
timestamp
2001-02-16
20:00:00
extract(field from
timestamp)
double
precision
20
extract(field
from interval)
double
precision
isfinite(date)
boolean
true
isfinite(timestamp) boolean
isfinite(interval)
Kim th khong xc nh
boolean
isfinite(interval 4 hours)
true
justify_days(interv interval
al)
justify_hours(inter interval
val)
justify_interval(int interval
erval)
localtime
time
localtimestamp
timestamp
now()
timestamp
Ngy thng v thi gian hin
with time zone hnh (bt u giao dch hin
hnh); xem Phn 9.9.4
statement_timesta
mp()
timestamp
Ngy thng v thi gian hin
with time zone hnh (bt u giao dch hin
hnh); xem Phn 9.9.4
timeofday()
text
1 day 03:00:00
Biu thc ny l ng khi 2 giai on thi gian (c cc im cui ca chng xc nh) chng ln
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 220/372
Xut bn nm 2013
Hm extract truy xut cc trng con nh nm hoc gi t cc gi tr ngy thng / thi gian. Trong
source phi l mt biu thc gi tr dng timestamp, time hoc interval. (Cc biu thc dng date
a ra cho timestamp v c th v th cng c s dng). Trng field l mt m nh danh hoc
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 221/372
Xut bn nm 2013
extract
tr v cc gi tr dng
double
century
Th k (century) s
SELECT EXTRACT(CENTURY FROM TIMESTAMP 2000-12-16 12:21:13);
Result: 20
SELECT EXTRACT(CENTURY FROM TIMESTAMP 2001-02-16 20:38:40);
Result: 21
extract
khc vi vic nh s ca hm
doy
Ngy ca nm (1-365/366)
SELECT EXTRACT(DOY FROM TIMESTAMP 2001-02-16 20:38:40);
Result: 47
epoch
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 222/372
Xut bn nm 2013
Trng gi (0-23)
SELECT EXTRACT(HOUR FROM TIMESTAMP 2001-02-16 20:38:40);
Result: 20
isodow
Nm theo ISO 8601 c ngy thng nm trong (khng p dng c cho cc khong)
SELECT EXTRACT(ISOYEAR FROM DATE 2006-01-01);
Result: 2005
SELECT EXTRACT(ISOYEAR FROM DATE 2006-01-02);
Result: 2006
Thin nin k
SELECT EXTRACT(MILLENNIUM FROM TIMESTAMP 2001-02-16 20:38:40);
Result: 3
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 223/372
Xut bn nm 2013
Result: 28500
minute
interval
quarter
Trang 224/372
Xut bn nm 2013
Hm extract trc ht c nh cho vic x l tnh ton. i vi cc gi tr ngy thng / thi gian
hin th, xem Phn 9.8.
Hm date_part to thnh m hnh tng ng vi Ingres truyn thng vi hm tiu chun SQL.
extract:
date_part(field, source)
9.9.2. date_trunc
Hm date_trunc v khi nim l tng t nh hm trunc cho cc s.
date_trunc(field, source)
Trong source l mt biu thc gi tr dng timestamp hoc interval. (Cc gi tr dng date v time
c a ra mt cch t ng cho timestamp hoc interval, mt cch tng ng). Trng field s
chn chnh xc no ct bt gi tr u vo. Gi tr tr v l dng timestamp hoc interval
vi tt c cc trng t quan trng hn so vi c chn v c thit lp v 0 (hoc 1, cho ngy v
thng).
Cc gi tr hp l cho field l:
microseconds
milliseconds
second
minute
hour
day
week
month
quarter
year
decade
century
millennium
Cc v d:
SELECT date_trunc(hour, TIMESTAMP 2001-02-16 20:38:40);
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 225/372
Xut bn nm 2013
Dng tr v
M t
i x vi du thi gian c a ra khng c vng thi
gian c nm trong vng thi gian c ch nh
du thi gian khng c vng Bin i du thi gian c a ra c vng thi gian cho
thi gian
vng thi gian mi, khng c ch nh vng thi gian
Bin i thi gian cho trc c vng thi gian thnh vng
thi gian mi
Trong cc biu thc , vng thi gian mong mun zone c th c ch nh hoc nh mt chui
vn bn (nh, 'PST') hoc nh mt khong (nh, INTERVAL -08:00). Trong trng hp vn bn, mt
tn vng thi gian c th c ch nh theo bt k cch no c m t trong Phn 8.5.3.
Cc v d (gi thit vng thi gian a phng l PST8PDT):
SELECT TIMESTAMP 2001-02-16 20:38:40 AT TIME ZONE MST;
Result: 2001-02-16 19:38:40-08
SELECT TIMESTAMP WITH TIME ZONE 2001-02-16 20:38:40-05 AT TIME ZONE MST;
Result: 2001-02-16 18:38:40
V d u ly mt du thi gian m khng c vng thi gian v dch n thnh thi gian MST (UTC7), m sau c bin i thnh PST (UTC-8) hin th. V d 2 ly mt du thi gian c ch
nh trong EST (UTC-5) v bin i n thnh thi gian a phng theo MST (UTC-7).
Hm timezone(zone, timestamp) l tng ng vi cu trc tun th SQL timestamp AT TIME ZONE zone.
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 226/372
Xut bn nm 2013
LOCALTIME(precision)
LOCALTIMESTAMP(precision)
LOCALTIME
v LOCALTIMESTAMP c th ty ly mt tham s
chnh xc, n lm cho vic lm trn s cho nhiu k t s thp phn trong trng giy. Khng c
mt tham s chnh xc, th kt qu c a ra vi chnh xc y c sn. Mt s v d:
CURRENT_TIME, CURRENT_TIMESTAMP, LOCALTIME
SELECT CURRENT_TIME;
Result: 14:39:53.662522-05
SELECT CURRENT_DATE;
Result: 2001-12-23
SELECT CURRENT_TIMESTAMP;
Result: 2001-12-23 14:39:53.662522-05
SELECT CURRENT_TIMESTAMP(2);
Result: 2001-12-23 14:39:53.66-05
SELECT LOCALTIMESTAMP;
Result: 2001-12-23 14:39:53.662522
Tt c cc dng d liu ngy thng / thi gian cng chp nhn gi tr hng c bit now ch nh
ngy thng v thi gian hin hnh (mt ln na, c dch nh l thi im bt u ca giao dch).
V th c 3 th sau u tr v cng mt kt qu:
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 227/372
Xut bn nm 2013
SELECT CURRENT_TIMESTAMP;
SELECT now();
SELECT TIMESTAMP now; --
to ra s ng tin trnh ca phin lm vic hin hnh cho ti cc giy seconds tri qua.
seconds l mt gi tr dng chnh xc gp i double precision, nn cc tr phn thp phn ca
giy c th c ch nh. V d:
pg_sleep
SELECT pg_sleep(1.5);
9.10. Hm h tr nh s Enum
i vi cc dng nh s (c m t trong Phn 8.7), c vi hm cho php vic lp trnh sch s
hn m khng c cc gi tr c bit m cng (hard code) ca mt dng nh s enum. Chng c
lit k trong Bng 9-29. Cc v d gi thit mt dng nh s enum c to ra nh:
CREATE TYPE rainbow AS ENUM (red, orange, yellow, green, blue, purple);
M t
V d
Kt qu v d
enum_first(anyenum)
red
enum_last(anyenum)
purple
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 228/372
M t
Xut bn nm 2013
V d
Kt qu v d
M t
V d
Chuyn i
Chuyn i
Co dn / Xoay
Co dn / Xoay
((1,-1),(-1,1)) # ((1,1),(-1,-1))
# ((1,0),(0,1),(-1,0))
@-@
@@
Tm
@@ circle ((0,0),10)
##
<->
Khong gia
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 229/372
Xut bn nm 2013
M t
V d
&&
Chng ln? (Mt im chung lm iu ny thnh ng). box ((0,0),(1,1)) && box ((0,0),(2,2))
<<
Nghim tri?
>>
Nghim phi?
&<
&>
<<|
Nghim di?
|>>
Nghim trn?
&<|
|&>
<^
>^
?#
Giao nhau?
?-
Nm ngang?
?- lseg ((-1,0),(1,0))
?-
?|
Thng ng?
?| lseg ((-1,0),(1,0))
?|
?-|
Vung gc?
?||
Song song?
@>
Bao gm?
<@
~=
Ht nh?
Lu : Trc PostgreSQL 8.2, cc ton t cha @> v <@ tng c gi mt cch tng
ng l ~ v @. Cc tn vn sn sng, nhng c ct ngn v cui cng s b loi b.
Bng 9-31. Cc hm a l
Hm
Dng tr v
M t
V d
area(object)
double precision
area(box ((0,0),(1,1)))
center(object)
point
tm
center(box ((0,0),(1,2)))
diameter(circle)
double precision
diameter(circle ((0,0),2.0))
height(box)
double precision
height(box ((0,0),(1,1)))
isclosed(path)
boolean
ng khp kn?
isclosed(path ((0,0),(1,1),(2,0)))
isopen(path)
boolean
ng m?
isopen(path [(0,0),(1,1),(2,0)])
length(object)
double precision
di
length(path ((-1,0),(1,0)))
npoints(path)
int
s cc im
npoints(path [(0,0),(1,1),(2,0)])
npoints(polygon)
int
s cc im
npoints(polygon ((1,1),(0,0)))
pclose(path)
path
pclose(path [(0,0),(1,1),(2,0)])
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 230/372
Dng tr v
Xut bn nm 2013
M t
V d
popen(path)
path
bin i ng thnh m
popen(path ((0,0),(1,1),(2,0)))
radius(circle)
double precision
radius(circle ((0,0),2.0))
width(box)
double precision
width(box ((0,0),(1,1)))
Dng tr v
M t
V d
box(circle)
box
box(circle ((0,0),2.0))
box(point, point)
box
cc im thnh hp
box(polygon)
box
a gic thnh hp
box(polygon ((0,0),(1,1),(2,0)))
circle(box)
circle
circle(box ((0,0),(1,1)))
circle
tm v bn knh ng trn
circle(polygon)
circle
circle(polygon ((0,0),(1,1),(2,0)))
lseg(box)
lseg
lseg(box ((-1,0),(1,0)))
lseg(point, point)
lseg
cc im thnh on thng
path(polygon)
path
a gic thnh ng
path(polygon ((0,0),(1,1),(2,0)))
xy dng im
point(23.4, -44.5)
point(box)
point
tm ca hp
point(box ((-1,0),(1,0)))
point(circle)
point
tm ng trn
point(circle ((0,0),2.0))
point(lseg)
point
tm ca on thng
point(lseg ((-1,0),(1,0)))
point(polygon)
point
tm ca a gic
point(polygon ((0,0),(1,1),(2,0)))
polygon(box)
polygon
hp thnh a gic 4 im
polygon(box ((0,0),(1,1)))
polygon(circle)
polygon
polygon(circle ((0,0),2.0))
polygon(npts, circle)
polygon
polygon(path)
polygon
ng thnh a gic
polygon(path ((0,0),(1,1),(2,0)))
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 231/372
Xut bn nm 2013
M t
V d
<
nh hn
<=
nh hn hoc bng
bng
>=
ln hn hoc bng
>
ln hn
<>
khng bng
<<
nm trong
<<=
>>
bao gm
>>=
~ inet 192.168.1.6
&
cng
inet 192.168.1.6 + 25
tr
inet 192.168.1.43 - 36
tr
Dng
tr v
abbrev, host
v text
inet
M t
V d
Kt qu
abbrev(inet)
text
10.1.0.0/16
abbrev(cidr)
text
10.1/16
broadcast(inet)
inet
family(inet)
int
host(inet)
text
a ch IP chnh xc nh vn bn
host(192.168.1.5/24)
192.168.1.5
hostmask(inet)
inet
hostmask(192.168.2.30/30) 0.0.2.30
masklen(inet)
int
di chnh xc ca mt n
masklen(192.168.1.5/24)
24
netmask(inet)
inet
netmask(192.168.1.5/24)
255.255.255.0
broadcast(192.168.168/24) 192.255/24
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 232/372
Dng
tr v
cidr
Xut bn nm 2013
M t
V d
Kt qu
network(192.168.1.5/24)
set_masklen(192.168.1.5/24 192.168.1.5/16
, 16)
set_masklen(192.168.1.0/24 192.168.0.0/16
::cidr, 16)
text(inet)
trch a ch IP v di mt n nh
vn bn
text(inet 192.168.1.5)
text
192.168.0.1/24
192.168.1.5/32
Dng tr v
trunc(macaddr) macaddr
M t
V d
Kt qu
trunc(macaddr 12:34:56:78:90:ab)
12:34:56:00:00:00
Dng macaddr cng h tr cc ton t quan h tiu chun (>, <=, ) theo trt t t in.
M t
V d
Kt qu
@@
@@@
t ng ngha c yu cu cho @@
||
ghp ni tsvectors
&&
||
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 233/372
M t
Xut bn nm 2013
V d
Kt qu
!!
ph nh mt tsquery
!! cat::tsquery
!cat
@>
<@
tsquery nm bn trong?
Dng
tr v
M t
V d
Kt qu
to_tsvector([config regconfig , ]
document text)
fat:2 rat:3
length(tsvector)
setweight(tsvector, "char")
cat:3A fat:2A,4A
rat:5A
strip(tsvector)
length(fat:2,4 cat:3
rat:5A::tsvector)
querytree(query tsquery)
text
foo
float4
0.818
ts_rank_cd([weights float4[], ]
vector tsvector, query tsquery [,
normalization integer ])
float4
2.01317
ts_headline([config regconfig, ]
document text, query tsquery [,
options text ])
text
x y <b>z</b>
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 234/372
Dng
tr v
text)
Xut bn nm 2013
M t
V d
Kt qu
get_current_ts_config regconfig()
text
tsvector_update_trigger()
trigger
hm trigger cho cp
nht ct tsvector t
ng
CREATE
TRIGGER ...
tsvector_update_trigger_column()
trigger
english
tsvector_update_trigger(
tsvcol,
pg_catalog.swedish,
title, body)
Dng
tr v
M t
V d
Kt qu
ts_debug([config regconfig, ]
setof
document text, OUT alias text,
record
OUT description text, OUT token
text, OUT dictionaries regdictionary[],
OUT dictionary
regdictionary, OUT lexemes text[])
kim th mt cu hnh
ts_debug(engl (asciiword,"Word,
ish,
all ASCII",The,
The Brightest {english_stem},eng
supernovaes)
kim th mt t in
ts_lexize(engl {star}
ish_stem,
stars)
setof
record
setof
record
setof
record
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 235/372
Dng
tr v
setof
record
M t
Xut bn nm 2013
V d
ly s thng k ca mt ct ts_stat(SELE
tsvector
CT vector
from apod)
Kt qu
(foo,10,15) ...
9.14. Hm XML
Cc hm v cc biu thc ging hm c m t trong phn ny vn hnh vi cc gi tr dng xml.
Hy kim tra Phn 8.13 c thng tin v dng xml. Cc biu thc ging hm xmlparse v
xmlserialize cho vic bin i sang v t dng xml khng c lp li y. S dng nhiu hm
i hi ci t phi c xy dng cu hnh - vi libxml.
9.14.1.2. xmlconcat
xmlconcat(xml[, ...])
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 236/372
Xut bn nm 2013
9.14.1.3. xmlelement
xmlelement(name name [, xmlattributes(value [AS attname] [, ... ])] [, content, ...])
Biu thc xmlelement to ra mt phn t XML, c trao tn, cc thuc tnh v ni dung. V d:
SELECT xmlelement(name foo);
xmlelement
-----------<foo/>
SELECT xmlelement(name foo, xmlattributes(xyz as bar));
xmlelement
-----------------<foo bar="xyz"/>
SELECT xmlelement(name foo, xmlattributes(current_date as bar), cont, ent);
xmlelement
------------------------------------<foo bar="2007-01-26">content</foo>
Cc tn phn t v thuc tnh m khng phi l cc tn XML hp l c thot bng vic thay th
cc k t c li bng s tun t _xHHHH_, trong HHHH l im m Unicode ca k t theo k hiu
hexadecimal (h 16). V d:
SELECT xmlelement(name "foo$bar", xmlattributes(xyz as "a&b"));
xmlelement
---------------------------------<foo_x0024_bar a_x0026_b="xyz"/>
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 237/372
Xut bn nm 2013
Nhng cc v d ny th khng:
SELECT xmlelement(name test, xmlattributes(constant), a, b) FROM test;
SELECT xmlelement(name test, xmlattributes(func(a, b))) FROM test;
Biu thc xmlforest to ra mt rng (tun t) XML cc phn t bng vic s dng cc tn v ni
dung c a ra.
Cc v d:
SELECT xmlforest(abc AS foo, 123 AS bar);
xmlforest
-----------------------------<foo>abc</foo><bar>123</bar>
SELECT xmlforest(table_name, column_name)
FROM information_schema.columns
WHERE table_schema = pg_catalog;
xmlforest
------------------------------------------------------------------------------------------<table_name>pg_authid</table_name><column_name>rolname</column_name>
<table_name>pg_authid</table_name><column_name>rolsuper</column_name>
...
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 238/372
Xut bn nm 2013
Biu thc xmlpi to ra mt lnh x l XML. Ni dung, nu c, phi khng cha s tun t k t ?>.
V d:
SELECT xmlpi(name php, echo "hello world";);
xmlpi
----------------------------<?php echo "hello world";?>
9.14.1.6. xmlroot
xmlroot(xml, version text | no value [, standalone yes|no|no value])
9.14.1.7. xmlagg
xmlagg(xml)
ORDER BY
c th c thm vo li gi tng hp nh
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 239/372
Xut bn nm 2013
Tip cn phi tiu chun sau y c s dng khuyn co trong cc phin bn trc, v c th
vn cn hu dng trong cc trng hp c bit:
SELECT xmlagg(x) FROM (SELECT * FROM test ORDER BY y DESC) AS tab;
xmlagg
---------------------<bar/><foo>abc</foo>
9.14.1.8. T v XML
xml IS DOCUMENT
9.14.2. X l XML
x l cc gi tr dng d liu xml, PostgreSQL a ra hm
Xpath 1.0.
xpath,
n nh gi cc biu thc
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 240/372
Xut bn nm 2013
ARRAY[ARRAY[mydefns, http://example.com]]);
xpath
-------{test}
(1 row)
Nu khng tn bng no l sn sng, l, khi vic nh x mt truy vn hoc mt con tr, chui
table c s dng trong nh dng trc, cn row trong nh dng th 2.
S la chn gia cc nh dng ph thuc vo ngi s dng. nh dng u tin l mt ti liu
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 241/372
Xut bn nm 2013
xmlelement,
c th c s
trong xsi l tin t khng gian tn XML cho trng hp S XML. Mt khai bo khng gian
tn ph hp s c thm vo gi tr kt qu. Nu sai, cc ct c cha cc gi tr null n gin s b
m khi u ra.
Tham s targetns ch nh khng gian tn XML mong mun ca kt qu. Nu khng c khng gian
tn no c bit mong mun, th mt chui rng s c truyn.
Cc hm sau tr v cc ti liu S XML, m t vic nh x c cc hm tng ng trn thc
hin:
table_to_xmlschema(tbl regclass, nulls boolean, tableforest boolean, targetns text)
query_to_xmlschema(query text, nulls boolean, tableforest boolean, targetns text)
cursor_to_xmlschema(cursor refcursor, nulls boolean, tableforest boolean, targetns text)
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 242/372
Xut bn nm 2013
...
</schemaname>
trong nh dng mt nh x bng ph thuc vo tham s rng bng nh c gii thch trn.
Kt qu ca mt nh x ni dung c s d liu trng ging th ny:
<dbname>
<schema1name>
...
</schema1name>
<schema2name>
...
</schema2name>
...
</dbname>
trong nh x s l nh trn.
Nh mt v d s dng u ra c cc hm to ra, Hnh 9-1 ch mt bng kiu XSLT m bin
i u ra ca table_to_xml_and_xmlschema thnh mt ti liu HTML c cha mt s tr v dng
bng cc d liu bng . Theo cch thc tng t, cc kt qu t cc hm c th c bin i
thnh cc nh dng khc da vo XML.
Hnh 9-1. Bng XSLT cho vic bin i u ra SQL/XML thnh HTML
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="http://www.w3.org/1999/xhtml"
>
<xsl:output method="xml"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
doctype-public="-//W3C/DTD XHTML 1.0 Strict//EN"
indent="yes"/>
<xsl:template match="/*">
<xsl:variable name="schema" select="//xsd:schema"/>
<xsl:variable name="tabletypename"
select="$schema/xsd:element[@name=name(current())]/@type"/>
<xsl:variable name="rowtypename"
select="$schema/xsd:complexType[@name=$tabletypename]/xsd:sequence/xsd:<html>
<head>
<title><xsl:value-of select="name(current())"/></title>
</head>
<body>
<table>
<tr>
<xsl:for-each select= "$schema/xsd:complexType[@name=$rowtypename]/xsd:sequence/
<th> <xsl:value-of select="."/></th>
</xsl:for-each>
</tr>
<xsl:for-each select="row">
<tr>
<xsl:for-each select="*">
<td><xsl:value-of select="."/></td>
</xsl:for-each>
</tr>
</xsl:for-each>
</table>
</body>
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 243/372
Xut bn nm 2013
</html>
</xsl:template>
</xsl:stylesheet>
Dng tr v
M t
currval(regclass)
bigint
lastval()
bigint
nextval(regclass)
bigint
setval(regclass, bigint)
bigint
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 244/372
Xut bn nm 2013
c nhn din ban u bt chp vic i tn, ti ch nh s sau ny... Hnh vi rng
buc sm ny thng l mong mun cho cc tham chiu tun t trong cc mc nh ct v
cc kiu nhn. Nhng i khi bn c th mun rng buc sau nhng ni tham chiu tun
t c gii quyt trong thi gian thc. c c hnh vi rng buc sau, hy p hng s
phi c lu gi nh mt hng s text thay v regclass:
nextval(foo::text) foo is looked up at runtime
Lu rng rng buc sau tng ch l hnh vi c cc phin bn PostgreSQL trc 8.1 h
tr, nn bn c th cn phi lm iu ny gi li cc ng ngha ca cc ng dng c.
Tt nhin, i s ca mt hm tun t c th l mt biu thc cng nh mt hng s. Nu n
l mt biu thc vn bn th s cng p ngm s gy ra mt s tra cu thi gian thc.
Cc hm tun t c sn l:
nextval
Tr v gi tr gn y nht c c bng nextval cho tun t ny trong phin hin hnh. (Mt
li c bo co nu nextval cha bao gi tng c gi cho tun t trong phin ny). V
iu ny ang tr v mt gi tr phin cc b, n trao mt cu tr li c th on trc c
liu c hay khng cc phin khc thc thi nextval k t khi phin hin hnh thc hin.
lastval
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 245/372
Xut bn nm 2013
Kt qu c setval tr v ch l gi tr ca i s th 2 ca n.
Nu mt i tng tun t tng c to ra vi cc tham s mc nh, th cc li gi nextval tip
sau s tr v cc gi tr tip sau bt u bng 1. Cc hnh vi khc c th c c bng vic s dng
cc tham s c bit trong lnh CREATE SEQUENCE; xem trang tham chiu lnh ca n c thm
thng tin.
Quan trng: trnh vic kha cc giao dch ng thi m c c cc s t cng y ht s
tun t, mt hot ng nextval l khng bao gi quay ngc li c; l, mt khi mt gi
tr tng c ly th n c xem l c s dng, thm ch nu giao dch m lm cho
nextval sau hng. iu ny c ngha l cc giao dch b hng c th li cc l hng
khng c s dng trong tun t ca cc gi tr c ch nh. Cc hnh ng ca setval
cng khng bao gi quay ngc tr li c.
9.16.1. CASE
Biu thc SQL CASE l mt biu thc iu kin chung, tng t nh cc lnh if/else trong cc ngn
ng lp trnh khc:
CASE WHEN condition THEN result
[WHEN ...]
[ELSE result]
END
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 246/372
Xut bn nm 2013
Biu thc u tin c tnh ton, ri c so snh vi tng trong s cc biu thc gi tr value
trong cc mnh WHEN cho ti khi mt gi tr c tm thy m bng n. Nu khng s trng
khp no c tm thy, th kt qu ca mnh ELSE (hoc mt gi tr null) c tr v. iu ny
l tng t vi lnh switch trong C.
V d trn c th c vit bng vic s dng c php CASE n gin:
SELECT a,
CASE a WHEN 1 THEN one
WHEN 2 THEN two
ELSE other
END
FROM test;
a | case
---+------1 | one
2 | two
3 | other
Mt biu thc CASE khng c lng c bt k biu thc con no m khng cn thit xc nh
kt qu.
V d, y l cch thc c kh nng trnh mt li chia cho 0:
SELECT ... WHERE CASE WHEN x <> 0 THEN y/x > 1.5 ELSE false END;
9.16.2. COALESCE
COALESCE(value [, ...])
CASE, COALESCE
ch nh gi cc i s cn thit xc nh kt qu; l,
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 247/372
Xut bn nm 2013
9.16.3. NULLIF
NULLIF(value1, value2)
value
LEAST(value [, ...])
M t
V d
Kt qu
bng
ARRAY[1.1,2.1,3.1]::int[] = ARRAY[1,2,3] t
<>
khng bng
<
nh hn
>
ln hn
<=
nh hn hoc bng
>=
ln hn hoc bng
@>
bao gm
<@
nm trong
&&
||
ARRAY[1,2,3] || ARRAY[4,5,6]
{1,2,3,4,5,6}
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 248/372
M t
Xut bn nm 2013
V d
Kt qu
||
ARRAY[1,2,3] || ARRAY[[4,5,6],[7,8,9]]
{{1,2,3},{4,5,6},{7,8,9}}
||
3 || ARRAY[4,5,6]
{3,4,5,6}
||
ARRAY[4,5,6] || 7
{4,5,6,7}
Cc so snh mng so snh cc ni dung mng phn t vi phn t, bng vic s dng hm so snh
cy B (B-tree) mc nh cho dng d liu phn t. Trong cc mng a chiu, cc phn t c
ving thm theo trt t hng chnh (subscript cui cng khc nhanh nht). Nu cc ni dung ca 2
mng bng nhau nhng khc nhau v chiu, th s khc bit u tin trong thng tin theo chiu xc
nh trt t sp xp. (y l s thay i t cc phin bn ca PostgreSQL trc 8.2: cc phin bn
c hn c th ni rng 2 mng vi cng ni dung l bng nhau, thm ch nu s lng cc chiu
hoc cc di subscript l khc nhau).
Xem Phn 8.14 c cc chi tit v hnh vi ca ton t mng.
Bng 9-41 ch ra cc hm sn sng s dng vi cc dng mng. Xem Phn 8.14 c thm
thng tin v cc v d s dng cc hm .
Bng 9-41. Cc hm mng
Hm
Dng tr v
M t
V d
Kt qu
array_append(anyarr anyarray
ay,
anyelement)
array_cat(anyarray,
anyarray)
ghp 2 mng
array_cat(ARRAY[1,2,3],
ARRAY[4,5])
{1,2,3,4,5}
array_ndims(anyarra int
y)
tr v s chiu ca mng
array_ndims(ARRAY[[1,2,3],
[4,5,6]])
array_dims(anyarray) text
tr v mt i din vn bn cc array_dims(ARRAY[[1,2,3],
chiu ca mng
[4,5,6]])
[1:2][1:3]
array_fill(anyelement anyarray
,
int[], [, int[]])
[2:4]={7,7,7}
array_length(anyarra int
y,
int)
array_lower(anyarray int
, int)
array_prepend(anyel anyarray
ement, anyarray)
ni phn t vo u ca mng
array_to_string(anyar text
ray, text)
array_upper(anyarray int
, int)
anyarray
array_prepend(1,
ARRAY[2,3])
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
{1,2,3}
1~^~2~^~3
Trang 249/372
Dng tr v
M t
Xut bn nm 2013
V d
Kt qu
string_to_array(text,
text)
text[]
unnest(anyarray)
setof
(2 rows)
9.18. Hm tng hp
Cc hm tng hp (aggregate function) tnh ton mt kt qu duy nht t mt tp hp cc gi tr
u vo. Cc hm tng hp c xy dng sn c lit k trong Bng 9-42 v Bng 9-43. Cc cn
nhc c php c bit cho cc hm tng hp c gii thch trong Phn 4.2.7. Hy xem thm Phn
2.7 c thng tin gii thiu b sung.
Bng 9-42. Cc hm tng hp mc ch chung
Hm
(Cc) dng i s
array_agg(expression) bt k
Dng tr v
mng dng ca i s
M t
cc gi tr u vo, bao gm c
null, c ghp trong mt mng
avg(expression)
smallint, int, bigint, real, numeric tho bt k i s dng trung bnh (trung bnh s hc)
double precision,
integer no, double precision cho ca tt c cc gi tr u vo
numeric, hoc interval
mt i s du thp phn, nu
khng th y ht nh dng d liu
ca i s
bit_and(expression)
bit_or(expression)
OR theo bit i vi tt c cc
gi tr u vo khng null, hoc
null nu c mt gi tr nh vy
bool_and(expression) bool
bool
ng (true) nu cc gi tr u
vo true, nu khng l sai (false)
bool_or(expression)
bool
true nu t nht mt gi tr u
vo l true, nu khng l false
bigint
s lng cc hng u vo
bool
count(*)
count(expression)
any
bigint
every(expression)
bool
bool
tng ng vi bool_and
max(expression)
y ht nh dng ca i s
gi tr cc i ca biu thc
khp tt c cc gi tr u vo
min(expression)
y ht nh dng ca i s
text
cc gi tr u vo c ghp
trong mt chui, tch bch nhau
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 250/372
(Cc) dng i s
Xut bn nm 2013
Dng tr v
M t
bng cc du ngt
sum(expression)
smallint, int, bigint, real, bigint cho cc i s smallint tng biu thc khp tt c cc
double precision,
hoc int, numeric cho cc i s gi tr u vo
numeric, hoc interval
bigint, double precision cho cc
i s cc du phn cch, nu
khng th y ht nh dng d liu
ca i s
xmlagg(expression)
xml
xml
y ANY c th c xem hoc nh vic gii thiu mt truy vn con, hoc nh ang l mt
hm tng hp, nu truy vn con tr v mt hng vi mt gi tr Boolean. V th tn tiu
chun khng th c a ra cho cc tng hp .
Lu : Ngi s dng quen lm vic vi cc h qun tr c s d liu SQL khc c th
tht vng v hiu nng ca tng hp count khi m n c p dng cho ton b bng. Mt
truy vn nh:
SELECT count(*) FROM sometable;
s c PostgreSQL thc thi bng vic s dng mt s qut tun t ton b bng.
Cc hm tng hp array_agg, string_agg v xmlagg, cng nh cc hm tng hp tng t do ngi
s dng nh ngha, to ra cc gi tr kt qu c ngha khc nhau, ph thuc vo trt t ca cc gi
tr u vo. Trt t ny c ch nh mc nh, nhng c th c kim sot bng vic vit mt
mnh ORDER BY bn trong li gi tng hp , nh c ch ra trong Phn 4.2.7. Nh mt s la
chn, vic cung cp cc gi tr u vo t mt truy vn con c sp xp thng s lm vic. V d:
SELECT xmlagg(x) FROM (SELECT x FROM test ORDER BY y DESC) AS tab;
Nhng c php ny l khng c php trong tiu chun SQL, v khng kh chuyn c cho cc
h thng c s d liu khc.
Bng 9-43 ch ra cc hm tng hp thng c s dng trong phn tch cc s thng k (chng
c tch bch nhau ch trnh vic hn n danh sch cc tng hp c s dng ph bin hn).
nhng ni m m t nhc ti N, n c ngha l s lng cc hng u vo theo tt c cc biu
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 251/372
Xut bn nm 2013
Dng i s
Dng tr v
M t
corr(Y, X)
double precision
double precision
h s tng quan
covar_pop(Y, X)
double precision
double precision
hip phng
covariance)
covar_samp(Y, X)
double precision
double precision
phng sai mu
regr_avgx(Y, X)
double precision
double precision
regr_avgy(Y, X)
double precision
double precision
regr_count(Y, X)
double precision
bigint
regr_intercept(Y, X)
double precision
double precision
regr_r2(Y, X)
double precision
ouble precision
regr_slope(Y, X)
double precision
double precision
regr_sxx(Y, X)
double precision
double precision
regr_sxy(Y, X)
double precision
double precision
regr_syy(Y, X)
double precision
double precision
stddev(expression)
sai
(population
variance(expression)
var_pop(expression)
var_samp(expression)
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 252/372
Xut bn nm 2013
9.19. Hm ca s
Cc hm ca s a ra kh nng thc hin cc tnh ton khp cc tp hp cc hng c lin quan ti
hng truy vn hin hnh. Xem Phn 3.5 c s gii thiu cho chc nng ny.
Cc hm ca s c xy dng sn c lit k trong Bng 9-44. Lu rng cc hm phi c
triu gi bng vic s dng c php cc hm ca s; l mt mnh OVER theo yu cu.
B sung thm vo cc hm , bt k hm tng hp c xy dng sn hoc do ngi s dng t
nh ngha no cng c th c s dng nh mt hm ca s (xem Phn 9.18 c mt danh sch
cc tng hp c xy dng sn ). Cc hm tng hp hnh ng nh cc hm ca s ch khi mt
mnh OVER i sau li gi; nu khng th chng hnh ng nh l cc tng hp thng thng.
Bng 9-44. Cc hm ca s mc ch chung
Hm
Dng tr v
M t
row_number()
bigint
rank()
bigint
dense_rank()
bigint
percent_rank()
double precision hng tng i ca hng hin hnh: (hng - 1) / (tng s hng - 1)
cume_dist()
double precision hng tng i ca hng hin hnh: (s hng i trc hoc ngang hng
vi hng hin hnh) / (tng s hng)
ntile(num_buckets
integer)
integer
first_value(value any)
dng y ht nh
gi tr
last_value(value any)
dng y ht nh
gi tr
nth_value(value any,
nth integer)
dng y ht nh
gi tr
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 253/372
Xut bn nm 2013
9.20.1. EXISTS
EXISTS (subquery)
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 254/372
Xut bn nm 2013
9.20.2. IN
expression IN (subquery)
Pha bn tay phi l mt truy vn con trong cc du ngoc n, n phi tr v chnh xc mt ct.
Biu thc bn tay tri c nh gi v c so snh vi tng hng kt qu ca truy vn con .
Kt qu ca IN l ng true nu bt k hng ca truy vn con no bng c tm thy. Kt qu l
sai false nu khng hng no bng c thy (bao gm c trng hp ni m truy vn con
khng tr v hng no c).
Lu rng nu biu thc bn tay tri cho ra null, hoc nu khng c cc gi tr bng no bn tay
phi v t nht mt hng bn tay phi c null, th kt qu ca cu trc IN s l null, ch khng phi
l false. iu ny l tun theo vi cc qui tc thng thng ca SQL cho cc kt hp Boolean ca
cc gi tr null.
Nh vi EXISTS, khng khn ngoan gi thit rng truy vn con s c nh gi hon chnh.
row_constructor IN (subquery)
9.20.3. NOT IN
expression NOT IN (subquery)
Bn tay phi l mt truy vn con trong cc du ngoc n, n phi tr v chnh xc 1 ct. Biu thc
bn tay tri c nh gi v c so snh vi tng hng kt qu ca truy vn con . Kt qu ca
NOT IN l true nu ch cc hng khng bng nhau ca truy vn con c thy (bao gm c trng
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 255/372
Xut bn nm 2013
9.20.4. ANY/SOME
expression operator ANY (subquery)
expression operator SOME (subquery)
Bn tay phi l mt truy vn con trong cc du ngoc n, n phi tr v chnh xc mt ct. Biu
thc bn tay tri c nh gi v c so snh hng khn ngoan theo tng hng kt qu ca truy
vn con bng vic s dng operator c a ra, n phi cho mt kt qu Boolean. Kt qu ca ANY
l true nu bt k kt qu true no c c. Kt qu l false nu khng kt qu true no c
thy (bao gm trng hp ni m truy vn con khng tr v hng no).
SOME
Lu l nu khng c thnh cng v t nht mt hng bn tay phi c null cho kt qu ca ton t
, th kt qu ca cu trc ANY s l null, khng phi l false. iu ny l tun theo vi cc qui tc
thng thng ca SQL i vi cc kt hp Boolean ca cc gi tr null.
Nh vi EXISTS, l khng khn ngoan gi thit rng truy vn con s c nh gi hon chnh.
row_constructor operator ANY (subquery)
row_constructor operator SOME (subquery)
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 256/372
Xut bn nm 2013
9.20.5. ALL
expression operator ALL (subquery)
Bn tay phi l mt truy vn con trong cc du ngoc n, n phi tr v chnh xc 1 ct. Biu thc
bn tay tri c nh gi v c so snh ti tng hng kt qu ca truy vn con bng vic s
dng operator c a ra, n phi cho mt kt qu Boolean. Kt qu ca ALL l true nu tt c
cc hng cho true (bao gm c trng hp ni m truy vn con khng tr v hng no). Cc kt
qu l false nu bt k kt qu false no c tm thy. Kt qu l NULL nu so snh khng
tr v false cho bt k hng no, v n tr v NULL cho t nht mt hng.
NOT IN
Nh vi EXISTS, l khng khn ngoan gi thit rng truy vn con s c nh gi hon chnh.
row_constructor operator ALL (subquery)
Bn tay tri l mt cu trc hng, nh c m t trong Phn 4.2.12. Bn tay phi l mt truy vn
con trong cc du ngoc n, n phi tr v chnh xc cng nhiu ct nh c cc biu thc hng
bn tay tri cng tt. Hn na, truy vn con khng th tr v nhiu hn 1 hng. (Nu n khng tr
v hng no, th kt qu c ly l null). Bn tay tri c nh gi v c so snh hng khn
ngoan cho tng hng kt qu ca truy vn con duy nht.
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 257/372
Xut bn nm 2013
Xem Phn 9.21.5 c cc chi tit v ngha ca mt so snh hng khn ngoan.
9.21.1. IN
expression IN (value [, ...])
Bn tay phi l mt danh sch cc biu thc v hng trong cc du ngoc n. Kt qu l true
nu kt qu biu thc bn tay tri l bng vi bt k biu thc no bn tay phi. y l mt k hiu
tc k cho
expression = value1
OR
expression = value2
OR
...
Lu rng nu biu thc bn tay tri c null, hoc nu khng c cc gi tr bng nhau no bn tay
phi v t nht mt biu thc bn tay phi c null, th kt qu ca cu trc IN s l null, khng l
false. iu ny tun theo qui tc thng thng ca SQL v cc kt hp Boolean cc gi tr null.
9.21.2. NOT IN
expression NOT IN (value [, ...])
Bn tay phi l mt danh sch cc biu thc v hng trong cc du ngoc n. Kt qu l true
nu kt qu biu thc bn tay tri l bng vi tt c cc biu thc bn tay phi. y l mt k hiu
tc k cho
expression <> value1
AND
AND
...
Lu rng nu biu thc bn tay tri cho null, hoc nu khng c gi tr bng nhau no bn tay
phi v t nht mt biu thc bn tay phi cho null, th kt qu ca cu trc NOT IN s l null, khng
ng nh bn c th ngy th k vng. iu ny l tun theo vi cc qui tc SQL thng thng cho
cc kt hp Boolean cc gi tr null.
Mo: x NOT IN y l tng ng vi NOT (x IN y) trong mi trng hp. Tuy nhin, cc gi tr
null ging hn nhiu ln ci mi khi lm vic vi NOT IN so vi khi lm vic vi IN. L tt
nht th hin iu kin ca bn mt cch tch cc nu c th.
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 258/372
Xut bn nm 2013
Bn tay phi l mt biu thc trong du ngoc n, n phi cho mt gi tr mng. Biu thc bn tay
tri c nh gi v c so snh vi tng phn t ca mng bng vic s dng operator c a
ra, n phi cho mt kt qu Boolean. Kt qu ca ANY l true nu bt k kt qu true no c c.
Kt qu l false nu khng kt qu true no c tm thy (bao gm c trng hp ni m mng
khng c phn t no).
Nu biu thc mng cho mt mng null, th kt qu ca ANY s l null. Nu biu thc bn tay tri
cho null, th kt qu ca ANY thng l null (d mt ton t so snh khng kht khe c th c kh
nng cho mt kt qu khc). Hn na, nu mng bn tay phi c bt k cc thnh phn null no v
kt qu so snh khng ng c c, th kt qu ca ANY vn s l null, khng phi l false (mt ln
na, gi thit mt ton t so snh kht khe). iu ny tun th vi cc qui tc SQL thng thng
cho cc kt hp Boolean ca cc gi tr null.
SOME
l mt ng ngha vi ANY.
Bn tay phi l mt biu thc trong cc du ngoc n, n phi cho mt gi tr mng. Biu thc bn
tay tri c nh gi v c so snh vi tng phn t mng bng vic s dng operator c a
ra, n phi cho mt kt qu Boolean. Kt qu ca ALL l true nu tt c cc so snh cho l ng
(bao gm c trng hp ni m mng c cc phn t 0). Kt qu l false nu bt k kt qu sai
no c thy.
Nu biu thc mng cho mt mng null, th kt qu ca ALL s l null. Nu biu thc bn tay tri
cho null, th kt qu ca ALL thng l null (d mt ton t so snh khng kht khe c th c kh
nng cho mt kt qu khc). Hn na, nu mng bn tay phi c bt k phn t null no v kt qu
so snh khng ng c c, th kt qu ca ALL s l null, khng phi false (mt ln na, gi thit
mt ton t so snh kht khe). iu ny l tun th vi cc qui tc SQL thng thng cho cc kt
hp Boolean ca cc gi tr null.
Tng bn l mt cu trc hng, nh c m t trong Phn 4.2.12. Hai gi tr hng phi c cng
s cc trng. Tng bn c nh gi v chng c so snh hng khn ngoan. Cc so snh hng
c php khi operator l = , <> , < , <= , > or >=, hoc c ng ngha tng t mt trong s .
(S l c bit, mt ton t c th l mt ton t so snh hng nu n l mt thnh vin ca mt lp
ton t B-tree, hoc l ph nh ca thnh vin = trong mt lp ton t B-tree).
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 259/372
Xut bn nm 2013
Cc trng hp = v <> lm vic kh khc nhau so vi cc trng hp khc. Hai hng c xem l
bng nhau nu tt c cc thnh vin tng ng ca chng l khng null v bng nhau; cc hng l
khng bng nhau nu bt k thnh vin tng ng no l khng null v khng bng nhau; nu
khng th kt qu ca so snh hng l khng r (null).
i vi cc trng hp <, <=, > v >=, cc phn t hng c so snh t tri qua phi, dng ngay
khi mt cp cc phn t khng bng nhau hoc null c thy. Nu hoc cp cc phn t ny l
null, th kt qu ca so snh hng l khng r (null); nu khng th so snh cp cc phn t ny xc
nh kt qu. V d, ROW(1,2,NULL) < ROW(1,3,0) cho true, khng phi null, v cp cc phn t th 3
s khng c xem xt.
Lu : Trc phin bn PostgreSQL 8.2, cc trng hp <, <=, > v >= tng khng c
c t SQL nm. Mt so snh nh ROW(a,b) < ROW(c,d) tng c trin khai nh l a < c AND b
< d, trong khi hnh vi ng l tng ng vi a < c OR (a = c AND b < d).
row_constructor IS DISTINCT FROM row_constructor
Cu trc ny ging vi mt so snh hng <>, nhng n khng cho null i vi cc u vo null.
Thay vo , bt k gi tr null no c xem l khng bng vi (khc vi) bt k gi tr khng null
no, v bt k 2 null no c xem l bng nhau (khng khc nhau). V th kt qu hoc s l true
hoc l false, khng bao gi null.
row_constructor IS NOT DISTINCT FROM row_constructor
9.22. Hm thit lp tr v
Phn ny m t cc hm c kh nng tr v nhiu hn mt hng. Hin hnh ch cc hm trong lp
ny l cc hm sinh lot, nh c chi tit ha trong Bng 9-45 v Bng 9-46.
Bng 9-45. Cc hm sinh lot
Hm
Dng i s
Dng tr v
M t
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 260/372
Dng i s
Dng tr v
Xut bn nm 2013
M t
generate_series(start, timestamp or timestamp setof timestamp hoc setof Sinh mt lot cc gi tr, t u ti khi
stop, step interval)
with time zone
timestamp with time zone dng vi bc kch c bng bc.
(ht nh dng i s)
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 261/372
Xut bn nm 2013
2008-03-04 08:00:00
(9 rows)
Dng tr v
M t
generate_subscripts(array anyarray,
dim int)
setof int
generate_subscripts(array anyarray,
dim int, reverse boolean)
setof int
-- s dng c bn
SELECT generate_subscripts({NULL,1,NULL,2}::int[], 1) AS s;
s
--1
2
3
4
(4 rows)
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 262/372
Xut bn nm 2013
CREATE FUNCTION
postgres=# SELECT * FROM unnest2(ARRAY[[1,2],[3,4]]);
unnest2
--------1
2
3
4
(4 rows)
Dng tr v
M t
current_catalog
name
current_database()
name
current_schema[()]
name
current_schemas(boolean) name[]
current_user
name
current_query()
text
pg_backend_pid()
int
pg_listening_channels()
setof text
inet_client_addr()
inet
a ch ca kt ni t xa
inet_client_port()
int
cng ca kt ni t xa
inet_server_addr()
inet
a ch ca kt ni cc b
inet_server_port()
int
cng ca kt ni cc b
pg_my_temp_schema()
oid
pg_is_other_temp_schem boolean
a(oid)
session_user
name
user
name
tng ng vi current_user
version()
text
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 263/372
Xut bn nm 2013
pg_postmaster_start_time
version
Bng 9-48 lit k cc hm cho php ngi s dng truy vn cc quyn u tin truy cp i tng
lp trnh. Xem Phn 5.6 c thm thng tin v cc quyn u tin.
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 264/372
Xut bn nm 2013
Dng
tr v
M t
has_any_column_privilege(table, privilege)
has_column_privilege(user, table, column, privilege) boolean ngi s dng c quyn u tin cho ct
has_column_privilege(table, column, privilege)
has_database_privilege(database, privilege)
has_foreign_data_wrapper_privilege(user, fdw,
privilege)
has_foreign_data_wrapper_privilege(fdw, privilege) boolean ngi s dng hin hnh c quyn u tin cho trnh
gi li d liu bn ngoi
has_function_privilege(user, function, privilege)
has_function_privilege(function, privilege)
has_language_privilege(language, privilege)
has_schema_privilege(schema, privilege)
has_server_privilege(server, privilege)
has_sequence_privilege(sequence, privilege)
has_table_privilege(table, privilege)
has_tablespace_privilege(user, tablespace, privilege) boolean ngi s dng c quyn u tin cho khng gian bng
has_tablespace_privilege(tablespace, privilege)
kim tra liu mt ngi s dng c th truy cp mt bng theo mt cch thc c
bit hay khng. Ngi s dng c th c ch nh bng tn hoc bng OID ( pg_authid.oid), hoc
nu i s b lm m current_user c gi thit. Bng c th c ch nh bng tn hoc bng
OID. (V th, thc s c 6 phng n ca has_table_privilege, n c th nh s lng dng cc i
s ca chng phn bit). Khi ch nh bng tn, th tn c th c nh tnh theo s nu cn
has_table_privilege
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 265/372
Xut bn nm 2013
thit. Dng quyn u tin truy cp mong mun c ch nh bng mt chui vn bn, n phi nh
gi theo mt trong cc gi tr SELECT, INSERT, UPDATE, DELETE, TRUNCATE, REFERENCES hoc
TRIGGER. Nh mt s la chn, WITH GRANT OPTION c th c b sung vo mt dng quyn u
tin kim th liu quyn u tin c c gi vi la chn c trao hay khng. Hn na, cc
dng nhiu quyn u tin c th c lit k tch bch nhau bng du phy, trong trng hp kt
qu s l true nu bt k quyn u tin c lit k no c gi. (Trng hp chui quyn u tin
l khng ng k, v cc du trng tha ra c php gia nhng khng bn trong cc tn quyn
u tin). Mt s v d:
SELECT has_table_privilege(myschema.mytable, select);
SELECT has_table_privilege(joe, mytable, INSERT, SELECT WITH GRANT OPTION);
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 266/372
Xut bn nm 2013
kim tra liu mt ngi s dng c th truy cp mt khng gian bng theo
mt cch thc c bit hay khng. Cc kh nng i s ca n l tng t vi has_table_privilege.
Dng quyn u tin truy cp mong mun phi nh gi theo CREATE.
has_tablespace_privilege
kim tra liu mt ngi s dng c th truy cp mt vai tr theo mt cch c bit hay
khng. Cc kh nng i s ca n l tng t vi has_table_privilege. Dng quyn u tin truy cp
mong mun phi nh gi theo mt s kt hp ca MEMBER hoc USAGE. MEMBER biu th quan h
thnh vin trc tip hoc gin tip trong vai tr ( l, quyn thc hin SET ROLE), trong khi
USAGE biu th vic liu cc quyn u tin ca vai tr c sn sng ngay lp tc m khng phi
thc hin SET ROLE hay khng.
pg_has_role
Bng 9-49 ch ra cc hm xc nh liu mt i tng nht nh c l trc quan hay khng trong
ng tm kim s hin hnh. V d, mt bng c ni s l trc quan nu s bao gm ca
n l trong ng tm kim v khng c bng cng y ht tn no xut hin trc trong ng
tm kim . iu ny tng ng vi tuyn b rng bng c th c tham chiu ti bng tn
khng c kh nng s r rng. lit k cc tn ca tt c cc bng nhn thy c:
SELECT relname FROM pg_class WHERE pg_table_is_visible(oid);
Dng tr v
M t
pg_conversion_is_visible(conversion_oid) boolean
pg_function_is_visible(function_oid)
boolean
pg_operator_is_visible(operator_oid)
boolean
pg_opclass_is_visible(opclass_oid)
boolean
pg_table_is_visible(table_oid)
boolean
pg_ts_config_is_visible(config_oid)
boolean
pg_ts_dict_is_visible(dict_oid)
boolean
pg_ts_parser_is_visible(parser_oie)
boolean
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 267/372
Xut bn nm 2013
Dng tr v
M t
ng tm kim
pg_ts_template_is_visible(templateoid)
boolean
pg_type_is_visible(type_oid)
boolean
Tng hm thc thi kim tra tnh trc quan cho mt dng i tng c s d liu. Lu rng
pg_table_is_visible cng c th c s dng vi cc kiu nhn, cc ch s v cc tun t;
pg_type_is_visible cng c th c s dng vi cc min. i vi cc hm v ton t, mt i
tng trong ng tm kim l nhn thy nu khng c i tng no cng tn y ht v (cc) dng
d liu ca i s trc trong ng tm kim. i vi cc lp ton t, c tn v phng php
truy cp ch s c lin quan c xem xt.
Tt c cc hm i hi cc OID i tng nhn din i tng s c kim tra. Nu bn
mun kim tra mt i tng theo tn, l thun tin s dng cc dng tn hiu (alias) OID
(regclass, regtype, regprocedure, regoperator, regconfig hoc regdictionary), v d:
SELECT pg_type_is_visible(myschema.widget::regtype);
Dng tr
v
M t
format_type(type_oid, typemod)
text
pg_get_keywords()
pg_get_constraintdef(constrainoid)
text
pg_get_constraintdef(constraint_oid,
pretty_bool)
text
pg_get_expr(expr_text, relation_oid)
text
pg_get_expr(expr_text, relation_oid,
pretty_bool)
text
pg_get_functiondef(func_oid)
text
c nh ngha ca mt hm
pg_get_function_arguments(func_oid) text
pg_get_function_identity_arguments(f text
unc_oid)
pg_get_function_result(func_oid)
text
pg_get_indexdef(index_oid)
text
pg_get_indexdef(index_oid,
column_no, pretty_bool)
text
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 268/372
Dng tr
v
Xut bn nm 2013
M t
text
pg_get_serial_sequence(table_name,
column_name)
text
pg_get_triggerdef(trigger_oid)
text
pg_get_triggerdef(trigger_oid,
pretty_bool)
text
pg_get_userbyid(role_oid)
name
c tn vai tr vi OID c a ra
pg_get_viewdef(view_name)
text
pg_get_viewdef(view_name,
pretty_bool)
text
pg_get_viewdef(view_oid)
text
pg_get_viewdef(view_oid,
pretty_bool)
text
pg_typeof(any)
c dng d liu ca bt k gi tr no
regtype
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 269/372
Xut bn nm 2013
pg_get_userbyid
SELECT pg_typeof(33);
pg_typeof
----------integer
(1 row)
SELECT typlen FROM pg_type WHERE oid = pg_typeof(33);
typlen
-------4
(1 row)
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 270/372
Xut bn nm 2013
Dng
tr v
M t
col_description(table_oid, column_number)
text
obj_description(object_oid, catalog_name)
text
obj_description(object_oid)
text
shobj_description(object_oid, catalog_name)
text
Dng tr v
M t
txid_current()
bigint
txid_current_snapshot()
txid_snapshot_xmin(txid_snapshot) bigint
txid_snapshot_xmax(txid_snapshot) bigint
txid_snapshot_xip(txid_snapshot)
setof bigint
txid_visible_in_snapshot(bigint,
txid_snapshot)
boolean
Dng ID giao dch ni b (xid) l 32 bit rng v bao bc khong mi 4 t giao dch. Tuy nhin, cc
giao dch xut khu mt nh dng 64 bit m c m rng vi mt b m th k sao cho n
s khng bao quanh trong khi ang ci t. Dng d liu c cc hm s dng, txid_snapshot,
lu tr thng tin v kh nng nhn thy ID giao dch mt thi im c bit theo thi gian.
Cc thnh phn ca n c m t trong Bng 9-53.
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 271/372
Xut bn nm 2013
M t
xmin
ID giao dch sm nht (txid) m vn cn hot ng. Tt c cc giao dch sm hn s hoc c trnh v
nhn thy, hoc c quay tr ngc li v cht.
xmax
xip_list txids tch cc vo thi im ca hnh chp mn hnh. Danh sch bao gm ch nhng txids tch cc gia xmin
v xmax; c th c cc txids tch cc cao hn so vi xmax. Mt txid m l xmin <= txid < xmax v khng
nm trong danh sch ny tng phc tp ri vo thi im ca hnh chp mn hnh, v v th hoc nhn thy
hoc cht ty theo tnh trng trnh ca n. Danh sch khng bao gm txids ca cc giao dch.
Dng tr v
M t
current_setting(setting_name)
text
text
thit lp tham s v tr v gi tr mi
Hm
current_setting
SHOW.
setting_name.
Mt v d:
SELECT current_setting(datestyle);
current_setting
----------------ISO, MDY
(1 row)
Hm c ch ra trong Bng 9-55 gi i cc tn hiu kim sot cho cc tin trnh khc ca my
ch. S dng cc hm b hn ch ch cho cc siu ngi s dng.
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 272/372
Xut bn nm 2013
Dng tr v
boolean
M t
Hon mt truy vn hin hnh phn ph tr (backend)
Kt thc mt phn ph tr
pg_reload_conf()
boolean
pg_rotate_logfile()
boolean
Xoay tp lu k ca my ch
Cc hm c ch ra trong Bng 9-56 h tr trong vic tin hnh cc sao lu trc tuyn. Cc hm
khng th c thc thi trong qu trnh phc hi. S dng 3 hm u tin b hn ch ch cho cc
siu ngi s dng (superusers).
Bng 9-56. Cc hm kim sot sao lu
Tn
Dng tr v
M t
text
pg_stop_backup()
text
pg_switch_xlog()
text
pg_current_xlog_location()
text
pg_current_xlog_insert_location()
text
pg_xlogfile_name_offset(location text) text, integer Bin i chui v tr lu k giao dch thnh tn tp v phn b
thp phn byte trong tp
pg_xlogfile_name(location text)
text
chp nhn mt nhn ty do ngi s dng nh ngha cho sao lu. (Thng th
iu ny c th l tn theo tp dump sao lu s c lu tr). Hm vit mt tp nhn sao lu
(backup_label) vo th mc d liu ca b c s d liu , thc thi mt im kim tra, v sau
tr v cho vic khi u sao lu v tr lu k giao dch nh l vn bn. Ngi s dng c th b qua
pg_start_backup
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 273/372
Xut bn nm 2013
chuyn sang tp lu k giao dch tip sau, cho php tp hin hnh s c lu tr
(gi thit bn ang s dng vic lu tr lin tc). Gi tr tr v l v tr lu k giao dch kt thc +1
bn trong tp lu k giao dch va c hon tt. Nu cha tng c hot ng lu k giao dch no
k t s chuyn lu k giao dch cui cng, th pg_switch_xlog khng lm g c v tr v v tr ban
u tp lu k giao dch hin ang c s dng.
pg_switch_xlog
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 274/372
Xut bn nm 2013
Dng tr v
M t
pg_is_in_recovery() bool
pg_last_xlog_receiv text
e_location()
pg_last_xlog_replay text
_location()
Dng tr v
int
M t
S byte c s dng lu tr mt gi tr c bit (c th c nn)
pg_total_relation_size(regclass) bigint
pg_table_size(regclass)
bigint
pg_indexes_size(regclass)
bigint
pg_database_size(oid)
bigint
pg_database_size(name)
bigint
pg_tablespace_size(oid)
bigint
pg_tablespace_size(name)
bigint
pg_relation_size(relation
regclass, fork text)
bigint
pg_relation_size(relation
regclass)
bigint
pg_size_pretty(bigint)
text
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 275/372
Xut bn nm 2013
pg_column_size
chp nhn OID hoc tn ca mt bng hoc bng toast, v tr v tng khng
gian trn a c s dng cho bng , bao gm tt c cc ch s c lin quan. Hm ny l tng
ng vi pg_table_size + pg_indexes_size.
pg_total_relation_size
chp nhn OID hoc tn ca mt bng v tr v khng gian a cn thit cho bng ,
ngoi tr cc ch s. (Khng gian TOAST, bn khng gian t do, v bn trc quan bao gm).
pg_table_size
chp nhn OID hoc tn ca mt bng, ch s hoc bng toast, v tr v kch c trn
a theo cc byte. Vic ch nh main hoc ra i s th 2 tr v kch c ca r nhnh d liu
chnh ca quan h . Vic ch nh fsm tr v kch c ca Bn Khng gian T do (xem Phn
54.3) c lin quan ti quan h ny. Vic ch nh vm tr v kch c ca Bn Trc quan (xem
Phn 54.4) c lin quan ti quan h ny. Lu rng hm ny ch ra kch c ca ch mt r nhnh; v
hu ht cc mc ch l thun tin hn s dng cc hm mc cao hn pg_total_relation_size hoc
pg_table_size.
pg_relation_size
Dng tr v
M t
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 276/372
Xut bn nm 2013
Dng tr v
pg_ls_dir(dirname text)
setof text
M t
Lit k cc ni dung ca mt th mc
Tr v cc ni dung ca mt tp vn bn
pg_stat_file(filename text)
Tr v thng tin v mt tp
pg_ls_dir
record
tr v mt bn ghi cha kch thc tp, du thi gian c truy cp ln cui, du thi
gian c sa i ln cui, du thi gian thay i tnh trng tp ln cui (ch cho cc nn tng
Unix), du thi gian to tp (ch cho Windows), v mt boolean ch ra nu l mt th mc. Cc
s dng in hnh bao gm:
pg_stat_file
Dng tr v
M t
pg_advisory_lock(key bigint)
void
C c kha c vn c quyn
void
C c kha c vn c quyn
pg_advisory_lock_shared(key bigint)
void
C c kha c vn chia s
void
C c kha c vn chia s
pg_try_advisory_lock(key bigint)
boolean
boolean
pg_try_advisory_lock_shared(key bigint)
boolean
pg_advisory_unlock(key bigint)
boolean
a ra mt kha c vn c quyn
boolean
a ra mt kha c vn c quyn
pg_advisory_unlock_shared(key bigint)
boolean
a ra mt kha c vn chia s
boolean
a ra mt kha c vn chia s
pg_advisory_unlock_all()
void
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 277/372
Xut bn nm 2013
lm vic ht nh
mt kha chia s hn l kha c quyn.
pg_try_advisory_lock_shared
pg_try_advisory_lock,
ngoi tr l n c gng c c
pg_advisory_unlock_shared
chia s.
s a ra tt c cc kha c vn c phin hin hnh nm gi. (Hm ny
c triu gi ngm cui phin, thm ch nu my trm b kt ni mt cch t ngt).
pg_advisory_unlock_all
9.25. Hm Trigger
PostgreSQL hin hnh a ra mt xy dng trong hm trigger, suppress_redundant_updates_trigger,
n s ngn cn s cp nht m khng thc s thay i cc d liu trong hng khi vic chim ch,
ngc li vi hnh vi thng thng m lun thc hin cp nht bt k liu c hay khng cc d liu
thay i. (Hnh vi bnh thng ny lm cho cc cp nht chy nhanh hn, v khng c vic kim
tra no c yu cu, v cng l hu dng hn trong cc trng hp nht nh).
L tng, bn thng nn trnh chy cc cp nht khng thc s thay i cc d liu trong bn ghi.
Cc cp nht d tha c th ly i thi gian ng k khng cn thit, c bit nu c nhiu ch s
phi ty bin, v khng gian trong cc hng cht cui cng s phi c loi b. Tuy nhin, vic d
tm ra c cc tnh hung nh vy trong m ca khch hng khng phi lc no cng d dng,
hoc thm ch c th, v vic vit cc biu thc d tm ra chng c th b li. Mt la chn thay
th l hy s dng suppress_redundant_updates_trigger, n s b qua cc cp nht khng thay i d
liu. Tuy nhin, bn nn s dng ci ny cn thn. Trigger tn t thi gian m khng tm thng
cho tng bn ghi, v th nu hu ht cc bn ghi b nh hng v mt cp nht thc s c thay
i, th s dng trigger ny s thc s lm cho cp nht chy chm hn.
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 278/372
Xut bn nm 2013
Trong hu ht cc trng hp, bn c th mun s dng trigger ny cui cng cho tng hng. Nh
trong u rng cc trigger s dng theo trt t tn, bn c th sau chn mt tn trigger m i sau
tn ca bt k trigger no khc m bn c th c trong bng .
c thm thng tin v vic to cc trigger, hy xem CREATE TRIGGER.
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 279/372
Xut bn nm 2013
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 280/372
Xut bn nm 2013
Nn khng c chi ph thm trong trnh phn tch hoc trnh thc thi nu mt truy vn khng
cn bin i dng ngm nh. l, nu mt truy vn c hnh thnh tt v cc dng khp
c ri, th truy vn nn thc thi m khng mt thm thi gian trong trnh phn tch v
khng a ra cc li gi bin i ngm nh khng cn thit trong truy vn .
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 281/372
Xut bn nm 2013
10.2. Ton t
Ton t c bit c mt biu thc ton t tham chiu ti c xc nh bng vic s dng th tc
sau. Lu rng th tc ny gin tip c s u tin trc ca cc ton t c lin quan tc ng, v
iu s xc nh cc biu thc con no c ly lm cc u vo ca cc ton t no. Xem Phn
4.1.6 c thm thng tin.
Quyt nh dng ton t
1. Chn cc ton t s c xem xt t catalog h thng pg_operator. Nu mt tn ton t
khng iu kin v s tng c s dng (trng hp thng thng), th cc ton t
c xem xt l nhng ton t vi tn trng khp v tnh ton i s m nhn thy c
trong ng tm kim hin hnh (xem Phn 5.7.3). Nu mt tn ton t iu kin
c a ra, th ch cc ton t no trong s c ch nh s c xem xt.
a) Nu ng tm kim thy nhiu ton t vi cc dng i s ht nhau, th ch ton t no
xut hin sm nht trong ng c xem xt. Cc ton t vi cc dng i s khc
nhau s c xem xt ngang bng nhau bt k v tr ca ng tm kim.
2. Kim tra mt ton t chp nhn chnh xc cc dng i s u vo. Nu c mt ton t tn
ti (c th ch c mt ton t khp chnh xc trong tp hp cc ton t c xem xt), hy
s dng n.
a) Nu mt i s ca mt li gi ton t nh phn l dng cn cha c bit unknown, th
gi thit n l dng y ht nh i s khc cho kim tra ny. Cc li gi c lin quan ti 2
u vo unknown, hoc mt ton t duy nht vi mt u vo unknown, s khng bao gi
thy mt s trng khp bc ny.
3. Tm kim s trng khp tt nht
a) B cc ton t ng vin m i vi chng cc dng u vo khng khp v khng th
bin i c (bng vic s dng mt bin i ngm nh) khp. Cc hng unknown
s c gi thit l c kh nng bin i c sang bt k iu g v mc ch ny. Nu
ch c mt ng vin, th hy s dng n; nu khc th hy tip tc sang bc tip sau.
b) Chy qua tt c cc ng vin v gi li nhng ng vin no vi s trng khp chnh xc
nht cc dng u vo. (Cc min c xem xt y ht nh dng c bn ca chng v
mc ch ny). Hy gi li tt c cc ng vin nu khng c cc trng khp chnh xc.
Nu ch mt ng vin cn li, hy s dng n; nu khc, hy tip tc cc bc tip sau.
c) Chy qua tt c cc ng vin v gi li cc ng vin m chp nhn cc dng c u
tin (ca chng loi dng cc dng d liu u vo) trong hu ht cc v tr ni m bin
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 282/372
Xut bn nm 2013
V th trnh phn tch lm mt bin i dng trong ton hng v truy vn l tng ng vi:
SELECT CAST(40 AS bigint) ! AS "40 factorial";
Trong trng hp ny trnh phn tch tm xem liu c mt ton t ly text cho c 2 i s hay
khng. V l c, nn n gi thit rng i s th 2 s c din gii nh dng text.
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 283/372
Xut bn nm 2013
y h thng gii quyt mt cch ngm nh hng dng khng r nh dng float8 trc khi p
dng ton t c chn. Chng ta c th kim tra hp l rng float8 v mt s dng khng phi
khc tng c s dng:
SELECT @ -4.5e500 AS "abs";
ERROR: "-4.5e500" is out of range for type double precision
Mo: Khng th chn mt ton t ng vin tt nht. Bn c th cn thm cc cast dng ngm nh.
iu ny xy ra v h thng khng th quyt nh kh nng no trong vi kh nng cc ton t ~ s
c u tin. Chng ta c th gip n a ra vi mt cast ngm nh:
SELECT ~ CAST(20 AS int8) AS "negation";
negation
----------21
(1 row)
10.3. Hm
Hm c bit c mt li gi hm tham chiu ti c xc nh bng vic s dng th tc sau.
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 284/372
Xut bn nm 2013
Quyt nh dng hm
1. Chn cc hm s c xem xt t catalog h thng pg_proc. Nu mt tn hm iu kin
khng theo s tng c s dng, th cc hm c xem xt l cc hm vi tn trng
khp v tnh ton i s l trc quan trong ng tm kim hin hnh (xem Phn 5.7.3).
Nu mt tn hm iu kin tng c a ra, th ch cc hm trong s c ch nh
s c xem xt.
a) Nu ng tm kim thy nhiu hm cc dng i s y ht nhau, th ch hm no xut
hin trc nht trong ng s c xem xt. Cc hm cc dng i s khc nhau s
c xem xt trong c s ngang bng nhau bt k v tr ng tm kim.
b) Nu mt hm c khai bo vi mt tham s mng VARIADIC, v li gi khng s dng
t kha VARIADIC, th hm c i x nh th tham s mng b thay th bng
mt hoc nhiu trng hp dng phn t ca n, nh cn thit khp vi li gi. Sau
s m rng nh vy th hm c th c cc dng i s hiu qu ngang bng vi mt
s hm khng nhiu i s (nonvariadic). Trong trng hp hm xut hin sm hn
trong ng tm kim s c s dng, hoc nu 2 hm l trong cng y ht s , th
hm khng nhiu i s s c u tin.
c) Cc hm m c cc gi tr mc nh i vi cc tham s s c xem xt khp vi
bt k li gi no m lm m s 0 hoc nhiu v tr tham s c kh nng mc nh hn.
Nu hn mt hm nh vy khp vi mt li gi, th mt hm xut hin sm nht trong
ng tm kim s c s dng. Nu c 2 hoc nhiu hn cc hm nh vy trong s
y ht vi cc dng tham s ging ht nhau trong cc v tr khng phi l mc nh (c
kh nng nu chng c cc tp hp khc nhau cc tham s khng c kh nng mc
nh), th h thng s khng c kh nng xc nh hm no s u tin, v v th mt li
li gi hm m m s xy ra nu khng c s trng khp no tt hn cho li gi c
th c tm thy.
2. Hy kim tra mt hm chp nhn chnh xc cc dng i s u vo . Nu mt hm ang
tn ti (c th ch l mt s trng khp chnh xc trong tp hp cc hm c xem xt), th
hy s dng n. (Cc trng hp c lin quan ti unknown s khng bao gi thy mt s
trng khp bc ny).
3. Nu khng s trng khp chnh xc no c tm thy, hy xem liu li gi hm c xut
hin l mt yu cu bin i dng c bit hay khng. iu ny xy ra nu li gi hm
ch c mt i s v tn hm l y ht nh tn (ni b) ca mt s dng d liu. Hn
na, i s hm phi hoc l mt hng dng khng c bit, hoc mt dng m c th p
buc nh phn ti dng d liu c t tn, hoc mt dng m c th c bin i thnh
dng d liu c t tn bng vic p dng cc hm I/O dng ( l, bin i hoc l ti
hoc t mt trong nhng dng chui tiu chun). Khi cc iu kin c tha mn, th
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 285/372
Xut bn nm 2013
li gi hm c i x nh mt dng c t CAST1.
4. Tm kim s trng khp tt nht.
a) Hy loi b cc hm ng vin theo cc dng u vo khng trng khp v khng th
c bin i (bng vic s dng mt bin i ngm) trng khp. Cc hng unknown
s c gi thit c kh nng bin i c thnh bt k iu g cho mc ch ny. Nu
ch mt ng vin cn li, hy s dng n; nu khng hy tip tc bc tip sau.
b) Hy chy qua tt c cc ng vin v gi cc ng vin no c cc trng khp chnh xc
nht trong cc dng u vo. (Cc min s c xem xt y ht nh dng c bn ca
chng cho mc ch ny). Hy gi tt c cc ng vin nu khng ng vin no c cc
trng khp chnh xc. Nu ch mt ng vin cn li, hy s dng n; nu khng hy tip
tc bc tip sau.
c) Hy chy qua tt c cc ng vin v gi li cc ng vin no m chp nhn cc dng
c u tin (i vi chng loi dng cc dng d liu u vo) hu ht cc v tr ni
m s bin i dng s c yu cu. Hy gi tt c cc ng vin nu khng ng vin
no chp nhn cc dng c u tin. Nu ch mt ng vin cn li, hy s dng n; nu
khng, hy tip tc bc tip sau.
d) Nu bt k i s u vo no l unknown, hy kim tra cc chng loi dng c chp
nhn cc v tr i s bng vic gi li cc ng vin. Ti tng v tr, hy chn chng
loi chui string nu bt k ng vin no chp nhn chng loi . (Khuynh hng
hng ti chui ny l ph hp v mt hng dng khng bit trng ging nh mt
chui). Nu khng, nu tt c cc ng vin cn li chp nhn chng loi dng y ht, th
hy chn chng loi ; nu khng s hng v s la chn ng khng th c suy ra
m khng c manh mi no hn. By gi hy loi b cc ng vin m khng chp nhn
chng loi dng c chn. Hn na, nu bt k ng vin no chp nhn mt dng c
u tin trong chng loi , hy loi b cc ng vin m chp nhn cc dng khng
c u tin i vi i s .
e) Nu ch mt ng vin cn li, hy s dng n. Nu khng ng vin no hoc hn mt
ng vin cn li, th hng.
Lu rng cc qui tc trng khp tt nht l y nh nhau i vi quyt nh dng hm v
ton t. Mt s v d bn di.
V d 10-4. Quyt nh dng i s hm s lm trn
Ch c mt hm round c 2 i s; n ly i s u dng s numeric v i s th 2 dng s
nguyn integer. V th truy vn sau s t ng bin i i s u t dng integer thnh numeric:
SELECT round(4, 4);
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 286/372
Xut bn nm 2013
round
-------4.0000
(1 row)
numeric,
nn truy vn
Lu : Trnh phn tch hc t catalog pg_cast catalog rng text v varchar l tng thch nh
phn, ngha l mt th c th c truyn ti mt hm m chp nhn th khc m khng
lm bt k bin i vt l no. V th, khng li gi bin i dng no thc s c chn
vo trong trng hp ny.
V, nu hm c gi vi i s dng integer, th trnh phn tch s c bin i n thnh text:
SELECT substr(1234, 3);
ERROR: hm substr(integer, integer) khng tn ti
Gi : Khng hm no khp vi cc dng i s v tn c a ra. Bn c l cn b sung thm cc cast
dng r rng.
iu ny khng lm vic v integer khng c mt cast ngm cho text. Mt cast r rng s lm vic,
tuy nhin:
SELECT substr(CAST (1234 AS text), 3);
substr
-------34
(1 row)
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 287/372
Xut bn nm 2013
10.4. Lu gi tr
Cc gi tr c chn vo trong mt bng s c bin i sang dng d liu ca cc ct ch theo
cc bc sau.
Bin i dng lu gi tr
1. Kim tra mt s trng khp chnh xc vi ch.
2. Nu khng, c gng bin i biu thc thnh dng ch. iu ny s thnh cng nu c
mt cast c ng k gia 2 dng . Nu biu thc l mt hng dng khng c bit, th
cc ni dung ca chui hng s c a vo th tc bin i u vo i vi dng ch.
3. Kim tra xem nu c mt cast kch c cho dng ch. Mt cast kch c l mt cast t dng
ti bn thn n. Nu mt cast kch c c thy trong catalog pg_cast, hy p dng n
cho biu thc trc khi lu vo ct ch. Hm trin khai cho mt cast nh vy lun ly
mt tham s d tha dng integer, n nhn gi tr atttypmod ca ct ch (thng l di
c khai bo ca n, d s din gii atttypmod l khc nhau i vi cc dng d liu khc
nhau), v n c th ly mt tham s boolean m ni liu cast c l r rng hay n. Hm
cast c trch nhim v vic p dng bt k ng ngha ph thuc di no nh vic kim
tra kch c hoc ct ngn bt.
V d 10-6. Bin i dng lu character
i vi mt ct ch c khai bo nh l character(20) th lnh sau y ch ra rng gi tr c lu
c kch c ng:
CREATE TABLE vv (v character(20));
INSERT INTO vv SELECT abc || def;
SELECT v, octet_length(v) FROM vv;
v | octet_length
----------------------+-------------abcdef | 20
(1 row)
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 288/372
Xut bn nm 2013
truy vn thng nht. Cc cu trc INTERSECT v EXCEPT gii quyt cc dng khng tng t theo
cch y ht nh UNION. Cc cu trc CASE, ARRAY, VALUES, GREATEST v LEAST s dng thut ton ht
nh nhau khp cc biu thc thnh phn ca chng v chn mt dng d liu kt qu.
Quyt nh dng cho UNION, CASE v cc cu trc c lin quan
1. Nu tt c cc u vo l cng mt dng nh nhau, v n khng phi l unknown, hy gii
quyt nh dng . Nu khng, hy thay th bt k cc dng min no trong danh sch vi
cc dng c bn bn di ca chng.
2. Nu tt c cc u vo l dng unknown, hy gii quyt nh dng text (dng c u tin
ca chng loi chui). Nu khng cc u vo unknown s b b qua.
3.
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 289/372
Xut bn nm 2013
real
-----1
2.2
(2 rows)
y, v dng real khng th l mt cast n cho integer, nhng integer c th l cast n cho real, nn
dng kt qu lin on c gii quyt nh l real.
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 290/372
Xut bn nm 2013
Chng 11. Cc ch s
Cc ch s l mt cch ph bin ci thin hiu nng ca c s d liu. Mt ch s cho php my
ch c s d liu tm v truy xut cc hng c bit nhanh hn nhiu so vi n c th lm m
khng c mt ch s. Nhng cc ch s cng b sung thm chi ph tng vo h thng c s d liu
nh mt tng th, v th chng nn c s dng mt cch hp l.
Khng c chun b trc, h thng c th phi qut ton b bng test1, tng hng mt, tm tt c
cc khon trng khp. Nu c nhiu hng trong bng test1 v ch mt t hng (c th l 0 hoc 1)
m c th c tr v bng mt truy vn nh vy, th iu ny r rng l mt phng php khng
hiu qu. Nhng nu h thng tng c ra lnh phi duy tr mt ch s trong ct id, th n c th s
dng mt phng php hiu qu hn cho vic nh v cc hng trng khp. V d, n c th ch
phi i qua mt t mc su trong mt cy tm kim.
Mt tip cn tng t c s dng trong hu ht cc sch khng vin tng: cc khi nim v cc
khon m thng xuyn c cc c gi tra cu s c thu thp trong mt ch s theo vn abc
cui ca cun sch. c gi c quan tm c th qut ch s kh nhanh v lt sang (cc) trang
tng ng, thay v phi c ton b cun sch tm ra t liu quan tm. chnh l tc v ca tc
gi cho bit trc cc khon m cc c gi c kh nng s tra cu, chnh l tc v ca ngi
lp trnh c s d liu thy trc c cc ch s no s l hu dng.
Lnh sau y c th c s dng to ra mt ch s trong ct id, nh c tho lun:
CREATE INDEX test1_id_index ON test1 (id);
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 291/372
Xut bn nm 2013
11.2. Cc dng ch s
PostgreSQL a ra vi dng ch s: B-tree, Hash, GiST v GIN. Tng dng ch s s dng mt
thut ton khc nhau ph hp nht cho cc dng truy vn khc nhau. Mc nh, lnh CREATE INDEX
s to ra cc ch s B-tree, n ph hp vi hu ht cc tnh hung ph bin.
B-tree c th iu khin cc truy vn ngang bng nhau v theo dy trong cc d liu c th c
lu gi theo mt s trt t. c bit, trnh hoch nh truy vn ca PostgreSQL s xem xt s dng
mt ch s B-tree bt k khi no mt ct ch s c lin quan trong mt so snh bng vic s dng
mt trong cc ton t:
<
<=
=
>=
>
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 292/372
Xut bn nm 2013
Cc ch s Hash cng c th iu khin cc so snh ngang bng nhau n gin. Trnh hoch nh
truy vn s xem xt s dng mt ch s hash bt k khi no mt ct c nh ch s c lin quan
trong mt so snh bng vic s dng ton t =. Lnh sau y c s dng to mt ch s hash:
CREATE INDEX name ON table USING hash (column);
Ch
Cc hot ng ca ch s hash hin khng c ghi lu k WAL, nn cc ch s
hash c th cn phi c xy dng li vi REINDEX sau khi mt c s d liu hng
nu tng c nhng thay i khng c ghi. Hn na, cc thay i i vi cc ch
s hash s khng c nhn bn qua s nhn bn da vo tp hoc nn dng sau
sao lu c bn ban u, v th chng a ra cc cu tr li sai cho cc truy vn m
sau s dng chng. V cc l do , s dng ch s hash hin khng c
khuyn khch.
Cc ch s GiST khng phi l mt dng ch s duy nht, m l mt h tng trong nhiu chin
lc nh ch s c th c trin khai. Mt cch tng xng, cc ton t c bit vi chng mt
ch s GiST c th c s dng l khc nhau, ph thuc vo chin lc nh ch s (lp ton t).
Nh mt v d, phn phi tiu chun ca PostgreSQL bao gm cc lp ton t GiST cho vi dng
d liu a l 2 chiu, chng h tr cc truy vn c nh ch s bng vic s dng cc ton t :
<<
&<
&>
>>
<<|
&<|
|&>
|>>
@>
<@
~=
&&
(Xem Phn 9.11 v ngha ca cc ton t ). Nhiu lp ton t khc ca GiST l sn sng trong
b su tp contrib hoc nh cc d n ring r. c thm thng tin, xem Chng 52.
Cc ch s GIN l cc ch s nghch o, chng c th iu khin cc gi tr cha hn mt kha, cc
mng, v d th. Nh mt v d, phn phi PostgreSQL tiu chun bao gm cc lp ton t GIN cho
cc mng 1 chiu, chng h tr cc truy vn c nh ch s bng vic s dng cc ton t :
<@
@>
=
&&
(Xem Phn 9.17 v ngha ca cc ton t ). Nhiu lp ton t khc ca GIN l sn sng trong
b su tp contrib hoc nh cc d n ring bit. c thm thng tin, xem Chng 53.
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 293/372
Xut bn nm 2013
11.3. Cc ch s nhiu ct
Mt ch s c th c nh ngha trong hn 1 ct ca 1 bng. V d, nu bn c 1 bng dng ny:
CREATE TABLE test2 (
major int,
minor int,
name varchar
);
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 294/372
Xut bn nm 2013
11.4. Ch s v ORDER BY
B sung thm vo vic tm kim n gin cc hng s c tr v bng mt truy vn, mt ch s c
th c kh nng a chng ra theo mt trt t c sp xp. iu ny cho php mt c t ORDER
BY ca truy vn s c vinh danh m khng c mt bc sp xp ring r. i vi cc dng ch
s hin ang c PostgreSQL h tr, ch B-tree c th cho kt qu u ra c sp xp - cc dng
ch s khc tr v cc hng trng khp theo mt trt t khng xc nh, ph thuc vo s trin khai.
Trnh hoch nh s xem xt lm tha mn c t ORDER BY hoc bng vic qut mt ch s c sn
m khp c c t , hoc bng vic qut bng theo trt t vt l v tin hnh sp xp r rng.
i vi mt truy vn m i hi vic qut mt phn ln ca bng, th mt s sp xp r rng c kh
nng s l nhanh hn so vi vic s dng mt ch s v n i hi t I/O ca a hn v tun theo
mt mu truy cp tun t. Cc ch s l hu dng hn ch khi mt t hng cn phi c ly. Mt
trng hp c bit quan trng l ORDER BY trong s kt hp vi LIMIT n: mt s sp xp r rng s
phi x l tt c cc d liu nhn din n hng u tin, nhng nu c mt ch s trng khp vi
ORDER BY, th n hng u tin c th c truy xut trc tip, hon ton khng c vic qut phn
cn li.
Mc nh, cc ch s B-tree lu tr cc khon u vo ca chng theo trt t tng dn vi cc null
cui cng. iu ny c ngha l mt s qut tin ca mt ch s trong ct x to ra u ra tha mn
ORDER BY x (hoc mt cch chi tit, ORDER BY x ASC NULLS LAST ). Ch s cng c th c qut
ngc, to ra cc kt qu u ra tha mn ORDER BY x DESC (hoc mt cch chi tit hn, ORDER BY x
DESC NULLS FIRST, v NULLS FIRST l mc nh cho ORDER BY DESC).
Bn c th tinh chnh trt t ca mt ch s B-tree bng vic a vo cc la chn ASC, DESC, NULLS
FIRST, v/hoc NULLS LAST khi to ch s ; v d:
CREATE INDEX test2_info_nulls_low ON test2 (info NULLS FIRST);
CREATE INDEX test3_desc_index ON test3 (id DESC NULLS LAST);
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 295/372
Xut bn nm 2013
11.5. Kt hp nhiu ch s
Mt s qut ch s duy nht ch c th s dng cc mnh truy vn m s dng cc ct ch s vi
cc ton t ca lp ton t ca n c kt ni bng AND. V d, a ra mt ch s trn (a, b) th
mt ch s nh WHERE a = 5 AND b = 6 c th s dng ch s , nhng mt truy vn nh WHERE a
= 5 OR b = 6 c th khng trc tip s dng ch s .
May thay, PostgreSQL c kh nng kt hp nhiu ch s (bao gm nhiu s dng cng y ht ch s
) iu khin cc trng hp m khng th c trin khai bng cc s qut ch s duy nht.
H thng c th to thnh cc iu kin AND v OR khp vi s qut ch s. V d, mt truy vn
ging nh WHERE x = 42 OR x = 47 OR x = 53 OR x = 99 c th l c chia thnh 4 s qut ring
bit ca mt ch s trn x, mi s qut s dng mt trong cc mnh truy vn . Cc kt qu ca
cc s qut sau s c hoc (OR) cng nhau to ra kt qu . V d khc l nu chng ta
c cc ch s ring r trong x v y, th mt trin khai c kh nng ca mt truy vn ging nh
WHERE x = 5 AND y = 6 l s dng tng ch s vi mnh truy vn ng ph hp v sau v
(AND) cng nhau cc kt qu ch s nhn din cc hng kt qu.
kt hp nhiu ch s, h thng qut tng ch s cn thit v chun b mt bitmap trong b nh
trao cc v tr cc hng ca bng m s c nu nh l khp vi cc iu kin ca ch s . Cc
bitmap sau c v (AND) v c hoc (OR) cng vi nhau nh cn thit bng truy vn .
Cui cng, cc hng ca bng thc s c ving thm v c tr v. Cc hng ca bng c
ving thm theo trt t vt l, v l cch m bitmap c a ra; iu ny c ngha l bt k
trt t no ca cc ch s gc ban u l mt, v v th mt bc sp xp ring r s l cn thit nu
truy vn c mt mnh ORDER BY. V l do ny, v v tng s qut ch s b sung thm thi
gian d tha, m trnh hoch nh i khi s chn s dng mt s qut ch s n gin thm ch d
cc ch s b sung thm l c sn m c th cng tng c s dng.
Trong tt c ngoi tr cc ng dng n gin nht, c hng lot cc s kt hp cc ch s m c th
l hu dng, v lp trnh vin c s d liu phi la chn quyt nh cc ch s no s cung cp.
i khi cc ch s nhiu ct l tt nht, nhng i khi s l tt hn to ra cc ch s ring r v
da vo chc nng kt hp ch s. V d, nu ti cng vic ca bn bao gm mt s pha trn ca
cc truy vn m i khi ch lin quan ti ct x, i khi ch lin quan ti ct y, v i khi c 2 ct, th
bn c th chn to ra 2 ch s ring r cho x v y, da vo s kt hp cc ch s x l cc cu
hi m s dng c 2 ct . Bn cng c th to ra mt ch s nhiu ct ( x, y). Ch s ny thng c
th s hiu qu hn so vi s kt hp ch s cho cc truy vn c lin quan ti c 2 ct, m nh c
tho lun trong Phn 11.3, n c th hu nh l v dng i vi cc truy vn ch lin quan ti y, sao
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 296/372
Xut bn nm 2013
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 297/372
Xut bn nm 2013
th c th ng to ra mt ch s ging th ny:
CREATE INDEX people_names ON people ((first_name || || last_name));
C php ca lnh CREATE INDEX thng i hi vit cc du ngoc n xung quanh cc biu thc
ch s, nh c thy trong v d th 2. Cc du ngoc n c th c b qua nu biu thc ch
l mt li gi hm, nh trong v d u.
Cc biu thc ch s kh l t gi duy tr, v (cc) biu thc dn xut phi c tnh ton s
khng c tnh ton li trong qu trnh mt tm kim c nh ch s, v chng c lu tr ri
trong ch s . Trong c 2 v d trn, h thng coi truy vn ch nh WHERE indexedcolumn =
constant v v th tc ca tm kim l tng ng vi bt k truy vn ch s n gin no
khc. V th, cc ch s trong cc biu thc l hu dng khi tc c truy vn l quan trng hn so
vi tc chn v cp nht.
11.8. Ch s mt phn
Mt ch s mt phn (Partial Index) l mt ch s c xy dng qua mt tp con ca mt bng;
tp con c mt biu thc iu kin xc nh (c gi l thuc tnh ca ch s mt phn ).
Ch s bao gm cc khon u vo ch cho cc hng ca cc bng tha mn thuc tnh . Cc
ch s mt phn l mt chc nng chuyn bit, nhng c vi tnh hung theo chng l hu dng.
Mt l do chnh cho vic s dng mt ch s mt phn l trnh vic nh ch s cc gi tr ph
bin. V vic tm kim truy vn cho mt gi tr ph bin (mt gi tr m tnh ti hn mt t % ca tt
c cc hng ca bng) s khng s dng ch s , nn khng quan trng trong vic gi cc hng
trong ch s . iu ny lm gim kch c ca ch s, n s lm tng tc cc truy vn m s
dng ch s . N cng s tng tc nhiu hot ng cp nht bng v ch s khng cn phi
c cp nht trong tt c cc trng hp. V d 11-1 ch ra mt ng dng c th ca tng ny.
V d 11-1. Thit lp mt ch s mt phn loi tr cc gi tr ph bin
Gi s bn ang lu tr cc lu k truy cp my ch web trong mt c s d liu. Hu ht cc truy
cp xut pht t dy a ch IP ca t chc ca bn nhng mt s l t u khc (nh, cc nhn
vin trong cc kt ni quay s in thoi).
Nu cc tm kim IP ca bn ban u l cho cc truy cp bn ngoi, th bn c th khng cn nh
ch s dy IP tng ng vi on mng ca t chc ca bn.
Gi thit mt bng ging th ny:
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 298/372
Xut bn nm 2013
Mt truy vn c th s s dng ch s ny c th l:
SELECT * FROM orders WHERE billed is not true AND order_nr < 10000;
Tuy nhin, ch s cng c th c s dng trong cc truy vn khng lin quan ti order_nr, nh:
SELECT * FROM orders WHERE billed is not true AND amount > 5000.00;
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 299/372
Xut bn nm 2013
y l mt tip cn c bit hiu qu khi c t cc kim th thnh cng v nhiu kim th khng
thnh cng.
Cui cng, mt ch s mt phn cng c s dng ghi cc la chn k hoch truy vn ca h
thng. Hn na, cc tp hp d liu vi cc phn phi c bit c th lm cho h thng s dng
mt ch s khi n thc s khng nn. Trong trng hp ch s c th c thit lp sao cho n l
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 300/372
Xut bn nm 2013
khng sn sng i vi truy vn vi phm. Thng thng, PostgreSQL thc hin cc la chn hp l
v s dng ch s (nh, n trnh chng khi truy xut cc gi tr ph bin, nn v d trc thc s
ch tit kim kch c ca ch s, n khng c yu cu trnh s dng ch s), v cc la chn k
hoch khng ng mt cch hin nhin l l do cho mt bo co li.
Nh trong u rng vic thit lp mt ch s mt phn ch ra rng bn bit t nht nh nhiu trnh
hoch nh truy vn cng bit, c bit bn bit khi mt ch s c th c li. Vic hnh thnh tri thc
ny i hi kinh nghim v s hiu bit cch m cc ch s trong PostgreSQL lm vic. Trong hu
ht cc trng hp, u th ca mt ch s mt phn i vi mt ch s thng thng s l ti thiu.
Nhiu thng tin hn v cc ch s mt phn c th thy trong Trng hp cho cc ch s mt phn,
Vic nh ch s mt phn trong PostgreSQL: d n nghin cu, v cc ch s mt phn c khi
qut ha (phin bn c nm bt).
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 301/372
Xut bn nm 2013
Lun chy lnh ANALYZE trc tin. Lnh ny thu thp cc s liu thng k v phn phi
cc gi tr trong bng. Thng tin ny c yu cu nh gi s lng cc hng c mt
truy vn tr v, n l cn thit cho trnh hoch nh ch nh cc chi ph thc t cho tng
k hoch truy vn c kh nng. Thiu bt k s liu thng k thc t no, th mt s gi tr
mc nh s c gi thit, chng hu nh chc chn s l khng chnh xc. Vic kim tra s
s dng ch s ca mt ng dng m khng chy ANALYZE v th l mt l do b thiu. Xem
Phn 23.1.3 v Phn 23.1.5 c thm thng tin.
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 302/372
Xut bn nm 2013
S dng cc d liu thc t cho th im. Vic s dng cc d liu kim th cho vic thit
lp cc ch s s ni cho bn cc ch s no bn cn cho cc d liu kim th , m iu
l tt c.
c bit sng cn s dng cc tp hp d liu kim th rt nh. Trong khi vic la chn
1.000 trong s 100.000 hng c th l mt ng vin cho mt ch s, th vic la chn 1 trong
s 100 hng s kh l nh vy, v 100 hng c th ph hp trong mt trang a duy nht, v
khng c k hoch c th tun t chim c 1 trang a.
Cng thn trng khi ly cc d liu kim th, n thng c kh nng trnh c khi ng
dng cn cha nm trong sn xut. Cc gi tr l rt nh, hon ton ngu nhin, hoc c
chn vo theo trt t c sp xp s bp mo cc s liu thng k khi s phn phi m d
liu thc c th c.
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 303/372
Xut bn nm 2013
Khng c h tr ngn ng, thm ch cho ting Anh. Cc biu thc thng thng l khng
v chng khng th d dng iu khin cc t dn xut, nh, satisfies v satisfy. Bn c th
b qua cc ti liu m c cha satisfies, d bn c th mun tm chng khi tm kim satisfy.
C kh nng s dng OR tm nhiu dng c dn xut, nhng iu ny l nng n v d
b li (mt s t c th c vi ngn dn xut).
Chng khng a ra trt t (xp hng) cc kt qu tm kim, m lm cho chng khng hiu
qu khi hng ngn ti liu trng khp c tm thy.
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 304/372
Xut bn nm 2013
12.1.1. Ti liu l g?
Mt ti liu l n v tm kim trong mt h thng tm kim ton vn; v d, bi bo ca mt tp ch
hoc thng ip th in t. My tm kim vn bn phi c kh nng phn tch cc ti liu v lu
tr cc iu lin quan ca cc t vng (cc t kha) vi ti liu cha ca chng. Sau ny, cc iu
lin quan c s dng tm kim cc ti liu c cha cc t truy vn.
i vi cc tm kim trong PostgreSQL, mt ti liu thng l mt trng vn bn bn trong mt
hng ca mt bng c s d liu, hoc c th l mt s kt hp (s ghp) cc trng nh vy, c
th c lu tr trong vi bng hoc c c mt cch nng ng. Ni cch khc, mt ti liu c
th c xy dng t cc phn khc nhau cho vic nh ch s v n c th khng c lu tr
bt k u nh mt tng th. V d:
SELECT title || || author || || abstract || || body AS document
FROM messages
WHERE mid = 12;
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 305/372
Xut bn nm 2013
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 306/372
Xut bn nm 2013
tsvector @@ tsquery
tsquery @@ tsvector
text @@ tsquery
text @@ text
2 dng u ca cc dng trn chng ta thy ri. Vn bn dng text @@ tsquery l tng ng
vi to_tsvector(x) @@ y. Dng text @@ text l tng ng vi to_tsvector(x) @@ plainto_tsquery(y).
12.1.3. Cu hnh
Bn trn l tt c cc v d tm kim vn bn n gin. Nh c nu trc , chc nng tm kim
ton vn bao gm kh nng thc hin nhiu iu hn: b qua vic nh ch s cc t nht nh (cc
t cht), x l cc t ng ngha v s dng vic phn tch phc tp, nh, phn tch da vo nhiu
hn l ch khong trng. Chc nng ny c cc cu hnh tm kim vn bn kim sot. PostgreSQL
i vi cc cu hnh c nh ngha trc cho nhiu ngn ng, v bn c th d dng to cc cu
hnh ca ring bn. (lnh \dF ca psql ch ra tt c cc cu hnh c sn).
Trong qu trnh ci t mt cu hnh ph hp c la chn v default_text_search_config c
thit lp ph hp trong postgresql.conf. Nu bn ang s dng cu hnh tm kim vn bn y ht cho
ton b cm th bn c th s dng gi tr trong postgresql.conf. s dng cc cu hnh khc
thng qua cm nhng cu hnh y ht trong bt k mt c s d liu no, hy s dng ALTER
DATABASE ... SET. Nu khng, bn c th thit lp default_text_search_config trong tng phin.
Mi hm tm kim vn bn ph thuc vo mt cu hnh c mt i s ty chn regconfig, sao cho
cu hnh s s dng c th c ch nh mt cch r rng. default_text_search_config c s dng
ch khi i s ny b b qua.
lm cho n d dng hn xy dng cc cu hnh tm kim vn bn ty bin, mt cu hnh c
xy dng t cc i tng c s d liu n gin hn. C s tm kim vn bn ca PostgreSQL a
ra 4 dng i tng c s d liu c lin quan ti cu hnh:
Cc trnh phn tch tm kim vn bn chia cc ti liu thnh cc th token v phn loi tng
token (v d, nh cc t hoc cc s).
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 307/372
Xut bn nm 2013
12.2. Bng v ch s
Cc v d trong phn trc minh ha vic trng khp ton vn bng vic s dng cc chui hng
n gin. Phn ny ch ra cch tm cc d liu ca bng, s dng ty chn cc ch s.
create
SELECT title
FROM pgweb
WHERE to_tsvector(title || || body) @@ to_tsquery(create & table)
ORDER BY last_mod_date DESC
LIMIT 10;
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 308/372
Xut bn nm 2013
12.2.2. To ch s
Chng ta c th to mt ch s GIN (Phn 12.9) tng tc cc tm kim vn bn:
CREATE INDEX pgweb_idx ON pgweb USING gin(to_tsvector(english, body));
trong config_name l mt ct trong bng pgweb. iu ny cho php cc cu hnh c trn trong
cng ch s trong khi ghi li cu hnh no tng c s dng cho tng khon u vo ca ch s.
iu ny c th l hu dng, v d, nu s thu thp ti liu c cha cc ti liu trong cc ngn
ng khc. Mt ln na, cc truy vn c ngha s dng ch s phi c cu to thnh cc cm
t trng khp nhau, nh, WHERE to_tsvector(config_name, body) @@ a & b.
Cc ch s c th thm ch ghp ni cc ct:
CREATE INDEX pgweb_idx ON pgweb USING gin(to_tsvector(english, title || || body));
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 309/372
Xut bn nm 2013
tsvector
khng cha cc t a,
on,
hoc it, t
rats
tr
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 310/372
Xut bn nm 2013
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 311/372
Xut bn nm 2013
to_tsquery
--------------fat & rat
V d:
SELECT plainto_tsquery(english, The Fat Rats);
plainto_tsquery
----------------fat & rat
Lu rng plainto_tsquery khng th nhn bit c cc ton t Boolean, cc nhn trng s hoc
cc nhn khp tin t u vo ca n:
SELECT plainto_tsquery(english, The Fat & Rats:C);
plainto_tsquery
--------------------fat & rat & c
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 312/372
Xut bn nm 2013
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 313/372
Xut bn nm 2013
4 chia xp hng cho trung bnh khong cch hi ha gia cc m rng (iu ny ch c
trin khai vi ts_rank_cd)
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 314/372
|
|
|
|
|
|
|
|
Xut bn nm 2013
0.668123210574724
0.65655958650282
0.656301290640973
0.655172410958162
0.650072921219637
0.617195790024749
0.615384618911517
0.450010798361481
Nu mt chui options c ch nh th n phi bao gm mt danh sch tch bch nhau bng du
phy ca mt hoc nhiu cp option=value. Cc la chn sn sng l:
StartSel , StopSel:
MaxWords, MinWords:
ShortWord:
HighlightAll:
MaxFragments:
cc t c di ny hoc t hn s b b i u v cui ca mt u . Gi tr
mc nh l 3 loi b cc bi ting Anh ph bin.
c Boolean; nu l
qua 3 tham s i u.
true
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 315/372
FragmentDelimiter:
Xut bn nm 2013
chui ny.
Bt k la chn khng c ch nh no cng nhn cc mc nh :
StartSel=<b>, StopSel=</b>,
MaxWords=35, MinWords=15, ShortWord=3, HighlightAll=FALSE,
MaxFragments=0, FragmentDelimiter=" ... "
V d:
SELECT ts_headline(english,
The most common type of search
is to find all documents containing given query terms
and return them in order of their similarity to the
query.,
to_tsquery(query & similarity));
ts_headline
-----------------------------------------------------------containing given <b>query</b> terms
and return them in order of their <b>similarity</b> to the
<b>query</b>.
SELECT ts_headline(english,
The most common type of search
is to find all documents containing given query terms
and return them in order of their similarity to the
query.,
to_tsquery(query & similarity),
StartSel = <, StopSel = >);
ts_headline
------------------------------------------------------containing given <query> terms
and return them in order of their <similarity> to the
<query>.
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 316/372
Xut bn nm 2013
Tr v s t v c lu tr trong vector .
strip(vector tsvector) returns tsvector
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 317/372
Xut bn nm 2013
Tr v s kt hp OR ca 2 truy vn c a ra.
!! tsquery
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 318/372
Xut bn nm 2013
target
c thay th
Lu rng khi nhiu qui tc vit li c p dng theo cch ny, th trt t ng dng c th
l quan trng; nn trong thc t bn s mun truy vn ngun i vi ORDER BY mt vi kha
xp th t.
Hy xem xt mt v d khm ph v tr cuc sng thc. Chng ti s m rng truy vn
bng vic s dng cc qui tc vit li do bng dn dt:
supernovae
Vic vit li c th l chm khi c nhiu qui tc vit li, v n kim tra tng qui tc cho s trng
khp c kh nng. lc ra cc qui tc khng phi l ng vin r rng th chng ta c th s dng
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 319/372
Xut bn nm 2013
cc ton t ghp ni cho dng tsquery. Trong v d bn di, chng ta ch chn cc qui tc no c
th trng khp vi truy vn ban u:
SELECT ts_rewrite(a & b::tsquery,
SELECT t,s FROM aliases WHERE a & b::tsquery @> t);
ts_rewrite
-----------b & c
title
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 320/372
Xut bn nm 2013
- gi tr ca mt t v
word text
ndoc integer
nentry integer
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 321/372
Xut bn nm 2013
pg_catalog.default.
M t
V d
asciiword
T, tt c cc k t ASCII
elephant
word
T, tt c cc k t
maana
numword
T, cc k t v ch s
beta1
asciihword
T ni, tt c ASCII
up-to-date
hword
T ni, tt c cc k t
lgico-matemtica
numhword
T ni, cc k t v ch s
postgresql-beta1
hword_part
Phn ca t ni, tt c cc k t
hword_numpart
Phn ca t ni, cc k t v ch s
a ch th in t
foo@example.com
protocol
u ca giao thc
http://
url
URL
example.com/stuff/index.html
host
Host
example.com
url_path
ng dn URL
file
Tp hoc tn ng dn
sfloat
K hiu khoa hc
-1.234e56
float
-1.234
int
S nguyn c k
-1234
uint
S nguyn khng c k
1234
version
S phin bn
8.3.0
tag
Th XML
<a href="dictionaries.html">
entity
Thc th XML
&
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 322/372
Xut bn nm 2013
Hnh vi ny l mong mun v n cho php cc tm kim lm vic cho c ton b t t hp v cho
cc thnh phn. y l v d trc quan khc:
SELECT alias, description, token FROM ts_debug(http://example.com/stuff/index.html);
alias
| description
| token
---------------------+--------------------+-----------------------------------------protocol
| Protocol head | http://
url
| URL
| example.com/stuff/index.html
host
| Host
| example.com
url_path
| URL path
| /stuff/index.html
12.6. T in
Cc t in c s dng loi b cc t s khng c xem xt trong mt tm kim ( cc t
cht), v bnh thng ha cc t sao cho cc dng dn xut khc nhau ca t y ht s khp. Mt
t c bnh thng ha thnh cng c gi l mt t v. Ngoi vic ci thin cht lng tm
kim, s bnh thng ha v loi b cc t cht lm gim kch c ca i din tsvector ca mt ti
liu, v th ci thin c hiu nng. Bnh thng ha khng lun c ngha v ngn ng hc v
thng ph thuc vo ng ngha ca ng dng.
Mt s v d ca s bnh thng ha:
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 323/372
Xut bn nm 2013
red, green, blue,
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 324/372
Xut bn nm 2013
12.6.1. T cht
Cc t cht l cc t rt ph bin, xut hin trong hu ht tng ti liu, v khng c gi tr phn
bit. V th, chng c th b b qua trong ng cnh ca tm kim ton vn. V d, mi vn bn ting
Anh u c cc t nh a v the, nn l v dng lu tr chng trong mt ch s. Tuy nhin, cc t
cht nh hng ti cc v tr trong tsvector, ti lt n nh hng ti vic xp hng:
SELECT to_tsvector(english,in the list of stop words);
to_tsvector
---------------------------list:3 stop:5 word:6
12.6.2. T in n gin
Mu template t in simple vn hnh bng vic bin i th u vo sang ch thng v kim tra
n i vi mt tp cc t cht. Nu n c thy trong tp th sau mt mng rng c tr
v, lm cho th token s b hy b. Nu khng, dng ch thng ca t c tr v nh l t
v c bnh thng ha. Nh mt la chn, t in c th c thit lp cu hnh nu cc t
khng cht nh khng c nhn bit, cho php chng c truyn qua ti t in tip sau trong
danh sch.
y l mt v d nh ngha mt t in bng vic s dng mu template simple:
CREATE TEXT SEARCH DICTIONARY public.simple_dict (
TEMPLATE = pg_catalog.simple,
STOPWORDS = english
);
y,
l tn c bn ca mt tp cc t cht. Tn y ca tp s l
$SHAREDIR/tsearch_data/english.stop, trong $SHAREDIR c ngha l th mc d liu c chia s
english
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 325/372
Xut bn nm 2013
Ch
Thng thng, mt phin c s d liu s c tp cu hnh ca mt th mc ch
mt ln, khi n ln u tin c s dng trong phin . Nu bn sa i mt tp
cu hnh v mun p cc phin ang tn ti chn cc ni dung mi , hy a ra
mt lnh ALTER TEXT SEARCH DICTIONARY trong t in . iu ny c th l mt cp
nht gi to thc s khng lm thay i bt k gi tr tham s no.
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 326/372
Xut bn nm 2013
12.6.3. T in t ng ngha
Mu template t in ny c s dng to ra cc t in thay th cho mt t bng mt t ng
ngha. Cc cm t khng c h tr (s dng mu template t in ng ngha (Phn 12.6.4) cho
iu ). Mt t in cc t ng ngha c th c s dng khc phc cc vn v ngn ng,
v d, ngn nga mt t in cng ting Anh khi vic lm gim t 'Paris' thnh 'pari'. c
mt dng Paris paris trong t in ng ngha v t n trc t in english_stem. V d:
SELECT * FROM ts_debug(english, Paris);
alias
| description
| token | dictionaries
| dictionary
| lexemes
---------------------+--------------------+--------+----------------------+-------------------+------------asciiword
| Word, all ASCII | Paris | {english_stem} | english_stem | {pari}
CREATE TEXT SEARCH DICTIONARY my_synonym (
TEMPLATE = synonym,
SYNONYMS = my_synonyms
);
ALTER TEXT SEARCH CONFIGURATION english
ALTER MAPPING FOR asciiword
WITH my_synonym, english_stem;
SELECT * FROM ts_debug(english, Paris);
alias
| description
| token | dictionaries
| dictionary
| lexemes
---------------------+-------------------- +-------- +----------------------------------------- +------------------- +-----------asciiword
| Word, all ASCII | Paris | {my_synonym,english_stem} | my_synonym | {paris}
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 327/372
Xut bn nm 2013
Ri chng ta s c cc kt qu ny:
mydb=# CREATE TEXT SEARCH DICTIONARY syn (template=synonym, synonyms=synonym_sample);
mydb=# SELECT ts_lexize(syn,indices);
ts_lexize
----------{index}
(1 row)
mydb=# CREATE TEXT SEARCH CONFIGURATION tst (copy=simple);
mydb=# ALTER TEXT SEARCH CONFIGURATION tst ALTER MAPPING FOR asciiword WITH syn;
mydb=# SELECT to_tsvector(tst,indices);
to_tsvector
------------index:1
(1 row)
mydb=# SELECT to_tsquery(tst,indices);
to_tsquery
-----------index:*
(1 row)
mydb=# SELECT indexes are very useful::tsvector;
tsvector
--------------------------------are indexes useful very
(1 row)
mydb=# SELECT indexes are very useful::tsvector @@ to_tsquery(tst,indices);
?column?
---------t
(1 row)
12.6.4. T in t ng ngha
Mt t in t ng ngha (i khi vit tt nh l TZ) l mt tp hp cc t m bao gm thng tin
v cc mi quan h ca cc t hoc cc cm t, nh, cc khon rng ln hn BT (broader terms),
cc khon thu hp hn NT (narrower terms), cc khon c u tin, cc khon khng c u
tin, cc khon c lin quan,
V c bn mt t in t ng ngha thay th cho tt c cc khon khng c u tin bng mt
khon c u tin v, nh mt ty chn, cng gi li cc khon gc cho vic nh ch s. Trin
khai hin hnh ca PostgreSQL t in t ng ngha l mt s m rng ca t in ng ngha vi
s h tr cc cm t c b sung thm vo. Mt t in t ng ngha i hi mt tp cu hnh c
nh dng sau:
# this is a comment
sample word(s) : indexed word(s)
more sample word(s) : more indexed word(s)
...
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 328/372
Xut bn nm 2013
khp vi a one the two v the one a two; c 2 c th c thay th bng swsw.
V mt t in cc t ng ngha c kh nng nhn bit c cc cm t m n phi nh tnh trng
ca n v tng tc vi trnh phn tch. Mt t in t ng ngha s dng cc ch nh kim
tra liu n c nn iu khin t tip sau hay dng s tch ly. T in t ng ngha phi c thit
lp cu hnh mt cch thn trng. V d, nu t in t ng ngha c ch nh iu khin ch
th token asciiword, th mt nh ngha t in t ng ngha ging nh one 7 s khng lm vic v
dng th token uint khng c ch nh cho t in t ng ngha .
Ch
Cc t in ng ngha c s dng trong qu trnh nh ch s nn bt k s
thay i no trong cc tham s t in t ng ngha i hi vic nh ch s
li. i vi hu ht cc dng t in khc, nhng thay i nh nh vic thm hoc
bt cc t cht khng buc phi nh ch s li.
y:
thesaurus_simple
l tn t in mi
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 329/372
Xut bn nm 2013
mythesaurus
pg_catalog.english_stem
thesaurus_simple
vi cc dng th token
12.6.4.2. V d v t in t ng ngha
thesaurus_astro,
n bao gm mt s kt
supernovae stars : sn
crab nebulae : crab
By gi chng ta c th thy cch m n lm vic. ts_lexize l khng tht hu dng cho vic kim
th mt t in ng ngha, v n i x vi u vo ca n nh mt th token duy nht. Thay vo
chng ta c th s dng plainto_tsquery v to_tsvector m chng s chia cc chui u vo ca
chng thnh nhiu th token:
SELECT plainto_tsquery(supernova star);
plainto_tsquery
----------------sn
SELECT to_tsvector(supernova star);
to_tsvector
------------sn:1
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 330/372
Xut bn nm 2013
to_tsquery
-----------sn
Lu rng supernova star trng khp vi supernovae stars trong thesaurus_astro v chng ta ch
nh t in cng english_stem trong nh ngha ca t in t ng ngha. Cng b i e v s.
nh ch s cc cm t gc cng nh cc thay th, ch cn a n vo phn bn tay phi ca
nh ngha :
supernovae stars : sn supernovae stars
SELECT plainto_tsquery(supernova star);
plainto_tsquery
----------------------------sn & supernova & star
12.6.5. T in Ispell
Mu template ca t in Ispell h tr cc t in hnh thi hc, n c th bnh thng ha nhiu
dng ngn ng khc nhau ca mt t thnh t v y ht. V d, mt t in Ispell ting Anh c th
khp vi tt c cc bin cch v cc kt hp ca khon tm kim bank, nh, banking, banked, banks,
banks, v banks.
Phn phi PostgreSQL tiu chun khng bao gm bt k tp cu hnh Ispell no. Cc t in cho
mt s lng ln cc ngn ng l sn sng t Ispell 1. Hn na, mt s nh dng tp th mc hin
i hn c h tr - MySpell 2 (OO < 2.0.1) v Hunspell 3 (OO >= 2.0.2). Mt danh sch cc t
in l sn sng trn OpenOffice Wiki4.
to mt t in Ispell, hy s dng mu c xy dng sn ispell v ch nh vi tham s:
CREATE TEXT SEARCH DICTIONARY english_ispell (
TEMPLATE = ispell,
DictFile = english,
AffFile = english,
StopWords = english
);
http://ficus-www.cs.ucla.edu/geoff/ispell.html
http://en.wikipedia.org/wiki/MySpell
http://sourceforge.net/projects/hunspell/
http://wiki.services.openoffice.org/wiki/Dictionaries
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 331/372
Xut bn nm 2013
compoundwords controlled z
12.7. V d cu hnh
Mt cu hnh tm kim vn bn ch nh tt c cc la chn cn thit bin mt ti liu thnh mt
tsvector: trnh phn tch s s dng chia vn bn thnh cc th token, v cc t in s s dng
bin tng th token thnh mt t v. Tng li gi ca to_tsvector hoc to_tsquery cn 1 cu hnh
tm kim vn bn thc hin vic x l ca n. Tham s cu hnh default_text_search_config ch
nh tn ca cu hnh mc nh, n l cu hnh c cc hm tm kim vn bn s dng nu mt
tham s cu hnh r rng b b qua. N c th c thit lp trong postgresql.conf, hoc c thit
lp cho mt phin ring r bng vic s dng lnh SET.
Vi cu hnh tm kim vn bn c nh ngha sn trc l sn sng, v bn c th to ra cc cu
hnh ty bin mt cch d dng. to thun li cho qun l cc i tng tm kim vn bn, mt
tp hp cc lnh SQL l sn sng, v c vi lnh psql hin th thng tin v cc i tng tm kim
5
http://snowball.tartarus.org
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 332/372
Xut bn nm 2013
vn bn (Phn 12.10).
Nh mt v d, chng ta s to ra mt cu hnh
dng sn english:
pg,
Bc tip sau l thit lp phin s dng cu hnh mi, n tng c to ra trong s public:
=> \dF
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 333/372
Xut bn nm 2013
SET
SHOW default_text_search_config;
default_text_search_config
---------------------------public.pg
tr v mt hng cho tng th token c trnh phn tch nhn din trong vn bn. Cc ct
c tr v l
ts_debug
alias text
description text
token text
dictionaries regdictionary[]
dictionary regdictionary
lexemes text[]
- m t dng th token
- vn bn ca th token
- cc th mc c cu hnh chn cho dng th token
y l mt v d n gin:
SELECT * FROM ts_debug(english,a fat cat sat on a mat - it ate a fat rats);
alias
| description
| token | dictionaries
| dictionary
| lexemes
---------------------+------------------------------+---------+----------------------+-------------------+------------asciiword
| Word, all ASCII
|a
| {english_stem} | english_stem | {}
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 334/372
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Space symbols
Word, all ASCII
Space symbols
Word, all ASCII
Space symbols
Word, all ASCII
Space symbols
Word, all ASCII
Space symbols
Word, all ASCII
Space symbols
Word, all ASCII
Space symbols
Space symbols
Word, all ASCII
Space symbols
Word, all ASCII
Space symbols
Word, all ASCII
Space symbols
Word, all ASCII
Space symbols
Word, all ASCII
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
fat
cat
sat
on
a
mat
it
ate
a
fat
rats
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{}
{english_stem}
{}
{english_stem}
{}
{english_stem}
{}
{english_stem}
{}
{english_stem}
{}
{english_stem}
{}
{}
{english_stem}
{}
{english_stem}
{}
{english_stem}
{}
{english_stem}
{}
{english_stem}
Xut bn nm 2013
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
english_stem |
|
english_stem |
|
english_stem |
|
english_stem |
|
english_stem |
|
english_stem |
|
|
english_stem |
|
english_stem |
|
english_stem |
|
english_stem |
|
english_stem |
{fat}
{cat}
{sat}
{}
{}
{mat}
{}
{ate}
{}
{fat}
{rat}
public.english
v t in Ispell
Trong v d ny, t Brightest c trnh phn tch nhn ra nh l mt t ASCII (tn hiu
asciiword). i vi dng th token ny th danh sch cc t in l english_ispell v english_stem. T
c english_ispell nhn ra, n lm gim t xung thnh danh t bright. T supernovaes
khng c t in english_ispell nhn ra nn n c truyn ti t in tip sau, v, may thay,
c nhn ra (trong thc t, english_stem l mt t in bng tuyt m nhn ra c mi iu; iu
gii thch v sao n c t cui ca danh sch cc t in).
T
The
c t in
english_ispell
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 335/372
Xut bn nm 2013
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 336/372
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
version
hword_numpart
hword_part
hword_asciipart
blank
tag
protocol
numhword
asciihword
hword
url_path
file
float
int
uint
entity
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Xut bn nm 2013
Version number
Hyphenated word part, letters and digits
Hyphenated word part, all letters
Hyphenated word part, all ASCII
Space symbols
XML tag
Protocol head
Hyphenated word, letters and digits
Hyphenated word, all ASCII
Hyphenated word, all letters
URL path
File or path name
Decimal notation
Signed integer
Unsigned integer
XML entity
12.8.3. Kim th t in
Hm ts_lexize to thun li cho kim th t in.
ts_lexize(dict regdictionary, token text) returns text[]
text.
y l mt trng
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 337/372
Xut bn nm 2013
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 338/372
Xut bn nm 2013
Nh mt qui tc ngn tay ci, cc ch s GIN l tt nht cho cc d liu tnh v cc tra cu l nhanh
hn. i vi cc d liu ng, cc ch s GiST l nhanh hn cp nht. c bit, cc ch s GiST
rt tt cho cc d liu ng v nhanh nu s lng cc t duy nht (cc t v) t hn 100.000, trong
khi cc ch s GIN s iu khin 100.000 + cc t v tt hn nhng cp nht s chm hn.
Lu rng thi gian xy dng ch s GNI thng c th c ci thin bng vic gia tng
maintenance_work_mem, trong khi thi gian xy dng ch s GiST l khng ph thuc vo tham
s .
Vic phn vng ca cc b su tp ln v s dng ng ph hp cc ch s GiST v GIN cho php
s trin khai cc tm kim rt nhanh vi cp nht trc tuyn. Vic phn vng c th c thc hin
mc c s d liu bng vic s dng di sn ca bng, hoc bng vic phn phi cc ti liu qua
cc my ch v vic thu thp cc kt qu tm kim bng vic s dng module m rng
contrib/dblink. Ci sau l c kh nng v cc hm xp hng ch s dng thng tin cc b.
12.10. H tr psql
Thng tin v cc i tng cu hnh tm kim vn bn c th c c trong psql bng vic s dng
mt tp hp cc lnh:
\dF{d,p,t}[+] [PATTERN]
Cc lnh sn sng l:
\dF[+] [PATTERN]
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 339/372
Xut bn nm 2013
Lit k cc th mc tm kim vn bn
Schema
| Name
| Description
---------------+--------------------------+-----------------------------------------------------------------------------------pg_catalog | danish_stem
| snowball stemmer for danish language
pg_catalog | dutch_stem
| snowball stemmer for dutch language
pg_catalog | english_stem
| snowball stemmer for english language
pg_catalog | finnish_stem
| snowball stemmer for finnish language
pg_catalog | french_stem
| snowball stemmer for french language
pg_catalog | german_stem
| snowball stemmer for german language
pg_catalog | hungarian_stem | snowball stemmer for hungarian language
pg_catalog | italian_stem
| snowball stemmer for italian language
pg_catalog | norwegian_stem | snowball stemmer for norwegian language
pg_catalog | portuguese_stem | snowball stemmer for portuguese language
pg_catalog | romanian_stem
| snowball stemmer for romanian language
pg_catalog | russian_stem
| snowball stemmer for russian language
pg_catalog | simple
| simple dictionary: just lower case and check for stopword
pg_catalog | spanish_stem
| snowball stemmer for spanish language
pg_catalog | swedish_stem
| snowball stemmer for swedish language
pg_catalog | turkish_stem
| snowball stemmer for turkish language
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 340/372
Xut bn nm 2013
\dFp[+] [PATTERN]
Lit k cc trnh phn tch tm kim vn bn (b sung + nhiu chi tit hn)
=> \dFp
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 341/372
Xut bn nm 2013
Schema
| Name
| Description
---------------+---------------+------------------------------------------------------------------------------------pg_catalog | ispell
| ispell dictionary
pg_catalog | simple
| simple dictionary: just lower case and check for stopword
pg_catalog | snowball | snowball stemmer
pg_catalog | synonym | synonym dictionary: replace word by its synonym
pg_catalog | thesaurus | thesaurus dictionary: phrase by phrase substitution
12.11. Hn ch
Cc hn ch hin hnh ca cc chc nng tm kim vn bn ca PostgreSQL l:
so snh, ti liu ca PostgreSQL 8.1 cha 10.441 t duy nht, tng s 335.420 t, v t thng
xuyn nht postgresql c nhc ti 6.127 ln trong 655 ti liu.
Mt v d khc - ti liu ca PostgreSQL 8.1 c cha 910.989 t duy nht vi 57.491.343 t v
trong 461.020 thng ip.
Thit lp cu hnh tm kim vn bn hon ton l khc by gi. Thay v vic chn bng tay
cc hng vo cc bng cu hnh, th s tm kim c cu hnh thng qua cc lnh SQL
c chuyn mn ha c ch ra trc trong chng ny. Khng c s h tr t ng
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 342/372
Xut bn nm 2013
cho vic bin i mt cu hnh ty bin ang tn ti cho phin bn 8.3; t bn c ca ring
bn y.
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 343/372
Xut bn nm 2013
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 344/372
Xut bn nm 2013
c ma
Mt giao dch thc hin li mt truy vn tr v mt tp hp cc hng lm tha mn mt iu
kin tm kim v thy rng tp hp cc hng lm tha mn iu kin thay i v giao
dch c thc hin gn y.
4 mc cch li giao dch v cc hnh vi tng ng c m t trong Bng 13-1.
Bng 13-1. Cc mc cch li giao dch SQL
Mc cch li
c bn
c khng lp li
c ma
Possible - C th
Possible - C th
Possible - C th
Possible - C th
Repeatable read - c lp li
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 345/372
Xut bn nm 2013
trong vic tm kim cc hng ch: chng s ch tm cc hng ch m c thc hin ti thi
im bt u ca lnh . Tuy nhin, mt hng ch nh vy c th c cp nht ri (hoc c
xa hoc b kha) v mt giao dch ng thi khc vo thi im n c tm thy. Trong trng
hp ny, vic cp nht c th s ch cho giao dch cp nht u tin thc hin xong hoc quay li
(nu n vn cn din ra). Nu vic cp nht u tin quay li, th cc tc ng ca n b ph nh v
vic cp nht th 2 c th tin hnh vi vic cp nht cho hng ban u c tm thy. Nu vic cp
nht u tin thc hin, th vic cp nht th 2 s b qua hng nu vic cp nht u tin xa
n, nu khng th n s c p dng hnh ng ca n cho phin bn c cp nht ca hng .
iu kin tm kim ca lnh (mnh WHERE) c nh gi li xem liu phin bn c cp
nht ca hng cn trng khp vi iu kin tm kim hay khng. Nu c, th vic cp nht th 2
tin hnh hot ng ca n bng vic s dng phin bn c cp nht ca hng . Trong trng
hp cc lnh SELECT FOR UPDATE v SELECT FOR SHARE, iu ny c ngha l phin bn c cp
nht ca hng b kha v c tr v cho my trm.
V qui tc trn, c kh nng cho mt lnh cp nht xem mt hnh chp khng nht qun: n c th
xem cc tc ng ca cc lnh cp nht ng thi ln cc hng y ht m n ang c gng cp nht,
nhng n khng xem cc tc ng ca cc lnh ln cc hng khc trong c s d liu. Hnh vi
ny lm cho ch c thc hin c khng ph hp vi cc lnh c lin quan vi cc iu kin
tm kim phc tp; tuy nhin, iu l ng cho cc trng hp n gin hn. V d, hy cn
nhc vic cp nht cc bng cn i ngn hng vi cc giao dch nh:
BEGIN;
UPDATE accounts SET balance = balance + 100.00 WHERE acctnum = 12345;
UPDATE accounts SET balance = balance - 100.00 WHERE acctnum = 7534;
COMMIT;
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 346/372
Xut bn nm 2013
tc ng ca giao dch ng thi c thc hin trong bt k trng hp no. im mu cht trong
vn trn l liu c hay khng mt lnh duy nht thy mt kiu nhn nht qun tuyt i c s
d liu .
S cch li giao dch mt phn c ch c thc hin c cung cp l ph hp cho nhiu ng
dng, v ch ny l nhanh v n gin s dng; tuy nhin, n l khng cho tt c cc
trng hp. Cc ng dng m thc hin cc truy vn v cc cp nht phc tp c th i hi mt
kiu nhn nht qun cht ch ca c s d liu hn l ch c thc hin c a ra.
v mt giao dch tun t khng th sa hoc kha cc hng b cc giao dch khc lm thay i sau
khi giao dch tun t bt u.
Khi mt ng dng nhn c thng ip li ny, n s hy b giao dch hin hnh v th li ton
b giao dch t u. Ln th 2 tri qua, giao dch s thy s thay i c thc hin ri trc
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 347/372
Xut bn nm 2013
ngha trc quan (v nh ngha ton hc) ca s thc thi tun t l bt k 2 giao dch ng thi
c thc hin thnh cng no cng s dng nh s phi thc thi tun t mt cch cht ch, ci
ny sau ci kia - d ci no xy ra trc u c th khng on trc c trc . iu ny quan
trng nhn thc c rng vic cm cc hnh vi khng mong mun c lit k trong Bng 13-1
l khng m bo tnh tun t ng, v trong thc t ch tun t c ca PostgreSQL
khng m bo s thc thi c th tun t c theo ngha ny. Nh mt v d, hy cn nhc mt
bng mytab, ban u bao gm:
class | value
-------+------1 | 10
1 | 20
2 | 100
2 | 200
v sau chn kt qu (30) l value vo 1 hng vi class = 2. ng thi, giao dch tun t B tnh:
SELECT SUM(value) FROM mytab WHERE class = 2;
v c kt qu 300, m n chn vo mt hng vi class = 1. Sau c 2 giao dch thc hin xong.
Khng hnh vi khng mong mun no c lit k xy ra, vng chng ta c mt kt qu c th
khng xy ra trong c trt t mt cch tun t. Nu A thc thi trc B, th B c th tnh
tng 330, ch khng phi l 300, v tng t trt t khc c th dn ti mt tng s khc c A
tnh ton.
m bo tnh tun t ton hc ng, cn thit i vi mt h thng c s d liu p tun th
vic kha ui, n c ngha l mt giao dch khng th chn hoc sa i mt hng m c th
trng khp iu kin WHERE ca mt truy vn trong giao dch ng thi khc. V d, mt khi giao
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 348/372
Xut bn nm 2013
dch A thc thi truy vn SELECT ... WHERE class = 1, th mt h thng kha ui c th cm giao
dch B chn bt k hng mi no vi class = 1 cho ti khi A thc hin xong 1. Mt h thng kha
nh vy l phc tp trin khai v cc k t trong thc thi, v tng phin phi nhn thc c
cc chi tit ca tng truy vn c tng giao dch ng thi thc thi. V chi ph ln ny hu ht l
ph phm, v trong thc t hu ht cc ng dng khng tin hnh sp xp nhng th m c th gy
ra cc vn . (Chc chn v d trn l c t ra v c l khng i din cho phn mm thc t).
V cc l do , PostgreSQL khng trin khai kha ui.
Trong cc trng hp ni m kh nng thc thi khng tun t l mt mi nguy c thc, th cc vn
c th c ngn chn bng vic s dng kha c quyn ph hp. Tho lun tip trong cc
phn tip sau.
V c bn, mt h thng kha ui ngn chn cc c ma bng vic hn ch nhng g c vit, trong khi MVCC
ngn chn chng bng vic hn ch nhng g c c.
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 349/372
Xut bn nm 2013
Cc ch kha mc bng
ACCESS SHARE
Xung t vi cc ch kha
EXCLUSIVE.
ACCESS
Xung t vi cc ch kha
ACCESS EXCLUSIVE.
Ch ny ch cho php
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 350/372
Xut bn nm 2013
Xung t vi cc kha ca tt c cc ch
v ACCESS EXCLUSIVE.
Ch ny m bo rng ngi nm gi l giao dch duy nht truy cp c bng theo bt
k cch g.
SHARE UPDATE EXCLUSIVE, SHARE, SHARE ROW EXCLUSIVE, EXCLUSIVE,
C c bng cc lnh ALTER TABLE, DROP TABLE, TRUNCATE, REINDEX, CLUSTER, v VACUUM
FULL. y cng l ch kha mc nh cho cc lnh LOCK TABLE m khng ch nh mt
ch r rng.
Mo: Ch khi ACCESS EXCLUSIVE kha mt lnh SELECT (khng c FOR UPDATE/SHARE).
Mt khi c c, mt kha thng c gi cho ti khi kt thc giao dch. Nhng nu mt kha c
c sau vic thit lp mt im an ton, th kha c nh ra ngay lp tc nu im an ton
c quay li. iu ny l nht qun vi nguyn tc rng ROLLBACK hon tt c cc tc ng ca
cc lnh k t im an ton. iu y ht gi cho cc kha c c bn trong mt khi ngoi l
PL/pgSQL: mt li thot khi khi nh ra cc kha c c bn trong n.
Bng 13-2. Cc ch kha xung t
Ch
kha c
yu cu
ROW
SHARE
ROW
EXCLUSIVE
SHARE
UPDATE
EXCLUSIVE
SHARE
SHARE
ROW
EXCLUSIVE
EXCLUSIVE
ACCESS
SHARE
ACCESS
EXCLUSIVE
ROW
SHARE
ROW
EXCLUSIVE
SHARE
UPDATE
EXCLUSIVE
SHARE
SHARE
ROW
EXCLUSIVE
EXCLUSIVE
ACCESS
EXCLUSIVE
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 351/372
Xut bn nm 2013
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 352/372
Xut bn nm 2013
Lnh UPDATE u tin c s thnh cng mt kha mc hng trong hng c ch nh, nn n thnh
cng trong vic cp nht hng . Tuy nhin, lnh UPDATE th 2 thy rng hng m n nh cp nht
b kha ri, nn n ch cho giao dch m c kha hon tt. Giao dch th 2 by gi ang ch
giao dch th nht hon tt trc khi n tip tc thc thi. By gi, giao dch 1 thc thi:
UPDATE accounts SET balance = balance - 100.00 WHERE acctnum = 22222;
Giao dch 1 c c mt kha mc hng trong hng c ch nh, nhng n khng th: giao dch
2 gi ri mt kha nh vy. Nn n ch cho giao dch 2 hon tt. V th, giao dch 1 b kha trong
giao dch 2, v giao dch 2 b kha trong giao dch 1: mt iu kin kha cht. PostgreSQL s d
tm ra tnh hung ny v hy b mt trong cc giao dch .
S phng v tt nht chng li cc kha cht thng l trnh chng bng vic chc chn rng tt c
cc ng dng ang s dng mt c s d liu c cc kha trong nhiu i tng theo mt trt t
nht qun. Trong v d trn, nu c 2 giao dch cp nht cc hng theo cng y ht mt trt t,
th kha cht c th khng xy ra. Bn cng nn m bo rng kha u c c trong mt i
tng trong mt giao dch l ch hn ch nht m s cn thit cho i tng . Nu khng kh
thi kim tra iu ny trc, th cc kha cht c th c nm gi trong qu trnh x l bng
vic c gng lm li cc giao dch hy b v cc kha cht .
Min l khng tnh hung kha tri no c d tm ra, mt giao dch tm cch hoc mt kha mc
bng hoc mc hng s ch mt cch xc nh cho cc kha xung t s c thay th. iu ny c
ngha y l mt tng ti cho cc ng dng gi cc giao dch m trong cc giai on thi
gian di (nh, trong khi ch u vo ca ngi s dng).
13.3.4. Kha c vn
PostgreSQL a ra mt cng c to cc kha m c cc ngha do cc ng dng nh ngha.
Chng c gi l cc kha c vn, v h thng khng p s dng chng - n l ty thuc vo ng
dng s dng chng mt cch ng n. Cc kha c vn c th l hu dng cho cc chin lc
kha m l mt s ph hp vng v i vi m hnh MVCC. Mt khi c c, mt kha c vn
c gi cho ti khi c nh ra r rng hoc kt thc phin. Khng ging nh cc kha tiu
chun, cc kha c vn khng tn trng cc ng ngha ca cc giao dch: mt kha c c trong
qu trnh mt giao dch m sau c quay li s vn c gi theo sau s quay li , v hn
na mt s m kha l c hiu lc thm ch nu vic gi giao dch tht bi sau . Kha y ht c
th c c nhiu ln bng qui trnh ca ring n: i vi tng yu cu kha s phi c mt yu cu
m kha tng ng trc khi kha thc s c nh ra. (Nu mt phin gi ri mt kha c
a ra, th cc yu cu b sung s lun thnh cng, thm ch nu cc phin khc ang ch kha ).
Ging nh tt c cc kha trong PostgreSQL, mt danh sch hon chnh cc kha c vn hin c
bt k phin no nm gi c th c thy trong kiu nhn h thng pg_locks.
Cc kha c vn c phn b ngoi kho b nh c chia s m kch c ca n c xc nh
bng cc bin cu hnh max_locks_per_transaction v max_connections. iu ny t ra mt gii
hn trn trong s cc kha c vn c my ch trao, in hnh trong s hng chc ti hng trm
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 353/372
Xut bn nm 2013
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 354/372
Xut bn nm 2013
th mun kim tra rng tng tt c cc tn dng trong mt bng bng tng cc khon n trong bng
khc, khi c 2 bng u ang c cp nht tch cc. So snh cc kt qu ca 2 lnh SELECT sum(...)
k tip s khng lm vic tin cy trong ch c thc hin c, v truy vn th 2 c kh nng s
bao gm cc kt qu ca cc giao dch khng c truy vn u tnh ti. Vic tnh c 2 tng trong
mt giao dch tun t duy nht s trao mt bc tranh chnh xc ca ch cc hiu ng ca cc giao
dch c thc hin xong ri trc khi giao dch tun t bt u - nhng bn c th nghi ng hp
l liu cu tr li c vn cn ph hp vo thi im n c phn phi hay khng. Nu bn thn
giao dch tun t p dng mt s thay i trc khi c gng thc hin s kim tra nht qun
, th tnh hu dng ca kim tra thm ch tr nn tranh ci hn, v by gi n bao gm mt s
nhng khng phi tt c cc thay i sau khi giao dch bt u. Trong cc trng hp nh vy th
mt ngi cn thn c th mun kha tt c cc bng cn thit kim tra, c c mt bc
tranh khng gy tranh ci v thc t hin hnh. Mt kha ch SHARE (hoc cao hn) m bo
rng khng c nhng thay i khng c thc hin trong bng b kha , khc vi nhng thay
i ca giao dch hin hnh.
Cng lu l rng nu bn ang da vo vic kha r rng ngn chn cc thay i ng thi, th
bn nn hoc s dng ch c thc hin c, hoc ch tun t v hy thn trng c c
cc kha trc khi tin hnh cc truy vn. Mt kha c c bng mt giao dch tun t m bo
rng khng giao dch no khc sa i c bng vn cn ang chy, nhng nu hnh chp thy
c t giao dch c trc khi ginh c kha , th n c th c trc mt s thay i by gi
c thc hin trong bng . Mt hnh chp cc giao dch tun t thc s b ng bng u truy
vn u tin hoc lnh sa i d liu ca n ( SELECT, INSERT, UPDATE, hoc DELETE), nn c kh
nng ginh c cc kha r rng trc khi hnh chp c ng bng.
13.5. Kha v ch s
D PostgreSQL a ra s truy cp c/ghi khng kha cho d liu bng, th s truy cp c/ghi
khng kha hin khng c cho cho mi phng php truy cp ch s c trin khai trong
PostgreSQL. Cc dng ch s khc nhau c iu khin nh sau:
Cc ch s B-tree v GiST
Cc kha mc trang chia s/c quyn ngn hn c s dng cho truy cp c/ghi. Cc
kha s c nh ra ngay lp tc sau khi tng hng ch s c ly hoc c chn. Cc
dng ch s a ra s ng thi cao nht m khng c cc iu kin kha cht.
Cc ch s Hash (bm)
Cc kha mc x (bucket) bm chia s/c quyn c s dng cho truy cp c/ghi. Cc
kha s c nh ra sau khi ton b x c x l. Cc kha mc x a ra s ng thi tt
hn so vi cc kha mc ch s, nhng kha cht l c kh nng v cc kha c gi lu
hn so vi mt hot ng ch s.
Cc ch s GIN
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 355/372
Xut bn nm 2013
Cc kha mc trang chia s/c quyn ngn hn c s dng cho truy cp c/ghi. Cc
kha c nh ra ngay lp tc sau khi tng hng ch s c ly hoc c chn. Nhng lu
rng s chn mt gi tr c nh ch s GIN thng to ra vi s chn kha ch s cho
mt hng, nn GIN c th tin hnh cng vic ng k cho mt s chn gi tr duy nht.
Hin hnh, cc ch s B-tree a ra hiu nng tt nht cho cc ng dng ng thi; v chng cng
c cc chc nng nhiu hn so vi cc ch s bm - hash, chng l dng ch s c khuyn co
cho cc ng dng ng thi m cn phi nh ch s cho cc d liu v hng. Khi lm vic vi
cc d liu khng v hng, cc B-tree s khng hu dng, v cc ch s GiST v GIN s c s
dng thay vo .
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 356/372
Xut bn nm 2013
chi ph khi u c tnh (thi gian b ra trc khi qut u ra c th bt u, ngha l, thi
gian thc hin vic sp xp trong mt nt sp xp).
chi ph tng c tnh (nu tt c cc hng c truy xut, d chng c th s khng; ngha
l, mt truy vn vi mt mnh LIMIT s sm dng vic thanh ton chi ph tng ca nt u
ra ca nt k hoch Limit.
Cc v d trong phn ny c thit k t c s d liu kim th s thoi lui sau khi thc hin mt VACUUM
ANALYZE, bng vic s dng cc ngun pht trin phin bn 8.2. Bn nn c kh nng c cc kt qu tng t
nu bn t mnh th cc v d , nhng cc chi ph c lng v cc tnh ton hng ca bn c th hi khc v cc
s liu thng k ca ANALYZE l cc mu ngu nhin hn l chnh xc.
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 357/372
Xut bn nm 2013
iu ny l n gin nh n c. Nu bn lm:
SELECT relpages, reltuples FROM pg_class WHERE relname = tenk1;
th bn s thy rng tenk1 c 358 trang a v 10.000 hng. Chi ph c c lng c tnh
ton nh l (cc trang a c c * seq_page_cost) + (cc hng c qut * cpu_tuple_cost).
Mc nh, seq_page_cost bng 1.0 v cpu_tuple_cost bng 0.01, nn chi ph c c lng l:
(358 * 1.0) + (10.000 * 0.01) = 458.
By gi hy sa truy vn gc b sung thm mt iu kin WHERE:
EXPLAIN SELECT * FROM tenk1 WHERE unique1 < 7000;
QUERY PLAN
-----------------------------------------------------------Seq Scan on tenk1 (cost=0.00..483.00 rows=7033 width=244)
Filter: (unique1 < 7000)
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 358/372
Xut bn nm 2013
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 359/372
Xut bn nm 2013
iu kin c b sung thm stringu1 = xxx lm gim c lng cc hng u ra, nhng khng
phi l chi ph v chng ta vn phi ving thm tp hp cc hng y ht. Lu rng mnh stringu1
khng th c p dng nh mt iu kin ch s (v ch s ny ch trong ct unique1). Thay vo
n c p dng nh mt b lc trong cc hng c ch s truy xut. V th chi ph thc s
hi ln mt cht phn nh vic kim tra thm ny.
Nu c cc ch s trong vi ct c tham chiu trong WHERE, th trnh hoch nh c th chn
s dng s kt hp ca mt AND hoc OR ca cc ch s:
EXPLAIN SELECT * FROM tenk1 WHERE unique1 < 100 AND unique2 > 9000;
QUERY PLAN
------------------------------------------------------------------------------------Bitmap Heap Scan on tenk1 (cost=11.27..49.11 rows=11 width=244)
Recheck Cond: ((unique1 < 100) AND (unique2 > 9000))
-> BitmapAnd (cost=11.27..11.27 rows=11 width=0)
-> Bitmap Index Scan on tenk1_unique1 (cost=0.00..2.37 rows=106 width=0)
Index Cond: (unique1 < 100)
-> Bitmap Index Scan on tenk1_unique2 (cost=0.00..8.65 rows=1042 width=0)
Index Cond: (unique2 > 9000)
Nhng iu ny i hi vic ving thm c hai ch s, v vy khng nht thit phi l mt chin
thng so vi vic s dng ch mt ch s v i x vi iu kin khc nh vi mt b lc. Nu bn
lm thay i cc di c lin quan th bn s thy s thay i k hoch mt cch tng ng.
Hy th gp 2 bng, bng vic s dng cc ct m chng ta v ang tho lun:
EXPLAIN SELECT *
FROM tenk1 t1, tenk2 t2
WHERE t1.unique1 < 100 AND t1.unique2 = t2.unique2;
QUERY PLAN
-------------------------------------------------------------------------------------Nested Loop (cost=2.37..553.11 rows=106 width=488)
-> Bitmap Heap Scan on tenk1 t1 (cost=2.37..232.35 rows=106 width=244)
Recheck Cond: (unique1 < 100)
-> Bitmap Index Scan on tenk1_unique1 (cost=0.00..2.37 rows=106 width=0)
Index Cond: (unique1 < 100)
-> Index Scan using tenk2_unique2 on tenk2 t2 (cost=0.00..3.01 rows=1 width=244)
Index Cond: (t2.unique2 = t1.unique2)
Trong kt hp c vng lp lng ny, s qut ngoi (cao hn) l s qut ch s bitmap y ht m
chng ta thy trc , v v th chi ph v tnh ton hng ca n l y ht v chng ta ang p
dng mnh WHERE cho unique1 < 100 nt . Mnh t1.unique2 = t2.unique2 l cha ph
hp, nn n khng nh hng ti tnh hng ca s qut ngoi. i vi s qut trong (thp hn), th
gi tr unique2 ca hng qut ngoi c ci cm vo s qut ch s bn trong to ra mt iu
kin ch s nh t2.unique2 = constant. V th chng ta c k hoch qut bn trong y ht v cc chi ph
m chng ta c t EXPLAIN SELECT * FROM tenk2 WHERE unique2 = 42 . Cc chi ph ca nt lp sau
c thit lp trn c s chi ph ca s qut ngoi, cng vi s lp li ca s qut trong cho tng
hng ngoi (106 * 3.01 y), cng vi mt cht thi gian CPU cho vic x l chung.
Trong v d ny s tnh hng u ra chung l y ht nh sn phm ca 2 s tnh ton hng qut, m
iu khng ng trong tt c cc trng hp v bn c th c cc mnh WHERE m nhc ti c
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 360/372
Xut bn nm 2013
K hoch ny x l trch ra 100 hng c quan tm ca tenk1 bng vic s dng s qut ch s c
y ht, ct chng vo mt bng bm trong b nh, v sau tin hnh mt s qut tun t ca tenk2,
thm d trong bng bm i vi kh nng ly ca t1.unique2 = t2.unique2 i vi tng hng tenk2.
Chi ph c tenk1 v thit lp bng bm l mt chi ph khi u cho s kt hp bm, v s khng
c u ra cho ti khi chng ta c th bt u c tenk2. c tnh thi gian tng cho s kt hp cng
bao gm mt khon chi ph khng l cho thi gian CPU thm d bng bm 10.000 ln. Tuy
nhin, hy lu rng chng ta khng ang ly 10.000 ln ca 232.35; thit lp bng bm ch c
thc hin mt ln theo dng k hoch ny.
C kh nng kim tra chnh xc cc chi ph c lng ca trnh hoch nh bng vic s dng
EXPLAIN ANALYZE. Lnh ny thc s thc thi truy vn, v sau hin th thi gian chy ng c
tch t bn trong tng nt k hoch cng vi cc chi ph y ht c c lng m mt k hoch
EXPLAIN ch ra. V d, chng ta c th c mt kt qu nh th ny:
EXPLAIN ANALYZE SELECT *
FROM tenk1 t1, tenk2 t2
WHERE t1.unique1 < 100 AND t1.unique2 = t2.unique2;
QUERY PLAN
-----------------------------------------------------------------------------------------------------------------------------------Nested Loop (cost=2.37..553.11 rows=106 width=488) (actual time=1.392..12.700 rows=100
-> Bitmap Heap Scan on tenk1 t1 (cost=2.37..232.35 rows=106 width=244) (actual
time=Recheck Cond: (unique1 < 100)
-> Bitmap Index Scan on tenk1_unique1 (cost=0.00..2.37 rows=106 width=0) (actual
Index Cond: (unique1 < 100)
-> Index Scan using tenk2_unique2 on tenk2 t2 (cost=0.00..3.01 rows=1 width=244) (actual
Index Cond: (t2.unique2 = t1.unique2)
Total runtime: 14.452 ms
Lu rng cc gi tr thi gian thc l theo mili giy ca thi gian thc, trong khi cc c tnh
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 361/372
Xut bn nm 2013
Tng thi gian Total runtime c EXPLAIN ANALYZE ch ra bao gm thi gian khi ng v tt ca
trnh thc thi, ch khng phi ca vic phn tch, vit li, hay thi gian ln k hoch. i vi cc
lnh INSERT, UPDATE, v DELETE, thi gian b ra cho vic p dng nhng thay i ca bng c p
cho nt k hoch ca mt mc nh cc lnh Insert, Update hoc Delete. (Cc nt k hoch bn
di nt ny trnh by cng vic nh v cc hng v/hoc vic tnh cc hng mi). Thi gian b ra
cho vic thc thi BEFORE cc trigger, nu c, c ly chi ph i vi nt Insert, Update hoc Delete
c lin quan, d thi gian b ra cho vic thc thi AFTER cc trigger l khng ly. Thi gian b ra
trong tng trigger (hoc BEFORE hoc AFTER) cng c by ra ring r v c a vo trong thi
gian chy tng. Tuy nhin, lu rng cc trigger rng buc b hon li s khng c thc thi cho
ti kt thc giao dch v v th khng c EXPLAIN ANALYZE by ra.
C 2 cch ng k trong cc thi gian chy c EXPLAIN ANALYZE o m c th i chch khi
s thc thi thng thng ca truy vn y ht. Trc ht, v khng hng u ra no c phn phi
cho my trm, nn cc chi ph truyn qua mng v cc chi ph nh dng I/O khng c a vo.
Th 2, tng chi ph c EXPLAIN ANALYZE thm vo c th l ng k, c bit trong cc my vi
cc li gi nhn (kernel) gettimeofday() chm.
ng lu rng cc kt qu ca EXPLAIN nn khng b ngoi suy ti cc tnh hung khc vi tnh
hung m bn thc s ang kim th; v d, cc kt qu trong mt bng kch c tr chi khng th
c gi thit p dng cho cc bng ln. Cc c tnh chi ph ca trnh hoch nh l khng
tuyn tnh v v th n c th chn mt k hoch khc i vi mt bng ln hn hoc nh hn. Mt
v d cc k l trong mt bng m ch chim mt trang a, bn s gn nh lun c mt k hoch
qut tun t bt k cc ch s l sn sng hay khng. Trnh hoch nh nhn thc c rng n s
ly mt trang a c x l bng trong bt k trng hp no, nn khng c gi tr no trong
trang thm vo c xem mt ch s.
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 362/372
Xut bn nm 2013
Mt thnh phn ca s liu thng k l tng s cc khon u vo trong tng bng v ch s, cng
nh s lng cc khi a b tng bng v ch s chim. Thng tin ny c gi trong pg_class ca
bng, trong cc ct reltuples v relpages. Chng ta c th xem n vi cc truy vn tng t th ny:
SELECT relname, relkind, reltuples, relpages
FROM pg_class
WHERE relname LIKE tenk1%;
relname
| relkind | reltuples | relpages
--------------------------------+----------+------------+------------tenk1
|r
| 10000 | 358
tenk1_hundred
|i
| 10000 | 30
tenk1_thous_tenthous | i
| 10000 | 30
tenk1_unique1
|i
| 10000 | 30
tenk1_unique2
|i
| 10000 | 30
(5 rows)
y chng ta c th thy rng tenk1 cha 10.000 hng, cc ch s ca n cng vy, nhng cc ch
s l (khng ngc nhin) nh hn nhiu so vi bng.
V cc l do hiu qu, reltuples v relpages khng c cp nht lc ang chy, v v th chng
thng bao gm th g nh cc d liu li thi. Chng c VACUUM, ANALYZE v mt t lnh
DDL nh CREATE INDEX cp nht. Mt lnh ANALYZE ng mt mnh, n l mt phn ca VACUUM,
sinh ra mt gi tr gn vi reltuples v n khng c mi hng trong bng. Trnh hoch nh s m
rng phm vi cc gi tr m n thy trong pg_class khp vi kch c bng vt l hin hnh, v th
c c s gn ng st hn.
Hu ht cc truy vn ch truy xut mt phn cc hng trong mt bng, v cc mnh WHERE hn
ch cc hng s c kim tra. Trnh hoch nh v th cn phi thc hin mt c lng kh nng
la chn cc mnh WHERE, l, mt phn cc hng khp vi tng iu kin trong mnh
WHERE. Thng tin ny c s dng cho tc v ny c lu gi trong catalog h thng pg_statistic.
Cc khon u vo pg_statistic c cc lnh ANALYZE v VACUUM ANALYZE cp nht, v lun gn
ng thm ch khi c cp nht ti mi.
Thay v xem trc tip pg_statistic, l tt hn xem kiu nhn pg_stats ca n khi xem xt cc s
liu thng k mt cch th cng. pg_stats c thit k c c d dng hn. Hn na, ai cng
c c pg_stats, trong khi ch mt mnh siu ngi s dng (superuser) c c pg_statistic.
(iu ny ngn cn nhng ngi s dng khng c quyn khi vic hc th g v cc ni dung
cc bng ca nhng ngi khc t cc s liu thng k . Kiu nhn pg_stats c ng k ch
ra ch cc hng v cc bng m ngi s dng hin hnh c th c). V d, chng ta c th lm:
SELECT attname, inherited, n_distinct,
array_to_string(most_common_vals, E\n) as most_common_vals
FROM pg_stats
WHERE tablename = road;
attname | inherited | n_distinct
| most_common_vals
------------+-------------+------------------------+-----------------------------------name
|f
|
-0.363388 | I- 580 Ramp+
|
|
| I- 880 Ramp+
|
|
| Sp Railroad +
|
|
| I- 580 +
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 363/372
name
|
|t
|
|
|
|
|
|
|
|
|
|
|
-0.284859 |
|
|
|
|
Xut bn nm 2013
I- 680 Ramp
I- 880 Ramp+
I- 580 Ramp+
I- 680 Ramp+
I- 580 +
State Hwy 13 Ramp
(2 rows)
Lu rng 2 hng c hin th cho cng ct y ht, mt hng tng ng vi h thng phn cp k
tha hon chnh bt u bng road (inherited=t), v hng khc ch bao gm bn thn bng road
(inherited=f).
Lng thng tin c ANALYZE lu tr trong pg_statistic, c bit s lng ti a cc khon u vo
trong cc mng most_common_vals v histogram_bounds cho tng ct, c th c thit lp trn c
s tng ct mt bng vic s dng lnh ALTER TABLE SET STATISTICS, hoc ton th bng vic thit
lp bin cu hnh default_statistics_target. Gii hn mc nh hin hnh l 100 khon u vo.
Vic nng ln gii hn ny c th cho php nhiu c tnh chnh xc hn ca trnh hoch nh c
thc hin, c bit cho cc ct vi cc phn phi d liu bt thng, vi gi thnh ca vic tiu
dng nhiu khng gian hn trong pg_statistic v hi nhiu thi gian hn mt cht tnh ton cc
c lng . Ngc li, mt gii hn thp hn c th l cho cc ct vi cc phn phi d liu
n gin.
Chi tit xa hn v s dng cc s liu thng k ca trnh hoch nh c th thy trong Chng 56.
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 364/372
Xut bn nm 2013
Nhng s lng cc th t c kh nng lin kt tng theo hm m khi s lng cc bng gia tng.
Ngoi khong 10 bng u vo th khng cn l thc t na thc hin mt tm kim y ca
tt c cc kh nng, v thm ch i vi 6 hoc 7 bng th vic ln k hoch c th mt kh nhiu
thi gian. Khi c qu nhiu cc bng u vo, th trnh hoch nh ca PostgreSQL s chuyn t tm
kim y sang mt tm kim chung xc sut thng qua mt s kh nng gii hn. (Ngng
chuyn qua c tham s thi gian chy geqo_threshold thit lp). Tm kim chung mt t thi gian
hn, nhng n s khng nht thit tm k hoch c kh nng tt nht.
Khi truy vn lin quan ti cc lin kt, th trnh hoch nh c t s t do hn so vi n c cho cc
lin kt th (ni b). V d, hy xem xt:
SELECT * FROM a LEFT JOIN (b JOIN c ON (b.ref = c.id)) ON (a.id = b.id);
l hp l lin kt A vi hoc B hoc C trc. Hin hnh, ch FULL JOIN hon ton rng buc th t
lin kt. Hu ht cc trng hp thc tin c lin quan ti LEFT JOIN hoc RIGHT JOIN c th c
dn xp mt vi mc no .
C php lin kt ni b r rng ( INNER JOIN, CROSS JOIN, hoc unadorned JOIN), v mt ng ngha
l y ht nh vic lit k cc quan h u vo trong FROM, v th khng rng buc th t lin kt.
Thm ch d hu ht cc dng JOIN khng hon ton rng buc th t lin kt, c kh nng ra lnh
cho trnh hoch nh truy vn ca PostgreSQL i x vi tt c cc mnh JOIN nh vic rng
buc th t lin kt vy. V d, 3 truy vn sau l tng ng nhau v logic:
SELECT * FROM a, b, c WHERE a.id = b.id AND b.ref = c.id;
SELECT * FROM a CROSS JOIN b CROSS JOIN c WHERE a.id = b.id AND b.ref = c.id;
SELECT * FROM a JOIN (b JOIN c ON (b.ref = c.id)) ON (a.id = b.id);
Nhng nu chng ta ni cho trnh hoch nh tn trng th t JOIN, th dng 2 v 3 mt thi gian
ln k hoch hn so vi dng 1. Hiu ng ny l khng ng lo ngi v ch c 3 bng, nhng n c
th l mt s cu sinh vi nhiu bng.
p trnh hoch nh tun theo th t lin kt c t ra t cc JOIN r rng, hy thit lp tham
s thi gian chy join_collapse_limit v 1. (Cc gi tr c th khc c tho lun bn di).
Bn khng cn rng buc th t lin kt hon ton ct b thi gian tm kim, v l OK s
dng cc ton t JOIN vi cc khi nim ca mt danh sch y FROM. V d, hy xem xt:
SELECT * FROM a CROSS JOIN b, c, d, e WHERE ...;
Vi
join_collapse_limit = 1,
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 365/372
Xut bn nm 2013
chng vi cc bng khc, nhng khng rng buc cc la chn ca n. Trong v d ny, s cc th
t lin kt c th c gim v mt yu t ca 5.
Vic rng buc tm kim ca trnh hoch nh theo cch ny l mt k thut hu dng cho vic
gim thi gian ln k hoch v cho vic dn hng cho trnh hoch nh ti mt k hoch truy vn
tt. Nu trnh hoch nh chn mt th t lin kt ti mt cch mc nh, th bn c th p n chn
mt th t tt hn thng qua c php JOIN gi thit l bn bit mt th t tt hn, l th. S kim
th c khuyn co.
Mt vn c lin quan st sao nh hng ti thi gian ln k hoch l vic sp cc truy vn con
bn trong truy vn cha.
V d, hy xem xt:
SELECT *
FROM x, y,
(SELECT * FROM a, b, c WHERE something) AS ss
WHERE somethingelse;
Tnh hung ny c th ny sinh t s dng mt kiu nhn m rng buc mt lin kt; qui tc SELECT
ca mt kiu nhn s c chn vo ch ca tham chiu kiu nhn , bng vic ly mt truy vn rt
ging trn. Thng thng, trnh hoch nh s c sp truy vn con trong truy vn cha, c:
SELECT * FROM x, y, a, b, c WHERE something AND somethingelse;
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 366/372
Xut bn nm 2013
14.4.3. Loi b ch s
Nu bn ang ti mt bng c to mi, th phng php nhanh nht l to bng , ti theo b
cc d liu bng bng vic s dng COPY, ri to cc ch s bt k cn thit cho bng . Vic to
mt ch s trong cc d liu tn ti trc l nhanh hn so vi vic cp nht n tng cht mt khi
tng hng c ti.
Nu bn ang thm cc lng ln cc d liu vo mt bng ang tn ti, c th l mt thnh cng
loi b cc ch s, ti bng , v sau to li cc ch s. Tt nhin, hiu nng ca c s d liu
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 367/372
Xut bn nm 2013
i vi nhng ngi s dng khc c th phi chu trong thi gian cc ch s khng c. Bn cng
nn ngh 2 ln trc khi b mt ch s duy nht, v vic kim tra li kham c bng s rng buc
duy nht s b mt trong khi ch s khng cn.
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 368/372
Xut bn nm 2013
Ngoi vic trnh thi gian cho lu tr hoc gi WAL x l cc d liu WAL, lm th ny cng s
thc s tin hnh cc lnh nht nh nhanh hn, v chng c thit k khng vit WAL hon
ton nu wal_level l minimal. (Chng c th m bo s mt an ton r hn bng vic thc hin mt
fsync cui hn l bng vic vit WAL). iu ny p dng cho cc lnh sau:
COPY FROM,
khi bng ch tng c to ra hoc ct bt trc trong cng giao dch y ht.
14.4.9. Vi lu v pg_dump
Cc scripts cha b c pg_dump sinh ra t ng p dng mt vi, nu khng ni l tt c, cc
ch dn trn. ti li mt s v pg_dump nhanh nht c th, bn cn lm thm vi iu bng
tay. (Lu l cc im p dng khi phc hi mt v, khng phi khi to ra n. Cc im y
ht p dng hoc vic ti mt v vn bn vi psql hoc vic s dng pg_restore ti t mt tp
lu tr pg_dump).
Mc nh, pg_dump s dng COPY, v khi n ang sinh ra mt s v s v d liu, hy cn
thn ti d liu trc khi to ra cc ch s v cc kha ngoi. V th trong trng hp ny vi ch
dn c iu khin t ng. Nhng g cn li bn phi lm l:
Nu vic s dng nhn bn dng hoc lu tr WAL, hy cn nhc vic v hiu ha chng
trong qu trnh phc hi. lm iu , hy thit lp archive_mode v off, wal_level v
minimal, v max_wal_senders v 0 trc khi ti s v . Sau , hy thit lp chng
ngc v cc gi tr ng v tin hnh sao lu c bn mi li.
maintenance_work_mem
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 369/372
Xut bn nm 2013
Bn c th c hiu ng v hiu ha cc kha ngoi bng vic s dng la chn --disable-triggers - nhng nhn thy
rng n loi tr, thay v ch tr hon, kim tra hp l kha ngoi, v v th c kh nng chn cc d liu xu nu bn
s dng n.
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 370/372
Xut bn nm 2013
Ti liu PostgreSQL c th
Stefan Simkovics, Enhancement of the ANSI SQL Implementation of PostgreSQL , Department of
Information Systems, Vienna University of Technology, November 29, 1998.
Discusses SQL history and syntax, and describes the addition of INTERSECT and EXCEPT
constructs into PostgreSQL. Prepared as a Masters Thesis with the support of O. Univ. Prof.
Dr. Georg Gottlob and Univ. Ass. Mag. Katrin Seyr at Vienna University of Technology.
A. Yu and J. Chen, The POSTGRES Group, The Postgres95 User Manual , University of California,
Sept. 5, 1995.
Zelaine Fong, The design and implementation of the POSTGRES query optimizer 12, University of
California, Berkeley, Computer Science Department.
11 http://db.cs.berkeley.edu/papers/
12 http://db.cs.berkeley.edu/papers/UCB-MS-zfong.pdf
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 371/372
Xut bn nm 2013
Cc k yu v bi bo
Nels Olson, Partial indexing in POSTGRES: research project , University of California, UCB Engin
T7.49.1993 O676, 1993.
L. Ong and J. Goh, A Unified Framework for Version Modeling Using Production Rules in a
Database System, ERL Technical Memorandum M90/33 , University of California, April,
1990.
L. Rowe and M. Stonebraker, The POSTGRES data model 3 , Proc. VLDB Conference, Sept.
1987.
P. Seshadri and A. Swami, Generalized Partial Indexes (cached version) 4 , Proc. Eleventh
International Conference on Data Engineering, 6-10 March 1995, IEEE Computer Society
Press, Cat. No.95CH35724, 1995, 420-7.
M. Stonebraker and L. Rowe, The design of POSTGRES 5 , Proc. ACM-SIGMOD Conference
on Management of Data, May 1986.
M. Stonebraker, E. Hanson, and C. H. Hong, The design of the POSTGRES rules system, Proc.
IEEE Conference on Data Engineering, Feb. 1987.
M. Stonebraker, The design of the POSTGRES storage system 6 , Proc. VLDB Conference, Sept.
1987.
M. Stonebraker, M. Hearst, and S. Potamianos, A commentary on the POSTGRES rules system 7
, SIGMOD Record 18(3) , Sept. 1989.
M. Stonebraker, The case for partial indexes 8 , SIGMOD Record 18(4) , Dec. 1989, 4-11.
M. Stonebraker, L. A. Rowe, and M. Hirohama, The implementation of POSTGRES 9 ,
Transactions on Knowledge and Data Engineering 2(1) , IEEE, March 1990.
M. Stonebraker, A. Jhingran, J. Goh, and S. Potamianos, On Rules, Procedures, Caching and
Views in Database Systems 10 , Proc. ACM-SIGMOD Conference on Management of
Data, June 1990.
Vn phng Phi hp Pht trin Mi trng Khoa hc v Cng ngh, B Khoa hc v Cng ngh
Trang 372/372