You are on page 1of 58

Seminarski rad PostgreSQL baza podataka na Linux operativnom sistemu

PostgreSQL BAZA PODATAKA NA LINUX OPERATIVNOM SISTEMU


Predmet: Baze podataka

- Seminars i ra! -

Seminarski rad PostgreSQL baza podataka na Linux operativnom sistemu

Kan!i!at "oran Ma#e$

Seminarski rad PostgreSQL baza podataka na Linux operativnom sistemu

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

Seminarski rad PostgreSQL baza podataka na Linux operativnom sistemu

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

Vie na internet adresi http://db.cs.berkeley.edu//post res.html

Seminarski rad PostgreSQL baza podataka na Linux operativnom sistemu

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&.

"

Seminarski rad PostgreSQL baza podataka na Linux operativnom sistemu

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

2.1. K&(i&a)'( *a+(


Ma %reiranje bazeD %oja 3e u ovom slu1aju biti nazvana m+dbD se %oristi slede3a %omandaF # createdb m db &dgovor da je sve ura-eno %ore%tno 3e izgledati !"#$%# D$%$&$'# U%oli%o je odgovor druga1ijiD na primerF createdb( command not found

Seminarski rad PostgreSQL baza podataka na Linux operativnom sistemu

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

&dgovor mo"e biti i ova%avF

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

Seminarski rad PostgreSQL baza podataka na Linux operativnom sistemu

su : postgres

2.2. P&i#$,-a)'( *a+i


Iednom %reiranoj bazi mo"e se pristupiti na slede3a tri na1inaF a) Korienjem PostgreSQL interakti nog termina! "rograma psql# koji omog$a a ot aranje# e%ito anje i i& ra anje SQL koman%i' .eminars%i se bazira na ovoj opcijiD mada 3e biti pri%azani i drugi na1ini za pristupanje bazi. Pristupanje iz terminals%og programa je najzgodnije iz ne%oli%o razloga C la%a mogu3nost administracije sa udaljene ma4ine pomo3u ..9 ili ne%og drugog proto%olaD %ori43enje sviB mogu3nosti baze >4to u ostalim na1inina pristupa nije mogu3e@ i najva"nija je prodiranje u samu sr" problemati%e Postgre./0 baze 4to eventualno na%nadno %ori3enje gra$i1%iB programa 1ini znatno la%4im. Po%re3e se saF psql m db dobija se ova%av odgovorF

;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@#

sada se moze isprobati recimo ova%va %omandaF

m db@# '#2#!% )ersionABC

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

Seminarski rad PostgreSQL baza podataka na Linux operativnom sistemu

ili

m db@# '#2#!% currentFdateC

dobijamo otpili%e ova%av odgovorF

date -----------2==D-=5-2D A1 rowB

ili

m db@# '#2#!% 2 G 2C

dobijamo ova%av odgovorF

6column6 ---------4 A1 rowB

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

Ma izlaza% iz psKlD %uca se

m db@> ?q i psKl prestaje sa radom i vra3a 0inu%sov terminal.

&

Seminarski rad PostgreSQL baza podataka na Linux operativnom sistemu

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'

Seminarski rad PostgreSQL baza podataka na Linux operativnom sistemu

slika 2.

<obijamo prozor %ao na slici 3. Potrebno je popuniti slede3a poljaF

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

Seminarski rad PostgreSQL baza podataka na Linux operativnom sistemu

Slika 4.

c) Na"isati s oj$ so"st en$ a"!ikacij$# koristei je%an o% mnogi+ "o%r/ani+ "rogramski+ je&ika

12

Seminarski rad PostgreSQL baza podataka na Linux operativnom sistemu

PO"LAVLJE 3 C OSNOV0 SQL1a


3.1. U1%0
Potrebno je napomenuti da su ne%e Postgre./0 $un%cije pro4irenje standardniB. U slede3im primerima oslanjamo se na pretpostav%u da se nastavlja rad na pretBodno napravljenoj m+db bazi i da je po%renut program psKl.

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.

