Professional Documents
Culture Documents
PostgreSQL Seminarski
PostgreSQL Seminarski
- Seminars i ra! -
SADRAJ
1. UVOD .................................................................................................................................................. 4 2. INSTALACIJA ..................................................................................................................................... 6 2.1. Kreiranje baze ............................................................................................................................... 6 2.2. Pristupanje bazi ............................................................................................................................ 8 3. OSNOVE SQL-a ..................................................................................................................................13 3.1. Uvod ............................................................................................................................................13 3.2. Koncepti ........................................................................................................................................13 3.3. Kreiranje tabele .............................................................................................................................13 3.3.1. Kreiranje baze i tabele sa PgAdmin .....................................................................................14 3.4. Popunjavanje tabele redovima ......................................................................................................18 3.4.1. Popunjavanje tabele redovima sa PgAdmin ........................................................................1 3.!. Upiti ..............................................................................................................................................21 3.!.1. Upiti sa PgAdmin .................................................................................................................23 3.6. Udru"ivanje tabela ........................................................................................................................24 3.#. Agregatne $un%cije ........................................................................................................................26 3.8. &sve"avanje .................................................................................................................................28 3. . 'risanje .........................................................................................................................................28 3.1(. )apredne $un%cije .......................................................................................................................2 3.1(.1. Pogledi ..............................................................................................................................2 3.1(.1.1. Pogledi sa PgAdmin ...........................................................................................2 3.1(.2. *oreign Ke+s .....................................................................................................................2 3.1(.2.1. *oreign Ke+s sa PgAdmin ..................................................................................3( 3.1(.3. ,ransa%cije ........................................................................................................................32 3.1(.4. )asle-ivanje .....................................................................................................................33 3.1(.4.1. )asle-ivanje sa PgAdmin ...................................................................................3! 4. ADMINISTRACIJA SERVERA ............................................................................................................36 4.1. Postgre./0 %orisni1%i nalozi ........................................................................................................36 4.2. Kreiranje %lastera baze podata%a .................................................................................................36 4.3. Po%retanje servera baze podata%a ...............................................................................................3# 4.4. 2ogu3e gre4%e prili%om podizanja servera ...................................................................................38 4.!. 2ogu3e gre4%e prili%om %one%tovanja %lijenata ............................................................................38 4.6. 5a4enje servera ...........................................................................................................................3 4.#. .igurne ,6P78P %one%cije sa ..9 tunelima .................................................................................3 4.8. Uloge i privilegije baze podata%a ..................................................................................................3 4.8.1. Uloge ...................................................................................................................................4( 4.8.2. &sobine uloga ......................................................................................................................4( 4.8.3. Privilegije .............................................................................................................................41 4.8.4. :lanstvo u grupi uloga .........................................................................................................41 5. UPRAVLJANJE BAZAMA PODATAKA ..............................................................................................43 !.1. Uvod .............................................................................................................................................43 !.2. Kreiranje baze podata%a ...............................................................................................................43 !.3. ;abloni baza podata%a .................................................................................................................44 !.4. ,ablespaces ..................................................................................................................................44 6. BACKUP i RESTORE .........................................................................................................................46 6.1. SQL <ump ....................................................................................................................................46 6.1.1. &bnavljanje dump=a .............................................................................................................46 6.1.2. Upravljanje veli%im bazama .................................................................................................4# 6.1.3. 'ac%up sa PgAdmin .............................................................................................................48 6.2. 'e%ap $ajl sistem nivoa .................................................................................................................48 6.3. &n=line be%ap i point=in=time recover+ >P8,?@ ...............................................................................48 6.3.1. Pode4avanje AA0 arBiviranja 48..........................................................................................4 6.3.2. 'e%apovanje baze ...............................................................................................................4 6.3.3. &bnavljanje sa on=line be%ap pristupom ..............................................................................!( . ZAKLJU!AK .......................................................................................................................................51 DODATAK C PgAccess ...........................................................................................................................!3 LITERATURA ..........................................................................................................................................!8
PO"LAVLJE 1 C UVOD
Postgre./0 je obje%tno=relacioni sistem za upravljanje bazama podata%a >object=relational database management s+stem >&?<'2.@@D baziranog na P&.,5?E.=u verzija 4.21 razvijenog na Univerzitetu Kali$ornija u odeljenju za ra1unars%e nau%e 'er%li. P&.,5?E. je bio pionir u ne%im %onceptima %oje su postale dostupne u %omercijalnim bazama te% dosta %asnije. Postgre./0 je open=source izdana% originalnog ber%lijevog %oda. Podr"ava veli%i deo ./0 standarda i obezbe-uje mnoge savremene %ara%teristi%eF %omple%sne upite $oreign %e+s trigere vieGs transa%cioni integritet Postgre./0 mo"e biti slobodno %ori43enD modi$i%ovan i distribuiran od strane sva%og %orisni%a za bilo %a%vu upotrebuD bila ona privatnaD %omercijalna ili a%adems%a. I#$%&i'a P&.,5?E. proje%at je bio vo-en od strane pro$esora 2aj%la .tonbra%era i implementacija je zapo1ela 1 86. godine. Prva demo verzija je postala operativna 1 8# godine i bila je pri%azana 1 88 godine na A62=.852&< %on$erenciji. Herzija 1 je bila objavljena u junu 1 8 godineD verzija 2 u junu 1 (D verzija 3 1 1 godine. 'er%lijev P&.,5?E. je zvani1no zavr4en sa verzijom 4.2. 1 4D Endrju Iu i <"oli :en su P&.,5?E.=u implementrirali interpreter za ./0 jezi%. Pod novim imenomD Postgres ! je bio izdan na Gebu %ao open=source verzija originalnog P&.,5?E. 'er%li %oda. Pored ostaliBD izvr4ena su slede3a pobolj4anjaF
-
Upitni jezi% Post/UE0 je zamenjen ./0=om. Podupiti nisu bili podr"ani sve do Postgre./0. <odata je podr4%a za %lauzulu 5?&UP 'J. )ovi programD psKlD je omogu3en radi intera%tivniB ./0 upita Krat%i tutorijal za ./0 je dolazio zajedno sa izvornim %odom
1 6 je bilo jasno da naziv Postgres ! ne3e izdr"ati test vremena. &dabrano je novo imeD Postgre./0D %oje u%azuje na povezanost originalnog P&.,5?E.A i mogu3nosti %ori43enja ./0Ca.
U seminars%om radu 3e biti predstavljene osnove Postgre./0=aD gotovo u $ormi tutorijalaD za operativni sistem 0inuL. 'i3e pri%azan postupa% instaliranjaD osnove ./0=aD administracije serveraD upravljanje bazama podata%a i
1
postupa% be%apa. Predstavljeni su terminals%i program psKl i gra$i1%i program PgAdmin 888D %oji postoje i za druge operativne sisteme >AindoGs i 2ac&.@. ,ema seminars%og rada je zna1ajna iz ne%oli%o razlogaF
-
Postgre./0 je jedna od najpopularnijiB i naj%valitetnijiB open=source baza podata%a .ve je 1e43a upotreba open=source programa te 5)U70inuL operativniB sistemaD naro1ito %ao servera zbog svoje stabilnosti i sigurnosti. Ma ilustraciju ove teze mo"e poslu"iti %ompanija &racle %oja je neN davno >neuspe4no@ po%u4ala %upovinu %on%urents%e open=source sitema za upravljanje bazama podata%a 2+./0D objavila open=source verziju &racla i poslednje najave %ompanije su da "eli po%retanje svoje sopstvene 0inuL distribucije ili %upovinu )ovell=aD odnosno jedne od najpopularnijiB 0inuL distribuN cija C .u.E 0inuLa >na %ojoj je i ra-en ovaj seminars%i@. &racleD po re1ima svog prvog 1ove%a 0arija Elisona ovim "eli da postigne O%valitativnu prednost u odnosu na svoje rivale = 2icroso$t i 8'2P )a na4em jezi%u ne postoje %njigeD uputstvaD tutorijali za Postgre./0 He3i deo pri%azanog psKl=a i PgAdmin=a je upotebljiv i na operativnim sistemima AindoGs i 2ac&.
"
PO"LAVLJE 2 C INSTALACIJA
Prvo je potrebno s%inuti program sa interneta sa adrese BttpF77GGG.postgresKl.org7doGnload7 Postupa% instalacije je slede3iF ./configure gmake su gmake install adduser postgres mkdir /usr/local/pgsql/data chown postgres /usr/local/pgsql/data su - postgres /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data /usr/local/pgsql/bin/postmaster -D /usr/local/pgsql/data >logfile 2>&1 & /usr/local/pgsql/bin/createdb test /usr/local/pgsql/bin/psql test
tada Postgre./0 nije %ore%tno instaliran ili nije instaliran uop4te ili je putanja %omande pogre4no postavljena. Komanda se mo"e pozvati i upisivanjem 1itave putanjeF # /usr/local/pgsql/bin/createdb m db
createdb( could not connect to database postgres( could not connect to ser)er( *o such file or director +s the ser)er running locall and accepting connections on ,ni- domain socket ./tmp/.s./0'12.3452.6
;to zna1i da server nije po%renutD ili nije po%renut tamo gde ga je %omanda createdb o1e%ivala. U tom slu1aju je potrebno proveriti uputstva za instalaciju. 2ogu3 je i slede3i odgovorF createdb( could not connect to database postgres( 7$%$2( not e-ist user .8oe. does
U ovom slu1aju administrator nije napravio Postgre./0 nalog za %orisni%a OjoeP. 'itno je razli%ovati Postgre./0 naloge od naloga na samom operativnom sistemu. )a%nadno 3e biti pri%azano pravljenje nalogaD %oje mo"e da pravi samo administrator. Potrebno je ulogovati se %ao %orisni% pod %ojim je instalirana baza >naj1e43e postgres@ da bi se %reirao prvi %orisni1%i nalog. U%oli%o postoji %orisni1%i nalogD ali nalog %oji nema dozvolu za %reiranje bazeD odgovor 3e bitiF createdb( database creation failed( #""9"( database permission denied to create
Postgre./0 ne ograni1ava broj baza. 8me baze mora po1eti sa al$abetnim slovom i mo"e imati jo4 63 %ara%tera. Mgodno je %reirati bazu pod istim imenom %ao 4to je i %orisni1%o ime. 2nogi alati posmatraju ta%vo ime baze za pretpostavljenuD ta%o da se na%nadno ola%4ava rad. Ma %reiranje ta%ve baze dovoljno je ot%ucatiF # createdb U%oli%o se vi4e ne "eli %oristiti odre-ena baza >npr m+db@D jednostavno se mo"e u%loniti %omandom # dropdb m db
.ve to naravno ne mo"e da se uradi u%oli%o %orisni% nije ujedno i %reator bazeD odnosno a%o nema privilegije super %orisni%a. .ve pretBodno se radi te% %ada se uloguje %ao %orisni% postgres >ili %a%o drugacijeD u zavisnosti od naziva vlasni%a baze@ sa %omandomF
su : postgres
;elcome to psql <.=.1> the /ostgre'12 interacti)e terminal. % pe( ?cop right for distribution terms ?h for help with '12 commands ?6 for help with psql commands ?g or terminate with semicolon to e-ecute quer ?q to quit m db@#
dobijamo otpili%e ova%av odgovorF )ersion --------------------------------------------------------------------------/ostgre'12 <.1.5 on iD<D-pc-linu--gnu> compiled b 0!! gcc A0!!B 5.5.3 2==3=11E AprereleaseB A','# 2inu-B A1 rowB
ili
ili
m db@# '#2#!% 2 G 2C
Program psKl ima veli%i broj interniB %omandi %oje nisu ./0 %omande. Po1inju sa bac%slasB %ara%terom O Q P. )e%e od tiB %omandi su izlistane u pozdravnoj poruci %oja se javila na%on po%retanja psKl=a. )a primerD mogu3e je dobiti pomo3 za razne Postgre./0 %omande %ucaju3iF m db@> ?h
&
b) Koristei "ostojee gra(i)ke a!atke kao to s$ PgAdmin III i!i PgAccess' PgAdmin 3e biti predstavljen uporedo sa psKl=om budu3i da je pretpostavljeni upravlja1%i gra$i1%i program Postgre./l=a za ne%e operativne sisteme >AindoGs@D 1a% i dolazi sa Postgre./0=om u verziji za AindoGs. PgAccess 3e biti pri%azan na %raju seminars%og %ao dodata%. &ba ova programa sadr"e alate %oji drugi program ne sadr"i. PgAdmin 888 se po%re3e %omandomF pgadmin5 Po1etni prozor izgleda %ao na slici 1F
slika 1. )emamo ni%a%viB mogu3nosti do% god ne de$ini4emo na %om serveru "elimo da radimoD zato je potrebno dodati server sa .i/(A00 S(&1(&2 %ao na slici 2.
1'
slika 2.
A%%ress * upisujemo adresu ma4ine na %ojoj se nalazi server. U ovom slu1ajuD radimo na pomenutoj ma4ini te je adresa !oca!+ost. Descri"tion * opis serveraD u ovom slu1aju seminarski. Initia! D, C odabira se opcija tem"!ate -D na%nadno 3e biti poja4njeni 4abloni baza podata%a. Username C %orisni1%o ime. nee% "ass.or% C odabiranjem ove opcije 3e se na%on sva%og po%retanja PgAdmina zaBtevati passGord. Pass.or% C lozin%a %orisni%a.
slika 3.
Kona1noD na%on dodavanja servera dobijamo prozor PgAdmina %ao na slici 4. %oji nam pru"a mogu3nost po1et%a rada nad bazom.
11
Slika 4.
c) Na"isati s oj$ so"st en$ a"!ikacij$# koristei je%an o% mnogi+ "o%r/ani+ "rogramski+ je&ika
12
3.2. K%)3(-$i
Postgre./0 je relacioni sistem za upravljanje bazama podata%a. ,o zna1i da je u pitanju sistem za upravljanje podacima %oje su sme4teni u relacijama C esencijalno matemati1%i izraz za tabelu. .va%a tabela se sastoji od imenovaniB redova. .va%i red ima iste %oloneD a sva%a %olona sadr"i speci$i1ne tipove podata%a. ,abele su grupisane u baze podata%aD a vi4e baza podata%a %ojima se upravlja jednim Postgre./0 serverom 1ine %laster >en. cluster C grozd@ baze podata%a.
!"#$%# %$&2# )reme A grad )archarA<=B> tempFnis int> tempF)is int> pad) real> datum date BC
Ka%o dolazi do preloma redovaD u psKl=u 3e %reiranje ove tabele izgledati ova%oF
13
m m m m m m m
db@# !"#$%# %$&2# )reme A dbA# grad )archarA<=B> dbA# tempFnis int> dbA# tempF)is int> dbA# pad) real> dbA# datum date dbA# BC
psKl prepoznaje da %omanda nije zavr4enaD sve do poslednje linije. ?azmaci se mogu slobodno %oristiti u ./0 %omandama. ,o zna1i da je mogu3e %ucati %omande u novom redu druga1ije poravnate nego one u gornjim redovimaD 1a% je sve mogu3e napisati u jednoj liniji. <ve crte >O==P@ najavljuju %omentar. ;ta god da iza njiB sledi bi3e ignorisano sve do %raja linije. ./0 je Ocasse insensitiveP = %omande se mogu pisati veli%im ili malim slovima ali je elegantnije pisati iB veli%im slovima zbog preglednosti )archarA<=B ozna1ava tipove podata%a %oje mogu biti dugi do 8( %ara%tera. int predstavlja tip integer. real je tip podata%a za s%ladi4tenje single precision $loating=point numbers. date je tip podata%a %oji ozna1ava datum Postgre./0 podr"ava standardne ./0 tipove int( smallint( real( double precision( charANB( )archarANB( date( time( timestamp( i inter)al( %ao i druge tipove i bogati set geometrijs%iB tipova. Postgre./0 mo"e biti prilago-en za proizvoljan broj tipova podata%a de$inisaniB od strane %orisni%a. Posledica toga je da imena tipova nisu %lju1ne re1i >en. %e+ Gords@ osim %ada se to zaBteva za podr4%u u specijalnim slu1ajevima ./0 standarda. .lede3i primer predstavlja pravljenje tabele sa gradovima i njiBovom geogra$s%om lo%acijomF !"#$%# %$&2# grado)i A naHi) )archarA<=B> lokaci8a point BC point je primer speci$i1nog Postgre./0 tipa podata%a. )a %rajuD treba spomenuti da u%oli%o odre-ena tabela vi4e nije potrebna ili u%oli%o se ona "eli ponovo %reiratiD mo"e se u%loniti %omandomF D"9/ %$&2# imetabeleC
1!
slika 5. .lede3i %ora% je popunjavanje prozora %ao na slici 6. Potrebno je dati ime bazi >i ovaj put je to m+db@ i dodeliti joj vlasni%a. 'udu1i da je do sada napravljen samo jedan %orisni1%i nalogD postgresD ni%a%va druga opcija pod R&GnerS i ne mo"e stajati. 8 ovaj putD %ao i prili%om dodavanja servera %oristimo template 1.
slika . ,ab ./0 nam omogu3ava uvid %a%o sve to izgleda u ./0 %odu >sli%a #@F
1"
slika ".
slika !.
)a slici 8 je pri%azano %reiranje tabele. &dabira se .erversseminars%i<atabasesm+db.cBemas public gde desnim %li%om na ,ables dobijamo opciju za %reiranje nove tabele. )a slici D pod tabom PropertiesD upisuje se ime tabeleD OvremeP u ovom slu1aju i dodeljuje se vlasni% postgres. &dabiramo i opciju O9as &8<sP jer u suprotnom 3e tabela biti samo Oread=onl+PD ne3e se mo3i editovatiD zna1i ni popunjavati redovima.
slika #.
1#
slika 1$. )a drugom tabuD 6olumns >%olone@D vr4i se %reiranje %olona. Kli%om na dugme Add dobija se prozor u %om se upisuje ime %olone >OgradP@D tip podat%a >OvarcBar>8(@P@D opciono O)ot )U00P i eventualno %omentar >Oime gradaP@.
slika 11. Postupa% se ponovi onoli%o puta %oli%o je %olona predvi-eno i na %raju tab 6olumns izgleda %ao na slici 11. )a slici 12 je pri%azan tab ./0F
1$
slika 12.
,reba primetiti da svi tipovi podata%a %oriste o1igledne ulazne obli%e. Konstante %oje nisu jednostavne numeri1%e vrednosti obi1no moraju biti pod navodnicima >T@D %ao u ovom primeru. ,ip date je prili1no $le%sibilan u priBvatanju upisaniB podata%a. ,ip point zaBteva par %oordinata za ulazni podata%F +*'#"% +*%9 grado)i I$2,#' AJ*o)i 'adJ> JA1K.31> 43.2=BJBC 8li +*'#"% +*%9 grado)i I$2,#' AJLren8aninJ> JA2=.23> 43.22BJBC
.inta%sa %ori43ena do sada zaBteva pam3enje poret%a %olona. Alternativa je sinta%sa %oja omogu3ava e%spicitno navo-enje %olonaF
+*'#"% +*%9 )reme Agrad> tempFnis> tempF)is> pad)> datumB I$2,#' AJ*o)i 'adJ> 3> 12> =.D> J2==D-=5-2KJBC
Kolone se mogu izlistati u redosledu druga1ijem nego 4to su u samoj tabeliD a%o se ne "eli popuniti ne%a %olona ili a%o su npr. OpadavineP nepoznateF
1%
+*'#"% +*%9 )reme Adatum> grad> tempF)is> tempFnisB I$2,#' AJ2==D-=5-2KJ> JLren8aninJ> 14> EBC
Popunjavanje je ta%o-e mogu3e %ori43enjem %omande !9/M za u1itavanje veli%iB %oli1ina podata%a iz te%stualne datote%e. )a ovaj na1in se popunjavanje obi1no izvede br"e zato 4to je !9/M %omanda optimizovana za datu apli%acijuD ali je manje $le%sibilna nego %omanda +*'#"%. )a primerF !9/M )reme 7"9N J/home/user/)reme.t-tJC gde ime datote%e za izvornu datote%u mora biti dostupna serveruD ne %lijentuD budu3i da server 1ita $ajl dire%tno.
slika 13. Iednostavnim %li%om u "eljnu 3eliju se upisuju potrebni podaci. )ovi red se dobija %li%om na OUP ili %ombinacijom tastera 6trlVEnter. Kona1noD na slici 1! je pri%azan %ompletan prozor PgAdmina.
slika 14.
slika 14.
1&
2'
3.5. U-i$i
<a bi se dobili podaci iz tabele mora se postaviti upit. Ma to se %oristi ./0 %omanda '#2#!%. PrimerF '#2#!% P 7"9N )remeC U ovom primeru >U@ predstavlja sve %olone. Potpuno isti rezultat se dobija %omandomF '#2#!% grad> tempFnis> tempF)is> pad)> datum 7"9N )remeC
2ogu3e je pisanje izrazaD ne samo jednostavno upu3ivanje na %olone. PrimerF '#2#!% grad> AtempF)isGtempFnisB/2 $' tempFpros> datum 7"9N )remeC
)zlaz:
grad Q tempFpros Q datum -----------G-----------G-----------*o)i 'ad Q 1D Q 2==D-=5-2< *o)i 'ad Q < Q 2==D-=5-2K Lren8anin Q 1= Q 2==D-=5-2K A5 rowsB
$' je %ori43en za dodeljivanje imena izlaznoj %oloni. Upit mo"e biti odre-en dodavanjem ;O#"# odredbe %oja speci$icira %oji redovi su tra"eni. &dredba ;O#"# sadr"i boolean izraz i samo redovi za %oje je boolean izraz zadovoljen 3e biti izlistani. )aj1e41i boolean operatori ,$*D( 9"( i *9%- su dozvoljeni. )a slede3em primeru 3e biti izlistani %i4ni dani u )ovom .aduF '#2#!% P 7"9N )reme ;O#"# grad @ J*o)i 'adJ $*D pad) > =.=C ?ezultatF grad Q tempFnis Q tempF)is Q pad) Q datum ----------G----------G----------G------G-----------*o)i 'ad Q 3 Q 12 Q =.D Q 2==D-=5-2K A1 rowB
21
,a%o-e je mogu3e zaBtevati da rezultati upita budu izlistani u "eljenom redosleduF '#2#!% P 7"9N )reme 9"D#" &M gradC ?ezultatF
grad Q tempFnis Q tempF)is Q pad) Q datum -----------G----------G----------G------G-----------*o)i 'ad Q 12 Q 21 Q = Q 2==D-=5-2< *o)i 'ad Q 3 Q 12 Q =.D Q 2==D-=5-2K Lren8anin Q E Q 14 Q Q 2==D-=5-2K A5 rowsB U ovom primeruD redosled ispisa nije potpuno speci$iciran. .ledi primer %oji ispisuje rezultat po ta1no tra"enom redosleduF '#2#!% P 7"9N )reme 9"D#" &M grad> tempFnisC ?ezultatF grad Q tempFnis Q tempF)is Q pad) Q datum -----------G----------G----------G------G-----------*o)i 'ad Q 3 Q 12 Q =.D Q 2==D-=5-2K *o)i 'ad Q 12 Q 21 Q = Q 2==D-=5-2< Lren8anin Q E Q 14 Q Q 2==D-=5-2K A5 rowsB
?ezultatF
8 u ovom slu1ajuD ispis redova mo"e da varira. <a bi redosled bio ta1no ona%av %a%av "elimo da vidimoD zajedno
22
se %oriste D+'%+*!% i 9"D#" &M: '#2#!% D+'%+*!% cit 7"9N weather 9"D#" &M cit C
U ne%im sistemima za upravljanje bazama podata%aD u%lju1uju3i i starije verzije Postgre./0=aD %ori43enje DISTINCT automats%i ispisuje redove po redosledu i ORDER B6 je nepotrebno. Ali ovo nije zaBtevano ./0 standardom i Postgre./0 ne garantuje da 3e samo %ori43enje DISTINCT ispisati redove po "eljenom redosledu.
./0 alat
slika 1 .
slika 1".
23
U slu1aju da jedan od ova dva grada nije postojao u tabeli OgradoviPD ne bi se pojavio ni u zajedni1%oj tabeli po4to bi join ignorisao redove %oji nemaju svog para. 8zlistan je rezultat sa dve %olone %oje sadr"e ime grada. ,o je ispravnoD zato 4to su liste %olona tabela vreme i gradovi povezani. U pra%si to nije naro4ito po"eljnoD zato je mnogo elegantnije %orititi imena %olona umesto >U@F '#2#!% grad> tempFnis> tempF)is> pad)> datum> lokaci8a 7"9N )reme> grado)i ;O#"# grad @ naHi)C
?ezultatF grad Q tempFnis Q tempF)is Q pad) Q datum Q lokaci8a -----------G----------G----------G------G------------G--------------*o)i 'ad Q 12 Q 21 Q = Q 2==D-=5-2< Q A1K.31>43.2B *o)i 'ad Q 3 Q 12 Q =.D Q 2==D-=5-2K Q A1K.31>43.2B Lren8anin Q E Q 14 Q Q 2==D-=5-2K Q A2=.23>43.22B A5 rowsB 'udu3i da sve %olone imaju razli1ita imena automats%i se prepoznaje %ojoj tabeli %olona pripadaD ali je dobro samostalno de$inisati imena %olonaF '#2#!% )reme.grad> )reme.tempFnis> )reme.tempF)is> )reme.pad)> )reme.datum> grado)i.lokaci8a 7"9N )reme> grado)i ;O#"# grado)i.naHi) @ )reme.gradC
2!
8stovetan rezultat se dobija i ova%vom $ormomF '#2#!% P 7"9N )reme +**#" R9+* grado)i 9* A)reme.grad @ grado)i.naHi)BC )a slede3em primeru 3e biti pri%azano re4enje za pretBodnu situaciju %ada u tabeli OgradoviP ne postoji zapis sa gradom %oji se pojavljuje u tabeli OvremePD a "elimo da ga izlistamo u join upitu. Prvo je potrebno napraviti ta%vu situaciju uno4enjem jo4 jednog grada u tabelu OvremeP +*'#"% +*%9 )reme I$2,#' AJ&eogradJ> 4> 11> =.3> J2==D-=5-2KJBC
&no 4to "elimo jeste s%eniranje tabele vreme i za sva%u %olonu prona3i par u tabeli gradovi. A%o par ne postojiD "elimo da Oprazne vrednostiP zamenjene za %olene tabele gradovi. ,a%va vrsta upita se naziva outer join. KomandaF '#2#!% P 7"9N )reme 2#7% 9,%#" R9+* grado)i 9* A)reme.grad @ grado)i.naHi)BC ?ezultatF grad Q tempFnis Q tempF)is Q pad) Q datum Q naHi) Q lokaci8a -----------G----------G----------G------G------------G-----------G--------------*o)i 'ad Q 12 Q 21 Q = Q 2==D-=5-2< Q *o)i 'ad Q A1K.31>43.2B *o)i 'ad Q 3 Q 12 Q =.D Q 2==D-=5-2K Q *o)i 'ad Q A1K.31>43.2B Lren8anin Q E Q 14 Q Q 2==D-=5-2K Q Lren8anin Q A2=.23>43.22B &eograd Q 4 Q 11 Q =.3 Q 2==D-=5-2K Q Q A4 rowsB
&vaj upit se naziva !e(t o$ter join zbog toga 4to 3e u tabeli na levoj strani u ispisu biti pri%azane sve %olone najmanje jednomD a u ispisu tabele na desnoj strani 3e biti pri%azane samo oni redovi %oji odgovaraju redovima leve tabele. ,a%o-e je mogu3e join jedne tabele i to se naziva se!( join. )a primerD "ele se videti svi zapisi vreme %oji su u temperaturnoj zavisnosti od drugiB vremens%iB zapisa. Mna1iD potrebno je porediti tempFnis i tempF)is kolone od sva%og vreme reda sa tempFnis i tempF)is %olonama drugiB vreme redova. UpitF '#2#!% ;1.grad> ;1.tempFnis $' niska> ;1.tempF)is $' )isoka> ;2.grad> ;2.tempFnis $' niska> ;2.tempF)is $' )isoka 7"9N )reme ;1> )reme ;2 ;O#"# ;1.tempFnis S ;2.tempFnis $*D ;1.tempF)is > ;2.tempF)isC &va%av na1in preimenovanja dosta mo"e da pomogne u brzini rada i dosta se 1esto %oristi. )prF '#2#!% P 7"9N )reme w> grado)i c ;O#"# w.grad @ c.naHi)C
2"
3. . A4&(4a$)( 8,)93i'(
Kao i ve3ina drugiB realacioniB baza podata%aD Postgre./0 podr"ava agregatne $un%cije. Agregatne $un%cije ra1unaju rezultat vi4e ulazniB redova. )a primerD postoje agregatne $un%cije za count( sum( a)g >prose%@( ma>maLimum@ i min >minimum@. Kao primerD mo"e se prona3i najvi4a nis%a temperatura upitomF '#2#!% ma-AtempFnisB 7"9N )remeC ?ezultatF ma----12 A1 rowB A%o se "eli dobiti %oji je grad %od %og se javlja pretBodna temperaturaD mo"e se po%u4ati slede3eF '#2#!% grad 7"9N )reme ;O#"# tempFnis @ ma-AtempFnisBC
5re4%a se pojavila po4to agregatna $un%cija maL ne mo"e biti %ori43ena u A9E?E odredbi. &va restri%cija postoji zato 4to A9E?E odredba odre-uje redove %oji 3e i3i u agregacijuD ta%o da mora biti razvijena pre nego se izra1una agregatna $un%cija. &va%va situacija se mo"e re4iti %ori4tenjem podupitaF '#2#!% grad 7"9N )reme ;O#"# tempFnis @ A'#2#!% ma-AtempFnisB 7"9N )remeBC ?ezultatF grad ---------*o)i 'ad A1 rowB &va%av upit je u redu i ne prijavljuje gre4%u po4to je podupit nezavisan. Agregatne $un%cije su ta%o-e %orisne u %ombinaciji sa 0"9,/ &M uslovima. )a primerD mo"e se dobiti ma%simalna nis%a temperatura posmataju3i sva%i grad ponaosob '#2#!% grad> ma-AtempFnisB 7"9N )reme 0"9,/ &M gradC
2#
?ezultat daje po jedan izlazni red po gradu. &vi grupisani redovi se mogu $iltrirati %oriste3i O$I+*0: '#2#!% grad> ma-AtempFnisB 7"9N )reme 0"9,/ &M grad O$I+*0 ma-AtempFnisB S 1=C
?ezultatF
<obijamo rezultate samo za gradove %oji imaju vrednosti tempWnis manje od 1(. Kona1noD a%o nas interesuju samo gradovi 1ije ime po1inje sa OMPF
'#2#!% grad> ma-AtempFnisB 7"9N )reme ;O#"# grad 2+T# JLUJ 0"9,/ &M grad O$I+*0 ma-AtempFnisB S 1=C ?ezultatF grad Q ma-----------G----Lren8anin Q E A1 rowB
Io4 je bitno napomenuti razli%u izme-u ./0 A9E?E and 9AH8)5 uslova. A9E?E sele%tuje redove pre grupe redova i agregati se ra1unajuD do% 9AH8)5 sele%tuje grupe redova i agregati se ra1unaju. Mato A9E?E uslov ne sme sadr"ati agregatne $un%cije.
2$
3.:. O#1(7a1a)'(
Postoje3i redovi se mogu osve"iti %oriste3i %omandu UP<A,E. Pretpostav%a je da je prime3eno da su 2 .(3.2((6. temperature pogre4no unesene i da je temperatura bila ve3a za 2 stepenaF ,/D$%# )reme '#% tempF)is @ tempF)is G 2> ;O#"# datum > J2==D-=5-2KJC ?ezultatF grad Q tempFnis Q tempF)is Q pad) Q datum -----------G----------G----------G------G-----------*o)i 'ad Q 12 Q 21 Q = Q 2==D-=5-2< *o)i 'ad Q 3 Q 12 Q =.D Q 2==D-=5-2K Lren8anin Q E Q 14 Q Q 2==D-=5-2K &eograd Q 4 Q 11 Q =.3 Q 2==D-=5-2K A4 rowsB
tempFnis @ tempFnis G 2
3.;. B&i#a)'(
?edovi se mogu u%lanjati %oriste3i <E0E,E %omandu. Pretpostav%a je da vi4e nisu potrebni podaci o vremenu u 'eograduF D#2#%# 7"9N )reme ;O#"# grad @ J&eogradJC
?ezultatF '#2#!% P 7"9N )remeC grad Q tempFnis Q tempF)is Q pad) Q datum -----------G----------G----------G------G-----------*o)i 'ad Q 12 Q 21 Q = Q 2==D-=5-2< *o)i 'ad Q 3 Q 12 Q =.D Q 2==D-=5-2K Lren8anin Q E Q 14 Q Q 2==D-=5-2K A5 rowsB
Iedino 1ega se pri brisanju treba 1uvati jeste %omanda D#2#%# 7"9N imetabeleC
U%oli%o se ne napi4e %oji se red "eli obrisati i %omanda izgleda %ao pretBodnaD bi3e u%lonjeni svi redovi iz tabeleD bez i%a%vog tra"enja potvrde od strane sistema.
2%
slika 1!.
slika 1#.
2&
ke >
!"#$%# %$&2# )reme A grad )archarA<=B references grado)iAgradB> tempFnis int> tempF)is int> pad) real> datum date BC .adaD a%o se po%u4a uneti neodgovaraju3i zapisF +*'#"% +*%9 )reme I$2,#' AJ*o)i 'adJ> 12> 21> =.=> J2==D-=5-2<JBC #""9"( insert or update on table .)reme. )iolates foreign ke constraint .)remeFgradFfke . D#%$+2( Te AgradB@A*o)i 'adB is not present in table .grado)i.. 3.1<.2.1. .%&(i4) K(@# #a P4A05i) &dabirom opcije .erversseminars%i<atabasesm+db.cBemaspublicD desnim %li%om na tabelu vreme i odabirom opcije PropertiesD prelazimo na tre3i tabD 6onstraints >sli%a 2(@. Kli%om na dugme Add se dobija situacija sa sli%e 21D gde je potrebno odrediti ime za *oreign Ke+D odrediti re$erentnu tabeluD u ovom slu1aju gradovi.
slika 2$.
slika 21.
3'
)a slede3em tabu se de$ini4e zavisnost %olona izme-u dve tabeleD u ovom slu1aju grad i naziv >sli%a 22@. )a slici 23 su pri%azane sve mogu3e %ombinacije vezane za *oreign Ke+.
slika 22.
slika 23.
U%oli%o sada po%usamo da unesemo 'eograd u tabelu vremeD ne3e nam biti dozvoljeno budu3i da u tabeli gradovi ne postoji odgovaraju3i zapis >sli%a 24@.
slika 24.
31
3.1<.3. T&a)#a93i'(
,ransa%cije su $undamentalni %oncept sviB sistema baza podata%a. .misao transa%cija je da pove"e vi4e %ora%a u jednuD sve=ili=ni4ta operaciju. .redi4nje postav%e izme-u %ora%a nisu vidljive drugim %on%urentnim transa%cijamaD i u%oli%o se desi ne%a gre4%a upravo to spre1ava %ompletiranje transa%cije ta%o da nijedan %ora% ne3e uticati na samu bazu. )a primerD baza ne%e ban%e sadr"i bilanse za razli1ite %lijents%e nalogeD %ao i totalne bilanse za $ilijale. Pretpostav%a je da se "eli snimiti uplata od 1((((( dinara sa Alisinog ra1una na 'obanov ra1un. ./0 %omanda mo"e da izgleda ova%oF ,/D$%# naloHi '#% bilans @ bilans - 1==.== ;O#"# ime @ J$lisaJC ,/D$%# fili8ala '#% bilans @ balance - 1==.== ;O#"# ime @ A'#2#!% fili8alaF*' 7"9N naloHi ;O#"# ime @ J$lisaJBC ,/D$%# naloHi '#% bilans @ bilans G 1==.== ;O#"# ime @ J&obanJC ,/D$%# fili8ala '#% bilans @ bilans G 1==.== ;O#"# ime @ A'#2#!% fili8alaFL" 7"9N naloHi ;O#"# ime @ J&obanJBC
<etalji oviB %omandi trenutno nisu bitniD bitno je da je izvr4eno ne%oli%o odvojeniB osve"avanja da bi se izvr4ila ova operacija. 'an%ovni slu"benici su sva%a%o zainteresovani da li su se sve ove operacije izvr4ile ili se nije izvr4ila nijedna. ,e% 3e grupisanje sviB navedeniB update=ovanja u transa%ciju mo3i to da garantuje. ,a%o-e je potebna i garancija da 3e jednom izvr4ena i u bazu zabele"ena transa%cija biti zaista snimljena i da ne3e biti izgubljena 1a% i u%oli%o se na%on toga desi pad sistema. ,ransa%ciona baza zato treba da je garantuje da su sva update=vanja uzro%ovana transa%cijom bac%up=ovanaD sa1uvana >npr na dis%@ pre nego 4to je izve4taj o zavr4et%u transa%cije gotov. Io4 je jedna stvar od velil%e va"nosti za transa%cione baze je da %ada se vi4e transa%cija odvija istovremenoD sva%a od njiB ne sme da vidi ne%ompletirane promene na bazi drugiB transa%cija. Mna1iD transa%cija mora biti orijentisana na sve=ili=ni4ta ne samo %ao posledica njenog trajnog uticaja na bazu ve3 i %ao uslov da ne bude vidljiva do% se ne zavrsi. U Postgre./0=uD transa%cije su odre-ene ./0 %omandama 'E58) i 6&228,. ,a%o 3e pretBodna ban%ars%a transa%cija izgledati ova%oF �+*C ,/D$%# naloHi '#% bilans @ bilans - 1==.== ;O#"# ime @ J$lisaJC -- itd !9NN+%C
U%oli%o ne "elimo da se transa%cija izvr4i >iz recimo razloga 4to je Alisin ra1un pre4ao u minus@D %oristi se %omanda ?&00'A6K umesto 6&228,. Postgre./0 i ina1e tretira sva%u ./0 %omandu %ao da je izvr4ena u o%viru transa%cije. A%o se i ne %rene sa 'E58) sva%a individualna %omanda implicitno po1inje sa 'E58) i a%o je uspe4na zavr4ava sa 6&228,. 5rupe %omandi uo%virene sa 'E58) i 6&228, se pone%ad nazivaju transa%cioni blo%ovi. 2ogu3e je %ontrolisati %omande u transa%ciji jo4 detaljnije %oriste3i savepoints. &ni omogu3avaju sele%tivno u%lanjanje delova transa%cijeD do% 3e ostata% biti izvr4en. )a%on de$inisanja savepointa sa %omandom .AHEP&8),D mo"e se vratiti sa %omandom ?&00'A6K ,&. .ve promene baze transa%cijom izme-u te dve %omande su u%lonjene. 'udu3i da se sve de4ava pod transa%cionim blo%omD ni4ta ne3e biti vidljivo za ostale sesije.
32
Primer savepointa se mo"e izvesti na pretBodnim primerima C pretpostav%a je da je potrebno prebaciti odre-enu sumu novca sa Alisinog na 'obanov ra1unD ali se na%nadno primeti da je bilo potrebno %reditirati Perin nalogF �+*C ,/D$%# naloHi '#% bilans @ bilans ;O#"# ime @ J$lisaJC '$I#/9+*% mo8Fsa)epointC ,/D$%# naloHi '#% bilans @ bilans ;O#"# name @ J&obanJC -- greska... trebalo 8e koristiti "922&$!T %9 mo8Fsa)epointC ,/D$%# naloHi '#% bilans @ bilans ;O#"# ime @ J/eraJC !9NN+%C
3.1<.4. Na#/(Ai1a)'(
)asle-ivanje je %oncept iz obje%tno orijentisaniB baza podata%a i otvara interesantne nove mogu3nosti prili%om dizajniranja baza podata%a. Kreiramo dve tabele C gradovi i prestonice. )aravnoD prestonice su ta%o-e gradovi ali se "ele ista3i prili%om izlistavanja sviB gradova. U principuD mogu se napraviti ova%ve dve tabeleF
!"#$%# %$&2# ime populaci8a nadmF)is drHa)a BC !"#$%# %$&2# ime populaci8a nadmF)is BC
prestonice A te-t> real> int> -- Au metrimaB charA2B neFprestonice A te-t> real> int -- Au metrimaB
!"#$%# I+#; grado)i $' '#2#!% ime> populaci8a> nadmF)is 7"9N prestonice ,*+9* '#2#!% ime> populaci8a> nadmF)is 7"9N neFprestoniceC 8 ova%va postav%a 3e $un%cionisati %ore%tno ali 3e update=ovanje redova biti prili1no neelegantno. Mato je bolja solucijaF !"#$%# %$&2# ime populaci8a nadmF)is BC grado)i A te-t> real> int -- Au metrimaB
33
U ovom slu1ajuD redovi tabele prestonice nas!e2$j$ sve %olone Aime> populaci8a> i nadmF)isB od svoje starije tabele grado)i. ,ip %olone ime je te-t> prirodni Postgre./0 tip za du"inu varijabli. ,abela prestonice ima jednu %olonu vi4eD drzavaD %oja 3e pri%azati u %ojoj dr"avi je data prestonica. U Postgre./0=uD tabela mo"e naslediti od nule do vi4e drugiB tabela. U tabelu gradovi se ne unose upisi prestonica. )a primerD slede3i upit pronalazi imena gradovaD u%lju1uju3i prestonice %oje se nalaze na nadmors%oj visini ve3oj od ! metara. '#2#!% ime> nadmF)is 7"9N grado)i ;O#"# nadmF)is > 3C ?ezultatF ime Q nadmF)is -----------G---------*o)i 'ad Q <= Lren8anin Q <= /etrograd Q 1= &eograd Q 11D Nosk)a Q 2== 2ondon Q 13 AD rowsB
U slede3em primeruD upit pronalazi sve gradove %oji nisu prestonice a nalaze se na nadmors%oj visini ve3oj od !( metaraF '#2#!% ime> nadmF)is 7"9N 9*2M grado)i ;O#"# nadmF)is > 3=C ?ezultatF ime Q nadmF)is -----------G---------*o)i 'ad Q <= Lren8anin Q <= A2 rowsB
3!
&vde %omanda &)0J pre gradovi zaBteva da se upit vr4i samo nad tabelom gradoviD ne i u tabelama %oje su zavisne od nje. 3.1<.4.1. Na#/(Ai1a)'( #a P4A05i) &dabirom opcije .ervers >seminars%i ><atabases >m+db >.cBemas >publicD desnim %li%om na tabelu prestonice i odabirom opcije PropertiesD dobijamo stanje sa slede3e sli%eF )asle-ivanje se vrlo la%o re4ava samo u ovom prozoru jednostavnim odabirom "eljene tabele i %li%om na dugme Add.
slika 25.
3"
initdb 3e po%u4ati da %reira dire%torijum u%oli%o ve3 ne postoji. U%oli%o se ova %omanda po%renula pod neprivilegovanim %orisni%omD dire%torijum ne3e mo3i biti %reiran. U tom slu1aju potrebno ga je Oru1noP %reirati ulogovan %ao root a potom Postgre./0 %orisni1%om nalogu dodeliti sva ovla4tenja. Komande 3e izgledati ova%oF
3#
su root# mkdir /usr/local/pgsql/data root# chown postgres /usr/local/pgsql/data root# su postgres postgresV initdb -D /usr/local/pgsql/data initdb ne3e priBvatiti po%retanje u%oli%o dire%torijum podata%a ve3 postoji. 'udu3i da su u dire%torijumu podata%a sme4teni svi podaci neopBodno je da on bude za4ti3en od neautorizovanog pristupa. Mbog toga 3e initdb odbijati pristup sva%ome osim Postgre./0 %orisni%u. Ka%o godD do% je sadr"aj dire%torijuma osiguranD po osnovnim postav%ama autorizacije %lijenta dozvoljeno je %one%tovati se na bazu podata%a i 1a% postati super%orisni%. Mato se preporu1uje %ori43enje jedne od dve opcijeF initdb1s -;( --pwprompt ili --pwfile za dodeljivanje lozin%e super%orisni%u baze podata%a.
po%re3e server u pozadini i postavlja izlaz u unapred odre-eni log $ajl. )ajbolje je naravno da se server startuje prili%om podizanja operativnog sistema. .%ripte za autostart su speci$i1ne za sva%i operativni sistemD a uz Postgre./0 dolazi ne%oli%o s%ripti u contrib/start-scripts dire%torijumu. 8nstaliranje noviB zaBteva root privilegije. ?azli1iti operativni sistemi imaju razli1ite %onvencije za startovanje daemona prili%om podizanja sistema. 2nogi sistemi imaju $ajl /etc/rc.local ili /etc/rc.d/rc.local. <rugi %oriste rc.d dire%torijumeD 4to je slu1aj sa .u.E 0inuLom. Ka%o godD server mora biti po%renut pod Postgre./0 %orisni1%im nalogom a ni%a%o pod root ili ne%im drugim lo%alnim nalogom. Komanda 3e biti obli%a su -c J...J postgres na primer: su -c JpgFctl start -D /usr/local/pgsql/data -l ser)erlogJ postgres )ajzgodnije je pogledati u source s%ritpte contrib/start-scripts/linu- u Postgre./0 distribuciji.
3$
)aje1e43e ovo zna1i da se po%u4ano po%retanje jo4 jednog postmastera na ve3 zauzetom portu >od strane drugog postmastera@. 8liD u%oli%o je prijavljena $ddress alread in use ili ne%a varijanta te gre4%e od strane %ernelaD problem je druge prirode. )a primerD u%oli%o "elimo po%renuti postmaster na ne%om rezervisanom portuF # postmaster -p 222 290( could not bind +/)4 socket( /ermission denied O+*%( +s another postmaster alread running on port 2226 +f not> wait a few seconds and retr . 7$%$2( could not create %!//+/ listen socket 8li gre4%aF 7$%$2( could not create shared memor segment( +n)alid argument D#%$+2( 7ailed s stem call was shmgetAke @344===1> siHe@4=115EDD4=> =5D==B.
najverovatnije zna1i da je limitirana veli1ina deljene memorije od strane %ernela manja od radne oblasti %oju Postgre./0 "eli da %reira >4(113#664( bitova u ovom primeru@.
3%
zna1i da je server priBvatio %one%ciju a zatim je odbio. <ruge poru%eD tipa !onnection timed out najverovatnije zna1i da je mre"na veza pre%inuta.
3&
4.:.1. U/%4(
Ma %reiranje uloge %oristi se %omanda 6?EA,E ?&0E F !"#$%# "92# imeC Ma u%lanjenje uloge %oristi se %omanda <?&P ?&0EF D"9/ "92# imeC Udobnosti radiD programi createuser i dropuser su omogu3eni za %ori43enje %ao omoti o%o ./0 %omandi %oje mogu biti pozvane iz %omandne linije terminalaF createuser ime dropuser ime <a bi se utvrdio set postoje3iB uloga potrebno je istra"iti pgWroles %atalogD na primerF '#2#!% rolname 7"9N pgFrolesC )ovopodignuti server uve% ima jednu ve3 de$inisanu uloguD ulogu super%orisni%a C po osnovnim postav%ama ime je ime %orisni%a operativnog sistemaD %oji je inicijalizirao %laster baze podata%a. )aj1e43e je to ime postgres. <a bi se o$ormile druge uloge prvo je potrebno %one%tovati se %ao navedenii super%orisni%.
!'
9&(i&a)'( *a+( -%0a$a9a Uloga mora imati e%splicitnu dozvolu za %reiranje baze >osim za super%orisni%a@. KomandaF !"#$%# "92# ime !"#$%#D&. 9&(i&a)'( ,/%4( Uloga mora imati e%splicitnu dozvolu za %reiranje drugiB uloga >osim za super%orisni%a@. &va%o %reirana uloga mo"e izmeniti ili poni4titi druge uloge. Komanda !"#$%# "92# ime !"#$%#"92#
/%+i)9a 0ozin%a je zna1ajna samo %ada je metod za autorizaciju %lijenta zaBteva prili%om %one%tovanja na bazu. &ve lozin%e nemaju ni%a%vu vezu sa lozin%ama za operativni sistem. KomandaF !"#$%# "92# ime /$'';9"D JstringJ
4.:.3. P&i1i/(4i'(
Kada je ne%i obje%at %reiranD dodeljen mu je vlasni%D naj1e43e je to uloga %oja ga je %reirala. Ma najve3i broj obje%ataD ta uloga je jedini vlasni% >ili super%orisni%@ i jedino ona mo"e da vr4i bilo %a%ve operacije nad njom. <a bi se dozvolilo drugim ulogama da je %oristeD moraju im se dodeliti privilegije. Postoji ne%oli%o vrsta privilegijaF '#2#!%( +*'#"%( ,/D$%#( D#2#%#( ",2#( "#7#"#*!#'( %"+00#"( !"#$%#( %#N/9"$"M( #X#!,%#( i ,'$0#. <a bi se privilegija dodelilaD %oristi se %omanda 23456. ,a%o daD a%o je na primer pera postoje3a ulogaD a naloHi postoje3a tabelaD privilegija za apdejtovanje tabele se dodeljuje saF 0"$*% ,/D$%# 9* naloHi %9 peraC .pecijalno ime /,&2+! mo7e biti %ori43eno za dodeljivanje privilegije sva%oj ulozi u sistemu. Pisanjem $22 umesto ne%e speci$i1ne privilegije dodeljuje privilegije za sve uloge %oje su nad datim obje%tom. Ma opoziv sviB privilegija se %oristi 38V9:8 %omandaF "#I9T# $22 9* naloHi 7"9N /,&2+!C
.peci$i1ne privilegije nad obje%tom %oje ima njen vlasni% >npr modi$i%acija ili brisanje obje%ta@ su samo u njegovom vlasni4tvu i ne mogu se dodeliti niti opozvati. )oD vlasni% mo"e sam sebi opozvati ne%e privilegije C na primerD da tabelu u1ini read=onl+ za sebe.
!1
se %reira uloga %oja predstavlja grupu a onda se dodeli 1lanstvo u grupi individualnoj %orisni1%oj ulozi. <a%leD da bi se podesila grupna ulogaD prvo se %reira ulogaF !"#$%# "92# imeC Matim se %omandama 5?A), i ?EH&KE dodeljuju ili u%lanjaju 1lanoviF 0"$*% grupna_uloga %9 uloga1> ... C "#I9T# grupna_uloga 7"9N uloga1> ... C 'udu3i da ne postoji ne%a su4tins%a razli%a izme-u grupniB uloga i ne=grupniB ulogaD mogu3e je dodeliti 1lanstvo i u drugim grupnim ulogama. Pripadnici uloge %oji imaju 8)9E?8, osobinu automats%i %oriste privilegije uloge 1iji su 1lanovi. )a primerD ura-eno je slede3eF !"#$%# "92# pera 290+* +*O#"+%C !"#$%# "92# admin *9+*O#"+%C !"#$%# "92# centar *9+*O#"+%C 0"$*% admin %9 peraC 0"$*% centar %9 adminC &dmaB na%on %one%tovanja %ao %orisni% peraD sesija baze podata%a 3e %oristiti privilegije dodeljene dire%tno peri a isto ta%o i privilegije dodeljene adminuD budu3i da pera nasle-uje adminove privilegije. )oD privilegije dodeljene centru nisu dostupne ia%o je pera indire%tno 1lan centraD budu3i da je 1lanstvo pre%o adminaD %oji ima osobinu nenasledljivosti. )a%onF '#% "92# adminC sesija 3e imati samo one privilegije %oje su odobrene adminu >ne i peri@. )a%onF '#% "92# centarC sesija 3e imati samo one privilegije dodeljene centru >ne peri ili adminu@. Po1etne privilegije mogu biti vra3ene sa bilo %ojom od slede3iB %omandiF '#% "92# peraC '#% "92# *9*#C "#'#% "92#C &sobine uloga 0&58)D .UPE?U.E?D 6?EA,E<'D i 6?EA,E?&0E se mogu smatrati specijalnim privilegijama ali se ni%ada ne nasle-uju Ma u%lanjanje ulogeD %oristi seF D"9/ "92# imeC
!2
Po4to je potebno biti %one%ovan na server da bi se izvr4ila 6?EA,E <A,A'A.E %omandaD postavlja se pitanje %a%o %reirati "r $ bazu podata%aY Prva baza je uve% %reirana sa initdb %omandom %ada je oblast podata%a inicijalizovana. ,a baza se zove postgres i zato je za %reiranje prve Oobi1neP baze potrebno %one%tovati se na nju. <ruga baza( template1D je ta%o-e %reirana sa initdb. Kada god se %reira nova bazaD %lonira se template1.
!3
,o u principu zna1i da sva%a promena nad bazom template1 uti1e na sve budu3e %reirane baze. .togaD template1 ne bi trebala da slu"i za stvaran rad. Kao ola%4anje postoji program %oji se mo"e po%renuti iz terminala a %ojim se %reira baza - createdb. createdb bpime Pone%ad je potrebno %reirati bazu za ne%og drugog. ,a uloga bi trebala da bude vlasni% nove baze. Komanda za ./0 o%ru"enjeF !"#$%# D$%$&$'# bpime 9;*#" ulogaimeC 8li u terminalu createdb -9 ulogaime bpime )aravnoD potrebno je biti supe%orisni% da bi se mogla %reirati baza za ne%og drugog.
5.4. Ta*/(#-a3(#
,ablespaces u Postgre./0=u dozvoljavaju administratoru da de$ini4e lo%acije u $ajl sistemu gde $ajlovi %oji reprezentuju obje%te baze podata%a mogu biti poBranjeni. Prva prednost %ori43enja tablespaces je da u%oli%o na odre-enoj particiji Bard dis%a ponestane prostoraD mo"e se napraviti tablespaces na drugoj particiji do% se sistem ne pre%o$iguri4e. <ruga prednost jeste optimizacija per$ormasni. )a primerD mogu3e je smestiti odre-ene Ote4%eP podat%e na br"e dis%ove a ret%o %ori43ene podat%e na obi1ne dis%ove. Ma de$inisanje tablespaceD %oristi se %omanda 6?EA,E ,A'0E.PA6E na primerF !"#$%# %$&2#'/$!# fastspace 29!$%+9* J/mnt/sda1/postgresql/dataJC
!!
8nicijalno %reiranje tablespaces je dozvoljeno samo super%orisni%uD ali na%on toga se mo"e omogu3iti privilegija bilo %om %orisni%u za njeno %ori43enje. <a bi se to uradilo potebno je dodeliti 6?EA,E privilegiju. ,abeleD inde%siD i cele baze mogi biti dodeljene posebnim tablespaces. <a bi se to uradiloD %orisni% sa 6?EA,E privilegijom nad datim tablespaces mora da prosledi njegovo ime %ao parametar za relevantnu %omandu. )a primerD slede3a %omanda %reira tabelu u tablespace space1F !"#$%# %$&2# fooAi intB %$&2#'/$!# space1C
Ma u%lanjanje praznog tablespaceD %oristi se %omanda <?&P ,A'0E.PA6E <a bi se utvrdio broj postoje3iB tablespacesD treba istra"iti pgW tablespace sistem %atalogD na primerF '#2#!% spcname 7"9N pgFtablespaceC
!"
6.1. SQL D,58deja metoda jeste generisanje te%stualnog $ajla sa ./0 %omandama ta%o da na%on uvo-enja na server ponovo %reira bazu ona%va %a%va je bila u trenut%u izvr4enja ./0 <umpa. Postgre./0 za ovu svrBu obezbe-uje pomo3ni program pgWdump. &snovna upotreba ove %omande je F pgFdump bpime > outfile
<a%le. pgWdump zapisuje rezultat u standardni izlazni $ajl. pgWdump je redovna Postgre./0 %lijents%a apli%acijaD 4to zna1i da se be%ap mo"e izvr4iti sa bilo %og ra1unara %oji ima pristup bazi. 'itno je razumeti da pgWdump ne $un%cioni4e sa specijalnim dozvolamaD te se naj1e43e mora po%retati %ao super%orisni% baze.
!#
createdb -% template= bpime @. )e samo da "eljena baza mora postojati pre obnavljanjaD nego moraju postojati i svi %orisnici %oji su bili vlasnici obje%ata u be%apovanoj bazi. )aravnoD u%oli%o ne%i od tiB %orisni%a ne bude postojaoD obnavljenje baze se ne3e izvr4iti zbog gre4%e u zapisu o vlasni4tvu i dozvolama nad obje%tima. Kada je baza obnovljenaD savetuje se po%retanje A)A0JME. KomandaF )acuumdb -a -H to I$!,,N $*$2ML# all databases; pgWdump i psKl imaju mogu3nost dump=a baze dire%tno sa jednog servera na drugiD na primer pgFdump -h host1 bpime Q psql -h host2 bpime Ma be%apovanje celog %lastera %oristi se program pgWdumpallD program %oji be%apuje sva%u bazu u %lasteru i ujedno 1uva podat%e o %orinicima i grupama. KomandaF pgFdumpall > outfile
ili
!$
D(/'()'( 0a$%$(9a #a #-/i$. <atote%a se mo"e podeliti na vi4e delova "eljene veli1ine %oje se priBvatljive za $ajl sistem. U slede3em primeru datote%a je podeljena u n delova veli1ine 1mb pgFdump bpime Q split -b 1m - imefajla
slika 2 .
slika 2".
Alternativna be%ap strategija je dire%tno %opiranje $ajlova %oje Postgre./0 %oristi za sme4tanje podata%a u bazu. )a primerF tar -cf backup.tar /usr/local/pgsql/data <va su ograni1avaju3a $a%tora %oja ovaj metod 1ine nepra%ti1nim ili bar lo4ijim od pgWdump metodaF
!%
pad sistemaD baza mo"e biti podignuta OponavljanjemP doga-aja. 2ogu3e je %ombinovati be%ap $ajl sistem nivoa i be%ap AA0 datote%a. U%oli%o je be%ap potrebanD uradi se restore be%apa a onda se ponavljenjem doga-aja baza dovodi do poslednjeg stanja. &vaj pristup je najslo"enijiD ali ima ne%e va"ne prednostiF )ije potreban potpuno dosledan be%ap u samom startu. .va%a nedoslednostD ne%onzistentnost 3e biti ispravljena iz postoje3eg loga.
)ije neopBodno ponoviti AA0 datote%e od starta do samog %raja. .amim timD ova teBni%a podr"ava "oint1 in1time reco er8 C mogu3e je obnoviti bazu na stanje %a%vo je bilo u bilo %om vremens%om periodu. U%oli%o se %ontinualno AA0 datote%e poBranjuju na ne%u drugu ma4inuD postoja3e jo4 jedna %opija baze.
Uz pomo3 ovog metoda mogu3e je obnoviti celi %laster baze podata%a ali ne i podgrupe. ,a%o-eD zaBtevan je i po pitanju veli1ine podata%a i %oli1ini mre"nog saobra3ajaD no i dalje je to najpreporu1ljivija metoda u situacijama %ada se zaBteva viso%a pouzdanost. Kori43enje metode on=line be%apa zaBteva nepre%inutu se%vencu AA0 datote%a %oje se vremens%i prostiru najmanje od po1et%a be%apa. <a%leD pre nego se po1ne sa be%apomD neopBodno je podesiti i testirati proceduru za arBiviranje AA0 datote%a.
&va %omanda %opira AA0 segment %oji 3e biti arBiviran u dire%torijum 7mnt7server7arcBivedir. )eopBodno je %omanda za arBiviranje vrati zero eLit status i te% tada mo"emo bitzi sigurni da je ono uspe4no obavljeno. ,ada 3e AA0 segment biti obrisan. )onzero status saop4tava Postgre./0=u da $ajl nije arBiviran i ovaj 3e periodi1no po%u4avati da izvr4i %omandu do% ne uspe. Komanda za arBiviranje bi trebala da bude ta%o dizajnirana da odbija pisanje novog $ajla pre%o starog. ,o je prvi razlog zbog %oga treba izvr4iti testiranje a drugi je da vra3a non&ero stat$s u ovom slu1aju. KomandaF archi)eFcommand @ Jtest Y -f .../Uf && cp Up .../UfJ
!&
%ompletnu putanju do meste gde se "eli sa1uvati be%ap $ajl@ 3. 8zvesti be%apD %oriste3i bilo %oju $ajl sistem alat%u %ao 4to su tar ili cpio 4. Ponovo se %onet%tovati na bazu %ao super%orisni% i dati %omandu
'#2#!% pgFstopFbackupABC
!. Kada su AA0 segment $ajlovi arBivirani %ao deo redovne a%tivnosti bazeD proces je zavr4en
". U%loniti bilo %oji $ajl prisutan u pgF-log/; u%oli%o pgF-log/nije arBiviran uop4teD potrebno ga je ponovo
%reirati i biti siguran da je %reiran i poddire%torijum pgF-log/archi)eFstatus/ ta%o-e.
#. U%oli%o postoje nearBivirani AA0 segment $ajlovi %oji su sa1uvani u %ora%u 2D %opirati iB u pgF-log/. $. Kreirati $ajl za %omandu obnavljanja reco)er .conf u %lasteru dire%torijuma podata%a. %. Po%renuti postmaster. &n 3e preimenovati $ajl reco)er .conf u reco)er .done.
. Proveriti sadr"aj baze da bi se uverili da je obnavljanje uspe4no ura-eno. U%oli%o nijeD potrebno je vratiti se na %ora% 1.
"'
PO"LAVLJE
C 7AKLJU9AK
Bilo bi +eoma opirno na o+om mestu de<inisati i razmatrati prednosti ,i mane- open source so<t=are-a( te *e u na>kra*im crtama biti na+edeni samo po>edini detal>i. 9sno+na prednost 0inu?-a >este sta&i#nost i sig'rnost. Prema kompani>i .ymantec posto>i oko 12'''' +irusa ko>i napada>u @indo=s i oko "'' ko>i napada>u 0inu? A 0inu? >e si urni>i i man>e ran>i+. Bsled entuzi>azma open source za>ednice uoCeni problem sa ran>i+o*u operati+no sistema se rea+a proseCno za nedel>u dana. :od @indo=sa 9. se na DzakrpuE Ceka proseCno oko !" dana. B proseku( @indo=s Dnezakrpl>enaE maina bude napadnuta nakon >edno sata pro+edeno na internetu. (ena OS A cena od 13'F za ,samo- @indo=s u odnosu na cenu skidan>a 0inu?-a sa interneta ili cenu rezan>a nekoliko praznih cd medi>a. Gene dodatnih pro rama znatno po+e*a+a>u o+u razliku. B za+isnosti od to a ko>a se distribuci>a 0inu?a koristi( one ukl>uCu>u i mo u*nost instaliran>a i do nekoliko hil>ada pro rama tokom same instalaci>e sistema. Po!esi)ost i ontro#a 0inu?-a ko>i doz+ol>a+a direktan pristup Cita+om sistemu. 9 )a#itet' 0inu?-a o+ori podatak da oko #'H ser+era radi pod o+im operati+nim sistemom( da a koristi i anti pout 54.4-e( 2oo la( )BI-a( 5o+ella... 0inu? se koristi od desktop raCunara( preko mobilnih tele<ona i +ideo ureJa>a do superkomp>utera. Veliki bro> preduze*a( banaka( uni+erziteta( internet pro+a>dera i ser+era( a sad i s+e +e*i bro> korisnika koristu ba 0inu? za 9.. Ino e <irme razmil>a>u da ni>e potrebno ula ati hil>ade e+ra na Iicroso<t-o+e operati+ne sisteme ko>i nisu bezbedni( si urni( a ni stabilni poput 0inu?a. .+e >e +e*i bro> dr7a+nih administraci>a ko>e prelaze sa @indo=s-a na 0inu?. 0inu? >e zbo s+o>e cene naroCito interesantan u zeml>ama u raz+o>u. :onkretno( u naem sluCa>u( nakon >edne deceni>e maksimalno rasprostran>ene pirateri>e preduze*a i dr7a+ne ustano+e ima>u pred sobom izbor A platiti mno o za posto>e*i 9. ili pre*i na 0inu?. 5edostaci prelaska na 0inu? su nedo+ol>na in<ormatiCka obrazo+anost zaposlenih de >e potrebno ulo7iti u n>iho+u obuku( i pre s+e a cena mi raci>e. )nteresantan >e i podatak da su B5 preporuCile s+o>im Clanicama kori*en>e open source so<t=are-a( naroCito u podruC>ima zdra+st+a( pros+ete i meJunarodne tr o+ine. 5aznaCeno >e da >e prema B5 open source na>adek+atni>e sredst+o za raz+o> s+o>ih Clanica. Post re./0 baza podataka( iako ni>e na>br7a( na mno im testo+ima >e okarakterisana kao na>napredni>a baza podataka. )nspirisana >e 9raclom i od samo starta podr7a+a transakci>e( tri ere( re<erenci>alni inte ritet. Preporuke za n>eno kori*en>e su +ie u pra+cu pro+ereno k+aliteta i robustnosti ne o samih "1
per<ormansi. :orisnici Post re./0-a su izmeJu ostalih B5)G8K( Gisco i 4merican Ghemical .ociety. La kra>( prikazana >e tabela odnosa nekoliko na>popularni>ih baza2: *eat're 9pen .ource Kree / 5o 0icense Gosts 4G)N Gompliant 45.) ./0 Gompliant 3e<erential )nte rity 3eplication 3ules Vie=s 6ri ers Bnicode .eOuences )nheritance 9uter Poins .ub-selects 9pen 4P) .tored Procedures 5ati+e ..0 .upport Procedural 0an ua es )nde?es SQL Ser)er Ora+#e M,SQL M M PostgreSQL M M M M M M M M M M M M M M M M M M M
M M M M M M M
M M M M M M
M M M M M M M M M M M M M M M M
M M M M M
BttpF77support.summersault.com7GB+WpostgresKl.Btml
"2
DODATAK C PgAccess
PgAccess je jo4 jedan gra$i1%i program za upravljanje Postgre./0 bazom. 'udu3i da je PgAdmin 888 ve3 predstavljan uporedo sa terminals%i programom psKlD ovde 3e u veoma %rat%im crtama biti nazna1ene samo razli%e PgAccessa u odnosu na PgAdminD odnosno opcije %oje PgAccess ima. Prvo je potrebno s%inuti ga sa internetaD npr sa adreseF BttpF77sGitcB.dl.source$orge.net7source$orge7pgaccess7pgaccess=(W Postupa% instalacije je slede3iF tar -)fH pgaccess-=.KK.=.2==4=21K.tar.gH cd pgaccess-=.KK.=.2==4=21K su make clean make all W(W2((4(21 .tgz
5de je ime baze je npr m db Korisni%7user postgres 0ozin%a7passGord C lozin%a usera postgres <a%leD %ao na slece3oj sliciF
"3
slika 2!. )a%on %one%tovanja na bazuD dobijamo prozor sa slede3e sli%e. U samom startu su o1igledne razli%e dva ovde spomenuta gra$i1%a programa za postgres. &vde 3e samo sli%om biti pri%azane mogu3nosti PgAccessa %oje PgAdmin nema.
slika 2#.
"!
slika 3$.
slika 31.
""
R(-%&$#
slika 33.
"#
.%&5 0(#i4)
slika 34.
"$
LITERATURA
1. Postgre./0 8.1.3 <ocumentation 2. Addison Aesle+ = Postgre./0 = 8ntroduction and 6oncepts 3. &T?eill+ == ./0 in )utsBell 4. &T?eill+ = Practical Postgre./0 !. 8nternet izvoriF
= = = = = =
"%