340 likes | 488 Views
PostgreSQL. Milos Vesic Bojana Mitrovic. Istorijat. PostgreSQL objektno relacioni sistem za upravljanje bazama zasnovan na POSTGRES v4.2 razijen na Californiskom univerzitetu (Berkeley Computer Science Department).
E N D
PostgreSQL MilosVesicBojanaMitrovic
Istorijat • PostgreSQL objektno relacioni sistem za upravljanje bazama zasnovan na POSTGRES v4.2 razijen na Californiskom univerzitetu (Berkeley Computer Science Department). • POSTRGERS je sadrzao mnoge inovativne ideje za upravljanje bazama podataka koje su korioscene znatno kasnije. • PosgreSQL je open-source koji podrzava veliki broj SQL standarda i nudi • veliki broj modernih opcija kao sto su: -kompleksni upiti • -strani kljucevi • -okidaci • -pogledi • -i dr • naravno PostgreSQL je prosiriv i to u onim pravcima u kojima to korisniku najvise odgovara, • kao na primer: • -dodavanje novih tipova podataka • -dodavanje fukncija • -dodavanje operatora • -dodavanje proceduralnih jezika • -i dr. • I zbog svoje liberalne licence PostgreSQL moze biti modifikovan koriscen od strane svakog i prosledjivan takodje svakom.
PostgreSQL je nastao iz paketa razvijenog na Kaliforniskom univerzitetu u Berkliju.Nakona vise od dekade razvijanja PostgreSQL je postao najkompleksnija open-source baza podataka. • POSTGRES je projekat vodjen od strane Profresora Michael Stonebraker pod sponzorstvom DARPA(Defense Advanced • Research Projects Agency),ARO (Army Research Office),NSF(National Science Foundation) i drugih. • Implementacija je pocela 1986. • Nakon 1986 postgre i imao nekoliko zvanicnih verzija ali prva "demo" verzija zavrsena je 1987 da bi 1988 bila prikazana ACM-SIGMOD konferenciji. • Verzija 1 objavljena je juna 1989 ali zbog velikih gresaka na sistemu • godinu dana kasnije(Jun. 1990) objavljena je Verzija 2. • Odmah za njom u nizu dolazi i verzija 3. koja daje podrsku za upravljanje visestrukim memoriskim resursima i poboljsava izvsivac upita. • Na kon toga sledece vece izdanje dolazi '95 i nosi naziv Postgres95 i ono donosi dugo ocekivanu portabilnost. • Postgres je koriscen za implementaciju mnogih istrazivackih i produktivnih aplikacija • npr: anlizu finansiskih sistema,analizu baze za pracenje putanje asteroida,obrade medicinskih baza podataka,raznih geografskih informacionihj sistema. • Zbog svoje dostupnosti lako je nasao put do univerziteta gde je koriscen kao sredstvo za edukciju. • Na kraju 1992 POSTGRES postaje glavni sistem za upravljanje podacima da bi se do kraja godine broj njegovih korisnika prakticno udvostrucio. • Berkeley POSTGRES projekat je zvanicno bio gotov objavljivanjem verzije 4.2.
Postgres95 • 1994 Andrew Yu i Jolly Chen dodali su SQL jezicki interpretator POSTGRES-u i dali mu novo ime Postgres95. • Postgres95 je postepeno objavljivan na Web-u kako bi sam nasao put do korisnika. • Postgres95 je kompletno ANSI C., mnoge dorade na performansama ucinile su da bude cak da 30% brzi u odnosu na svog prethodnika. • Navece promene izvrsene su : • -upitni jezik PostQUEL zamenjen je sa SQL-om gde je dodata i GROUP BY naredba • -Nova front-end biblioteka • -Dodat mehanizam za upravljanje velikim objektima • -kompajliran pomocu ne pecovanog GCC • 1996 je bilo jasno da ce samo vreme pokazati da li je Postgres95 zaista toliko daobar. • Odabrano je novo ime PostgreSQL gde se jasno daje do znanja da je kompatibilan sa SQL • PostgreSQL imao je par znacajnijih verzija 0.03;1.00;1.01;1.02,cak se jedno vreme nije ni znalo koje su glavne izmene bile izvresne i zmedju ovih verzija ali je bilo siguno da treba instalirati 1.09 jer tu dodat COPY izlazni format i nakon toga tim odlucuje da se vrati na obelezavanje verzija po Berkliju, tj verzija 1.09 prelazi u verziju 6.0. • U svakoj novoj verziji dodavani su novi standardi i ubrzavao se sistem izvrsavanja upita -poslednja izdata verzija je 8.2.
Numericki tipovi podataka numericki tipovi podataka sadrze 2,4,8 byte-ne celobrojne brednosti 4,8 byte-ne razlomljene vrednosti
decimal i numeric su ekvivalentni,cuvju brojeve do 1000 cifara • korisnik definise preciznost i to u obliku • NUMERIC(preision,scale) • (precision)-odredjuje broj znacajnih cifara • (scale)-odredjuje broj cifara razlomljenog dela. • pr: • 25.432 • scale =3; • precision=5; • ukoliko se navede jedan broj podrazumeva se da je razlomljni deo 0; • ako se izostave oba parametra broj cifara je proizvoljan ali samo u granicama implementaciaj. • Tipovi real i double precision su u implementaciji IEEE 754 standarda. • u skladu sa tim neke vrednosti nece biti tacno zapamcene vec se pamtiti njihove aproksimacije. • serial i big serial nisu pravi tipovi podataka vec su samo konvencije u oznacavanju i sluze za postavljane jedinstvenog identifikatora kolone.
MonetarnitipoviMonetary types Sluzi za pamcenje iznosa sa fiksiranom preciznoscu razlomljenog dela. Uglavnom se ovaj tip zamenjuje sa numerics i decimal.
Karakterni tipoviCharacter types Broj n je pozitivan ceo broj i odredjuje mogucu duzinu niske. Kod char-a ukoliko se ne ispuni sav prostor naveden u inicijalizaciji prazna mesta se ispunjavaju blanco znacima,char uvek zauzima fiksnu vrednost zadatu brojem n kod varchar to nije slucaj jer se kod njega pamti sam string. char=char(1); Ako je n izostavljeno u varchar on prima string proizvoljne duzine. text-cuva string proizvoljne duzine. text nije u SQL standardu. Prostor za cuvanje ovih podataka(char,varchar,text) je 4 byte-a + velicina stringa a u slucaju char-a + prostor za cuvanje balnco znaka. Maximalni prostor za cuvanje jednog stringa je oko 1gb. Ne postoji razlika u radnim performansam izmedju ova tri tipa
ovo su interni tipovi koje koristi sistem i nisu namenjeni za koriscenje od strane korisnika.
Binarni tipoviBinary types • bytea omogucava cuvanje binarnog stringa. razlike izmedju binarnog stringa i stringa karaktera su: 1)binarni string moze cuvati nisku ispunjenu nulama i drugim ne printabilnim karaktere(van ranga 32-126) 2)operacije nad binarnim stringovima rade sa bitovima dok procesiranje karakternih stringova zavisi od lokalnih podesavanja. vrednosti byte-ova koji se unose trebaju bi razliciti od nekih specijalnih vrednosti kada se koriste kao delovi string literala u SQl izrazima.
princip je da se ti byte-ovi konvertuju u trocifrene oktalne brojeve odgovarajuce vrednosti ispred kojih stoje 2 backslash-a.
Datum/Vreme tipoviDate/Time types • PostgreSQL podrzava citav skup SQL tipova za datum i vreme. p-oznacava broj cifara razlomljenog dela sekundi. p uzima vrednost od 0 do 6 primer: p=2 tacost vremena je izrazena u stotinkama.
vrednosti tipa timestamp se cuvaju kao realni broj dvostruke preciznosti po defaultu. • vrednosti tipa timestamp se cuvaju kao sekunde pre ili posle ponoci 1.1.2000. • Preciznost u mikro sekundma se moze dobiti za datume u intervalu od nekoliko godina oko 2000godine ali tacnost opada sa udaljavanjem od tog intervala.Kada se vrednosti tipa timestamp cuvaju kao celi brojevi(sto je compile-time opcija)preciznost u mikro sekundama je dostupna u okviru citavog ranga. • Vrednosi tipa time i interval se mogu cuvati kao 8 byte-ne celobrojne vrednosti ili vrednosti u pokretnom zarezu.
Date/Time Input • datum i vreme se mogu biti uneti u bilo kom razumnom formatu npr:ISO8601,SQL i tradicionalnom POSTGRES formatu.
postavljanjem DateStyle parametra na MDY,DMY,YMD odredjujemo interpretaciju unetog vremena. • type [ (p) ] ’value’; • time=time with out time zone; TIME Stamps cuva datum +vreme+ [vremenska zona] na ovaj nacin unocimo vreme tj navodjenjem medju jednostrukim navodnicima TIMESTAMP ’2007-11-19 15:39:00’
Interval • tip interval sluzi za manipulaciju vremenskim intervalima. • unosi se na nacin: • iznos jedinica [iznos jedinica...] [ago ili prazno] • iznos je broj. • jedinice su second, minute, hour, day, week, month,year, decade, century, millennium ili skraenice ovih imenica ili njihove mnozine. • interno vrednosti tipa interval se cuvaju kao mesici,dana i sekunde.intervali se obicno formraju oduzimanjem vrednosti tipa timestamp. • primer koriscenja intervala: • timestamp with time zone ’2005-04-02 12:00’ + interval ’1 day’ • dace rezultat • timestamp with time zone ’2005-04-03 12:00’,
Specijalne vrednosti • postgreSQL podrzava nekoliko specijalnih vrednosti unosa vremena i datuma.
Date/Time output • kao izlazni format koriste se isti stilovi kao i za unos po defaultu je ISO8601 format.
Boolean type • Podaci tipa boolean mogu imati jednu od dve vrednosti TRUE i FALSE i koristi se jedan byte prostora za njihovo smestanje. • mogu biti uneseni na nacin:
Geometric types • geometriski tipovi predstavljaju dvo dimenzionalne objekte.
Postoji bogat skup funkcija i operatora koji rade sa ovim tipovima podataka(rotacija,skaliranje,translacija...) • pr: • Translacija: • box ’((0,0),(1,1))’ + point ’(2.0,0)’ • Scaliranje/rotatcija: • box ’((0,0),(1,1))’ * point ’(2.0,0)’
Network types PostgreSQL nudi tipove podataka za cuvanje ip adresa(IPv4 i IPv6) i MAC adresa. • inet- • ulazni format za ovaj tip: • adresa/c gde je adresa 32bitna u slucaju IPv4 ili 128bit-na ako je IPv6. • c je broj bitova mrezne maske(ako nije navedeno , c=32 za IPv4 odnosno 128 za IPv6). • cidr- • cuva adresu mreze ulazno izlazni format odgovara konvencijama Classless • Internet Domain Routing
Format unosa je isti kao kod inet-a sem ako bi ovde izostavili c, broj bitova bi se racunao na osnovu predpostavke klasnog sistema. • razlika: • za razliku od cidr inet prihvata vrednosti sa nenula bitovima desno od mrezne maske. • macaddir cuva jedinstvene mac adrese mreznog hardvera. • ulazni format je u obliku: • ’08002b:010203’ • ’08002b-010203’ • ’0800.2b01.0203’ • ’08-00-2b-01-02-03’ • izlazni format • ’08:00:2b:01:02:03’
Bit String types • Bitovni stringovi su stringovi nula i jedinica. • Mogu se koristiti u cuvanju i predstavljanju bit maski. • postoje dva tipa: • bit(n) • bit varying(n) • Dutina vrednost tipa bit mora biti tacno n. • Prilikom pokusaja smestanja kraceg ili duzeg bitonog stringa javlja se greska. • bit varying(n)- cuva string duzine do n. • bit=bit(1)
PstgreSQL omogucava rad sa vise dimenzionalnom nizovima proizvoljne duzine. • Tip podataka moze biti bilo koji od osnovnih tipova ili tipa definisanog od strane korisnika. • integer[][] • integer[3][3] • unos se vrsi sintaksom: • ’{ val1 delim val2 delim ... }’ • ARRAY[val1 delim val2 delim ...] • pr: • ’{{1,2,3},{4,5,6},{7,8,9}}’ • ARRAY[10000, 10000, 10000, 10000]
nizovma se pristupa preko indeksa koj pocinju od jedinice. • -pristup pravougaonom dela niza: • niz [gornja_granica:donja_granica][gornja_granica:donja_granica].... • trenutna dimenzija niza se vraca funkcijom array_dims • modifikacija nizova se vrsi prepisivanjem novih vrednosi ptrko starih. • dadavanjem k-tog elementa u postojeci niz od n elemenata (gde je k>n)pozicije izmedju k i n se ispunjavaju nulama.(vazi samo za jednodimenzione nizove) • konkatenacija se vrsi • niz1[1,2] || niz2[3,4] • {1,2,3,4} trazenje vrednosti u nizu SELECT * FROM tabela WHERE vrednost = ANY (niz1); SELECT * FROM tabela WHERE vrednost = ALL (niz1);
SlozenitipoviComposite types • Slozeni tipovi opisuju strukturu podataka. • CREATE TYPE tacka AS ( • x double precision, • y double precision • ); • CREATE TYPE proizvod AS ( • ime text, • sifra_snabdevaca integer, • cena numeric • ); • Mogu da se koriste kao i ostali prosti tipovi podataka. • kada kreiramo tabelu automatski se kreira i slozeni tip istog imena kao i tabela,kojim ce biti predstavljen red tabele.
CREATE TABLE proizvod ( • ime text, • sifra_snabdevaca integer REFERENCES snabdevac, • cena numeric CHECK (cena > 0) • ); • unos: • ’("string",42,1.99)’ • ROW(’string’, 42, 1.99) • (’string’, 42, 1.99) • pristup se vresi preko tacka operatora.
Tipovi definisani od strane korisnika • CREATE TYPE name ( • INPUT = input_function, • OUTPUT = output_function • [ , RECEIVE = receive_function ] • [ , SEND = send_function ] • [ , ANALYZE = analyze_function ] • [ , INTERNALLENGTH = { internallength | VARIABLE } ] • [ , PASSEDBYVALUE ] • [ , ALIGNMENT = alignment ] • [ , STORAGE = storage ] • [ , DEFAULT = default ] • [ , ELEMENT = element ] • [ , DELIMITER = delimiter ] • )