3.3. K&(i&a)'( $a*(/(


,abela se mo"e %reirati odabirom imena tabeleD zajedno sa nazivima %olona i tipovima podata%aF

!"#$%# %$&2# )reme A grad )archarA<=B> tempFnis int> tempF)is int> pad) real> datum date BC

-- na8niHa temperatura -- na8)isa temperatura -- pada)ine

Ka%o dolazi do preloma redovaD u psKl=u 3e %reiranje ove tabele izgledati ova%oF

13

Seminarski rad PostgreSQL baza podataka na Linux operativnom sistemu

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

-- na8niHa temperatura -- na8)isa temperatura -- pada)ine

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

3.3.1. K&(i&a)'( *a+( i $a*(/( #a P4A05i)


U%oli%o baza ve3 nije %reiranaD mo"emo je napraviti odabirom opcije Edit)eG &bject)eG <atabaseD %ao na slede3oj sliciF

1!

Seminarski rad PostgreSQL baza podataka na Linux operativnom sistemu

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"

Seminarski rad PostgreSQL baza podataka na Linux operativnom sistemu

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#

Seminarski rad PostgreSQL baza podataka na Linux operativnom sistemu

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$

Seminarski rad PostgreSQL baza podataka na Linux operativnom sistemu

slika 12.

3.4. P%-,)'a1a)'( $a*(/( &(0%1i5a


Ma popunjavanje tabele redovma se %oristi %omanda +*'#"%( +*'#"% +*%9 )reme I$2,#' AJ*o)i 'adJ> 12> 21> =.=> J2==D-=5-2<JBC

,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%

Seminarski rad PostgreSQL baza podataka na Linux operativnom sistemu

+*'#"% +*%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.

3.4.1. P%-,)'a1a)'( $a*(/( &(0%1i5a #a P4A05i)


<esnim %li%om na tabelu OvremeP i odaborim opcije OHieG <ataP se mo"e izvr4iti editovnaje tabele.

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&

Seminarski rad PostgreSQL baza podataka na Linux operativnom sistemu

2'

Seminarski rad PostgreSQL baza podataka na Linux operativnom sistemu

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

)zlaz *e iz ledati o+ako:


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

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

Seminarski rad PostgreSQL baza podataka na Linux operativnom sistemu

,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

2o"e se zaBtevati i da dupirani redovi budu u%lonjeni iz rezultata upitaF

'#2#!% D+'%+*!% grad 7"9N )remeC

?ezultatF

grad ----------*o)i 'ad Lren8anin A2 rowsB

8 u ovom slu1ajuD ispis redova mo"e da varira. <a bi redosled bio ta1no ona%av %a%av "elimo da vidimoD zajedno

22

Seminarski rad PostgreSQL baza podataka na Linux operativnom sistemu

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.

3.5.1. U-i$i #a P4A05i)


8%onica ./0 alata je pri%azana na slici 16. ?ezultat upita je pri%azan na slici 1#.

./0 alat

slika 1 .

slika 1".

23

Seminarski rad PostgreSQL baza podataka na Linux operativnom sistemu

3.6. U0&,7i1a)'( $a*(/a


Upiti mogu da pristupe u vi4e tabela istovremeno ili da pristupe jednoj tabeli ta%o da vi4e redova tabele budu obra-eni u isto vreme. Upit %oji pristupa %a vi4e redova jedne tabele ili %a razli1itim tabelama istovremeno se naziva join upit. ?ecimo da se "ele izlistati svi vremens%i zapisi zajedno sa lo%acijom grada. <a bi se to uradiloD potrebno je porediti %olonu OgradP sva%og reda tabele OvremeP sa imenom %olone sviB redova u tabeli OgradoviP i odabrati par7%ombinaciju redova tamo gde se vrednosti podudaraju. Upit 3e izgledati ova%oF '#2#!% P 7"9N )reme> grado)i ;O#"# grad @ naHi)C "eHultat( 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 A5 rowsB Potrebno je obratiti pa"nju na dve mogu3nosti u rezultatuF

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!

Seminarski rad PostgreSQL baza podataka na Linux operativnom sistemu

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"

Seminarski rad PostgreSQL baza podataka na Linux operativnom sistemu

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

?ezultatF #""9"( aggregates not allowed in ;O#"# clause

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#

Seminarski rad PostgreSQL baza podataka na Linux operativnom sistemu

?ezultatF grad Q ma-----------G----*o)i 'ad Q 12 Lren8anin Q E &eograd Q 4 A5 rowsB

?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

grad Q ma-----------G----Lren8anin Q E &eograd Q 4 A2 rowsB

<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$

Seminarski rad PostgreSQL baza podataka na Linux operativnom sistemu

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%

Seminarski rad PostgreSQL baza podataka na Linux operativnom sistemu

3.1<. Na-&(0)( 8,)93i'(


3.1<.1. P%4/(0i =Vi(>#?
U%oli%o su odre-eni podaci od naro1itog interesa za apli%aciju i ne "eli se sva%i put iznova %ucati upitD mo"e se %reirati pogled nad upitomD %oji upitu daje imeF !"#$%# I+#; pregled $' '#2#!% grad> tempFnis> tempF)is> pad)> datum> lokaci8a 7"9N )reme> grado)i ;O#"# grad @ naHi)C UpitF '#2#!% P 7"9N pregledC 3.1<.1.1. P%4/(0i #a P4A05i) Analogno pretBodnom %reiranju nove tabele. %reira se i novi vieG. &dabirom opcije .erversseminars%i <atabasesm+db.cBemaspublic dobija se mobu3nost %reiranja novog pogleda. <obija se prozor u %om je potebno nazna1iti ime pogledaD u ovom slu1aju OpregledP i odrediti vlasni%a. )a slede3em tabuD <e$initionD pri%azan je ./0 %od.

slika 1!.

slika 1#.

3.1<.2. .%&(i4) K(@#


U%oli%o se javi potreba da se ne dozvoljava uno4enje redova u tabelu vreme u%oli%o se ne "eljeni podaci ne javljaju i u tabeli gradovi problem se re4ava re$erencijalnim integritetom podata%a. Prili%om %reiranje tabele %oristi se slede3i ./0F

2&

Seminarski rad PostgreSQL baza podataka na Linux operativnom sistemu

!"#$%# %$&2# grado)i A grad )archarA<=B primar lokaci8a point BC

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'

Seminarski rad PostgreSQL baza podataka na Linux operativnom sistemu

)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

Seminarski rad PostgreSQL baza podataka na Linux operativnom sistemu

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 &#0+*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

Seminarski rad PostgreSQL baza podataka na Linux operativnom sistemu

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 &#0+*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

- 1==.== G 1==.== /erin nalog G 1==.==

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

!"#$%# %$&2# prestonice A drHa)a charA2B B +*O#"+%' Agrado)iBC

33

Seminarski rad PostgreSQL baza podataka na Linux operativnom sistemu

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

)li( samo prestonice:


'#2#!% ime> nadmF)is 7"9N 9*2M prestonice ;O#"# nadmF)is > 3=C ?ezultatF ime Q nadmF)is ---------G---------&eograd Q 11D Nosk)a Q 2== A2 rowsB

3!

Seminarski rad PostgreSQL baza podataka na Linux operativnom sistemu

&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"

Seminarski rad PostgreSQL baza podataka na Linux operativnom sistemu

PO"LAVLJE 4 C AD3INIST4ACIJA S04V04A


4.1. P%#$4&(SQL 9%&i#)iB9i )a/%+i
Kao i drugi deamon serveri %oji su dostupni iz Ospoljnjeg svetaP preporu1ljivo je po%retati Postgre./0 pod odvojenim %orisni1%im nalogom. ,a%av nalog treba da je vlasni% samo podata%a %ojima upravlja serverD i ne treba biti deljen sa ostalim daemonima. Ma dodavanje %orisni%a na UniL sistemima %oristi se %omanda useradd or adduser %a%o je ve3 pretBodno navedeno.

4.2. K&(i&a)'( 9/a#$(&a *a+( -%0a$a9a


Prvo je potrebno de$inisati prostor na dis%u za bazu. ./0 %oristi termin %atalog %laster a Postgre./0 %laster baze podata%a. Klaster baze podata%a je s%up baza %ojima se upravlja jednim po%retanjem date baze. )a%on inicijalizacije %laster baze podata%a 3e po%retati bazu pod imenom postgresD %oja je de$ault baza. .am server baze podata%a ne zaBteva postojanja pomenute bazeD ali mnogi drugi pomo3ni programi pretpostavljaju da ona postoji. Klaster baze podata%a 3e biti jedan dire%torijum u %om 3e biti poBranjivani svi podaci. )aziv je %irektorij$m "o%ataka ili o5!ast "o%ataka. Po osnovnim postav%ama nema ta1no odre-enog dire%torijuma %oji 3e slu"iti za toD mada se naj1e43e %oriste /usr/local/pgsql/data ili /)ar/lib/pgsql/data. <a bi se inicirao %laster baze podata%a %oristi se %omanda initdb. &dabir lo%acije u $ajl sistemu se odre-uje %omandomF # initdb -D /usr/local/pgsql/data

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#

Seminarski rad PostgreSQL baza podataka na Linux operativnom sistemu

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.

4.3. P%9&($a)'( #(&1(&a *a+( -%0a$a9a


Pre nego 4to se pristupi bazi podata%a potrebno je po%renuti server. Program servera baze podata%a se zove postmaster i on mora znati gde se nalaze podaci %oje treba da %oristi. Komanda # postmaster -D /usr/local/pgsql/data ostavlja server da radi vidljiv. &va %omanda se mo"e %oristiti samo u%oli%o je ulogovan Postgre./0 %orisni1%i nalog. 'olje je %oristiti postmaster ta%o da radi u pozadiniF # postmaster -D /usr/local/pgsql/data >logfile 2>&1 & Program postmaster poseduje veli%i broj drugiB opcija u %omandnoj linijiD 4to brzo mo"e postati naporno za %ori43enje. Mato se mo"e %oristiti program pgWctlD na primer %omandaF pgFctl start -l logfile

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$

Seminarski rad PostgreSQL baza podataka na Linux operativnom sistemu

4.4. M%4,C( 4&(D9( -&i/i9%5 -%0i+a)'a #(&1(&a


)e%oli%o gre4a%a se dosta 1esto ponavljaju. Prili%om podizanja servera je mogu3e dobiti poru%uF 290( could not bind +/)4 socket( $ddress alread in use O+*%( +s another postmaster alread running on port 34526 +f not> wait a few seconds and retr . 7$%$2( could not create %!//+/ listen socket

)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@.

4.5. M%4,C( 4&(D9( -&i/i9%5 9%)(9$%1a)'a 9/i'()a$a


2ada su ova%ve gre4%e naj1e43e uzro%ovane samom apli%acijomD mogu3e su i gre4%e uzro%ovane na1inom %a%o je server startovan. 5re4%aF psql( could not connect to ser)er( !onnection refused +s the ser)er running on host .ser)er.8oe.com. and accepting %!//+/ connections on port 34526 )aj1e43e je uzro% ova%ve gre4%e neomogu3avanje ,6P78P %one%cije prili%om %on$iguracije servera. 8liF psql( 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 Poslednja linija je %orisna po4to po%azuje da li %lijent po%u4ava da se %one%tuje na pravo mesto. U%oli%o na tra"enom mestu zaista nije po%renut serverD tipi1na poru%a 3e biti ili !onnection refused ili *o such file or director ( %a%o je i pretBodno ilustrovano. Pri tomeD treba imati na umu da !onnection refused ne

3%

Seminarski rad PostgreSQL baza podataka na Linux operativnom sistemu

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.

4.6. "aD()'( #(&1(&a


Postoji ne%oli%o na1ina za ga4enje servera. )a1in ga4enja se mo"e %ontrolisati slanjem razli1itiB signala postmaster procesimaF .85,E?2 )a%on primanja ovog signalaD server ne dozvoljava nove %one%cije ali dozvoljava postoje3im sesijama da zavr4e svoj posao bez ometanja. &vo je ta%ozvano "ametno gaenje >Smart S+$t%o.n@. .858), .erver ne dozvoljava nove %one%cije i 4alje svim postoje3im procesima .85,E?2D 4to 3e izvr4iti momentalni pre%id sviB transa%cija. ,ada se 1e%a zavr4avanje procesa samog servera i na%on toga se ovaj gasi. &vo je 5r&o gaenje >6ast S+$t%o.n@. .85/U8, &vo je momentalno ga4enje >Imme%iate S+$t%o.n@. Preporu1uje se samo u najBitnijim slu1ajevimaD server se ne gasi pravilno 4to uzro%uje oporava% prili%om slede3eg startovanja.

4. . Si4,&)( TCPEIP 9%)(93i'( #a SSF $,)(/i5a


Prvo je potrebno uveriti se da je podignut ..9 server na istoj ma4ini na %ojoj je i Postgre./0 server i da je mogu3e ulogovati se na %oriste3i ..9 %ao ne%i od postoje3iB %orisni%a >npr. root = u %rajnjem slu1aju@. ,ada se uspostavlja tunel sa %lijents%e ma4ine %omandomF ssh -2 5555(nekiFser)er.co. u(3452 nekoWnekiFser)er.co. u Prvi brojD 3333 je broj porta na %lijents%om %raju tunela C on mo"e biti odabran slobodno. .lede3i brojD !432 je broj porta udaljenje ma4ine C broj porta %oji %oristi server. 8me ne%iWserver.co.+u ili 8P adresa npr 212.62.LL.LL je ime ma4ine na %ojoj se nalazi Postgre./0 server. ne%o je naziv %orisni1%og naloga na udaljenoj ma4ini. Prvo se %one%tuje na port 3333 na lo%alnoj ma4iniF psql -h localhost -p 5555 postgres .erver proverava da li je zaista u pitanju %orisni% ne%oXne%iWserver.co.+u U%oli%o je dozvoljena sigurna ssB %one%cija za pomenutog %orisni%aD pode4avanje tunela 3e biti uspe4no.

4.:. U/%4( i -&i1i/(4i'( *a+( -%0a$a9a


Postgre./0 upravlja dozvolama za pristup bazi podata%a %oriste3i %oncept $!oga >ro!es@. Uloga mo"e biti organizovana %ao %orisni% baze podata%a ili %ao grupa %orisni%a. Uloge mogu biti vlasnici obje%ata baze podata%a >tabelaD npr@ i mogu dodeljivati privilegije za navedene obje%te drugim ulogamaD 1a% je mogu3e dodeljivanje )!anst a drugim ulogama dozvoljavaju3i drugim ulogama privilegije %oje i sami imaju. Koncept uloga obuBvata %oncept O%orisni%aP i OgrupaP. U verzijama Postgre./0=a starijim od verzije 8.1. %orisnici i grupe su bili odvojene vrste entitetaD ali od pomenute verzije u pitanju su samo uloge. 'ilo %oja uloga se mo"e pona4ati %ao %orisni%D grupa ili oboje.

3&

Seminarski rad PostgreSQL baza podataka na Linux operativnom sistemu

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%.

4.:.2. O#%*i)( ,/%4a


Uloga mo"e imati mnogo osobina %oje 3e de$inisati njene privilegije i %omunicirati sa sistemom za autorizaciju %lijenta. -&i1i/(4i'a +a /%4%1a)'( .amo uloge %oje imaju 0&58) osobinu mogu biti %ori43ene %ao inicijalne uloge za %one%ciju na bazu podata%a. ,a%ve uloge se mogu smatrati %ao O%orisnicima baze podata%aP. <ve mogu3e %omandeF !"#$%# "92# ime 290+*C !"#$%# ,'#" imeC >6?EA,E U.E? je e%vivalnetno sa 6?EA,E ?&0E s tim da prvi priBvata 0&58) po po1etnim postav%amaD do% drugi ne@ #$a$,# #,-(&9%&i#)i9a .uper%orisni% baze podata%a zaobilazi sve provere dozvola. U principuD to je opasna privilegija i ne bi je trebalo %oristiti bez brigeD uve% se preporu1uje da se najve3i deo posla obavlja sa ulogom %oja nije super%orisni%. Ma %reiranje novog super%orisni%aD %oristi se %omanda !"#$%# "92# ime ',/#",'#"

!'

Seminarski rad PostgreSQL baza podataka na Linux operativnom sistemu

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.

4.:.4. !/a)#$1% , 4&,-i ,/%4a


:esto je zgodno napraviti grupe %orisni%a zbog ola%4avanja posla sa dodeljivanjem privilegija. )a taj na1in je mogu3e dodeliti ili opozvati privilegiju svim 1lanovima grupe odjednom. U Postgre./0=u ovo je u1injeno ta%o 4to

!1

Seminarski rad PostgreSQL baza podataka na Linux operativnom sistemu

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

Seminarski rad PostgreSQL baza podataka na Linux operativnom sistemu

PO"LAVLJE 5 C UP4AVLJANJ0 ,A7A3A PODATAKA


5.1. U1%0
'aza podata%a je imenovana %ole%cija ./0 obje%ata. 5eneralnoD sva%i obje%at baze podata%a >tabeleD $un%cije itd@ pripadaju samo jednoj bazi >osim svega ne%oli%o sistem %atalogaD npr pgFdatabase( %oja pripada celom %lasteru i dostupna je sva%oj bazi u o%viru %lastera@. PreciznijeD baza podata%a je s%up 4ema a 4eme sadr"e tabeleD $un%cije i sl. Potpuna BijerarBija jeF serverD baza podata%aD 4emaD tabela >ili ne%i drugi obje%atD npr $un%cija@. Prili%om %one%tovanja na server baze podata%aD %lijent mora da speci$icira naziv baze %ojoj "eli da pristupi. )ije mogu3e pristupiti na vi4e baza istovremeno prili%om iste %one%cije >ali apli%acije nisu ograni1ene u broju %one%cija@. 'aze su $izi1%i razdvojene. 'aza se %reira sa 6?EA,E <A,A'A.E %omandom a bri4e <?&P <A,A'A.E %omandom. <a bi se utvrdio broj postoje3iB bazaD treba istra"iti pgFdatabase sistem %atalogD na primerF '#2#!% datname 7"9N pgFdatabaseC

5.2. K&(i&a)'( *a+( -%0a$a9a


<a bi se %reirala bazaD Postgre./0 server mora biti po%renut. Kao 4to je ve3 pretBodno navedenoD %omanda jeF !"#$%# D$%$&$'# imeC

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

Seminarski rad PostgreSQL baza podataka na Linux operativnom sistemu

,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.3. Ga*/%)i *a+a -%0a$a9a


6?EA,E <A,A'A.E $un%cioni4e ta%o 4to %opira postoje3u bazu. Po po1etnim pretpostav%amaD %opira standardnu sistems%u bazu template1. U%oli%o se bilo 4ta izmeni na navedenoj baziD to 3e uticati na sve ostale baze %oje se budu %reirale. )a primerD u%oli%o se instalira proceduralni jezi% P07pg./0 u template1( on 3e automats%i biti dostupan %orisni%ovim bazama. Postoji i druga standardna sistems%a baza po imenu template(. ,a baza sadr"i iste podat%e %ao i template1( samo se ni%ada ne menja te je %orisna za na%nadna %reiranja baza podata%a %oja nemaju potrebe za izmenama u1injenim u template1. Ma %reiranje baze %opiranjem template= %oristi se %omanda za ./0 o%ru"enjeF !"#$%# D$%$&$'# bpime %#N/2$%# template=C 8li u terminalu createdb -% template= bpime 2ogu3e je %reirati i sopstveve 4ablone baza podata%a.

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

!!

Seminarski rad PostgreSQL baza podataka na Linux operativnom sistemu

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

!"

Seminarski rad PostgreSQL baza podataka na Linux operativnom sistemu

PO"LAVLJE 6 C ,ACKUP i 40STO40


Kao i sve 4to sadr"i dragocene podat%eD i Postgre./0 bi trebalo be%apovati >praviti rezervnuD sigurnosnu %opiju@ redovno. Postoje tri $undamentalno razli1ita pristupa za be%apovanje Postgre./0 podata%a.

./0 dump 'e%ap $ajl sistem nivoa &n=line be%ap

.va%i od ova tri pristupa ima svoje snage i slabosti.

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.

6.1.1. O*)a1/'a)'( 0,5--a


,e%stualni $ajl %reiran uz pomo3 pgWdump se 1ita u psKl programu. &snovna %omanda za obnavljanjeD ponovno u1itavanje dump=a jeF psql bpime S infile gde je infile ono 4to se %oristilo %ao outfile u pgWdump %omandi. 'aza 5"ime ne3e biti %reirana ovom %omandomD baza se mora %reirati iz template( pre po%retanja psKl=a >na primer %omandom

!#

Seminarski rad PostgreSQL baza podataka na Linux operativnom sistemu

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

&bnavljanjeF psql -f infile postgres

6.1.2. U-&a1/'a)'( 1(/i9i5 *a+a5a


Ka%o Postgre./0 dozvoljava tabele ve3e od ma%simalne veli1ine datote%e na operativnom sistemu javlja se problem damp=ovanja ta%ve tabele u datote%u. 'udu3i da pgWdump mo"e da zapisuje u standardni izlazD dovoljno je %oristiti standardne UniL alat%eF K%5-&(#%1a)'( 0,5--a H mo"e se %oristiti bilo %oji program za %ompresovanjeD na primer gzip pgFdump bpime Q gHip > imefajla.gH

Ponovo se po%re3e sa createdb bpime gunHip -c imefajla.gH Q psql bpime

ili

cat imefajla.gH Q gunHip Q psql bpime

!$

Seminarski rad PostgreSQL baza podataka na Linux operativnom sistemu

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

Ponovo se po%re3e sa createdb bpime cat imefajlaP Q psql bpime

6.1.3. Ba39,- #a P4A05i)


'ac%up je %rajnje jednostavanD ba4 %a%o je pri%azano na sli%ama 26 i 2#.

slika 2 .

slika 2".

6.2. B(9a- 8a'/ #i#$(5 )i1%a

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

1. .erver mora biti uga4en da bi se dobio upotrbljiv be%ap.


2. )emogu3e je be%apovati samo odre-ene delove baze.

6.3. O)-/i)( *(9a- i -%i)$-i)-$i5( &(3%1(&@ =PITR?


.ve vremeD Postgre./0 odr"ava .rite a+ea% !og >AA0@ u pgF-log/ poddire%torijumu %lasterovog data dire%torijuma. 0og opisuje sva%u promenu nad bazom i primarno postoji zbog sigurnosniB razlogaF u%oli%o se desi

!%

Seminarski rad PostgreSQL baza podataka na Linux operativnom sistemu

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.

6.3.1. P%0(Da1a)'( IAL a&Ji1i&a)'a


Postgre./0 sistem proizvodi neograni1eno duga1%u se%vencu AA0 zapisa. .istem $izi1%i deli se%vencu u AA0 segment datote%e %oje su veli1ine 162'. 8mena segmenata su numeri1%a i ona de$ini4u njiBovu poziciju u AA0 se%venci. ArBiviranje AA0 podata%a je mogu3e na 6<=uD prebacivanjem na drugu ma4inu ili ne4to tome sli1no. Postgre./0 pru"a administratoru veli%u $le%sibilnost i dozvoljava mu izbor %omande za %opiranje %ompletnog segmenta gde god po"eli. Komanda mo"e biti sasvim jednostavna %ao cp >cop+@. Komanda mo"e da izgleda ova%o >gde 3e sva%i Zp biti zamenjen sa apsolutnom putanjom $ajla %oji 3e biti arBiviran a sva%i Z$ sa imenom $ajla@F archi)eFcommand @ Jcp -i Up /mnt/ser)er/archi)edir/Uf S/de)/nullJ

&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

6.3.2. B(9a-%1a)'( *a+(


ProceduraF 1. Uveriti se da je AA0 arBiviranje omogu3eno i da ispravno $un%cioni4e 2. Kone%tovati se na bazuD %ao super%orisni% dati %omadu '#2#!% pgFstartFbackupAJlabelJBC gde je label ne%o ime pod %ojim se "eli sa1uvati ova operacija be%apovanja >dobro je opredeliti se za

!&

Seminarski rad PostgreSQL baza podataka na Linux operativnom sistemu

%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

6.3.3. O*)a1/'a)'( #a %)-/i)( *(9a- -&i#$,-%5


ProceduraF 1. Maustaviti postmasterD u%oli%o je po%renut 2. U%oli%o postoji mestaD %opirati celi %laster dire%torijuma podata%a i tablespaces ne ne%u privremenu lo%aciju za slu1aj da zatrebaju na%nadno. 3. &1istiti sve postoje3e $ajlove i poddire%torijume u %lasteru dire%torijuma podata%a i pod root dire%torijuma za sva%i tablespaces %oji se %oristi. 4. &bnoviti bazu. 'iti oprezan da se baza obnavlja pod pravilnim vlasni4tvom i sa pravilnim dozvolama >ni%a%o %ao root ve3 %ao %orisni% baze podata%a@ .

". 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.

"'

Seminarski rad PostgreSQL baza podataka na Linux operativnom sistemu

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

Seminarski rad PostgreSQL baza podataka na Linux operativnom sistemu

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

Seminarski rad PostgreSQL baza podataka na Linux operativnom sistemu

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

Po%re3e se %omandom pgaccess

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

Seminarski rad PostgreSQL baza podataka na Linux operativnom sistemu

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#.

"!

Seminarski rad PostgreSQL baza podataka na Linux operativnom sistemu

Vi#,a/ 0(#i4)(& ./0 upite je mogu3e izvr4avati uz pomo3 /uer+ builderaD

slika 3$.

ali >e iz /uer+ buildera mogu3e po%renuti Hisual designerF

slika 31.

""

Seminarski rad PostgreSQL baza podataka na Linux operativnom sistemu

R(-%&$#

slika 32. "&a8i9%)i

slika 33.

"#

Seminarski rad PostgreSQL baza podataka na Linux operativnom sistemu

.%&5 0(#i4)

slika 34.

"$

Seminarski rad PostgreSQL baza podataka na Linux operativnom sistemu

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
= = = = = =

GGG.postgreslK.org BttpF77gborg.postgresKl.org7 GGG.pgaccess.org BttpF77GGG.$eliLgers.de7teacBing7sKl7indeL.Btml BttpF77pgadmin.postgresKl.org7 BttpF77GGG.$leL.ro7pgaccess7tutorial7tut.Btml

"%

You might also like