Postges CRUD operacije
Prije nego počnemo s temom Postgres CRUD operacija, prvo ćemo objasniti što je to uopće Postgres i za što se on koristi.
PostgreSQL (ili kraće Postgres) je jedan u nizu sustava za upravljanje relacijskim bazama podataka. Ovaj sustav je otvorenog koda (eng. Open Source) i iza njega stoji velika zajednica developera koja ga održava i i razvija dokumentaciju.
Pregled sadržaja
Za što se Postgres koristi?
Postgres se koristi kao baza podataka za sve vrste aplikacija uključujući mobilne, desktop i web aplikacije. Potpuno je besplatan i možete ga pokrenuti na vlastitom računalu. Po globalno dostupnim statistikama, jedan je od najkorištenijih sustava za upravljanje bazama podataka. U nastavku ćemo pokazati proces spajanja na Postgres bazu, kreiranje tablice i općenito korištenje CRUD operacija.
Započinjemo spajanjem na Postgres bazu s korisnikom „Postgres“ koristeći komandni redak (cmd na Windows, terminal na Linux ili macOS) sljedećom naredbom.
psql -U postgres
Odmah zatim unosimo lozinku koju smo definirali prilikom instalacije Postgres sustava.
Zatim ispisujemo sve dostupne baze koristeći sljedeću naredbu
\l
Sad se možemo spojiti na dostupnu bazu iz liste koristeći naredbu \c i naziv baze.
\c postgres
Ako niste imali niti jednu dostupnu bazu na listi, možete ju kreirati koristeći naredbu CREATE DATABASE i naziv baze.
CREATE DATABASE my_db;
Također, ako imamo više dostupnih baza možemo se prebacivati između njih, koristeći istu naredbu \c i naziv baze.
Kako bi ispisali sve tablice unutar jedne baze to možemo napraviti naredbom \dt. Kako u trenutačnoj bazi nemamo niti jednu tablicu, naredbeni redak će nam prikazati povratnu informaciju da nije pronašao niti jednu relaciju.
Sad dolazimo do dijela gdje koristimo CRUD operacije kako bi kreirali bazu podataka s kojom ćemo raditi.
Što su to Postgres CRUD operacije i za što nam služe?
CRUD Postgres operacije (Create, Read, Update, Delete) su četiri najvažnije operacije prilikom rada s bazom podataka. Svaka od ovih operacija ima svoj slučaj korištenja, a na jednostavnim primjerima ćemo pokušati objasniti koju operaciju koristimo u kojem slučaju.
Operacija Create
Započet ćemo s kreiranjem nove tablice (eng. Create) u našoj bazi podataka. Struktura same tablice se dogovara ovisno o potrebama aplikacije i zapisu JSON formata, koji nam stiže kao odgovor sa servera.
Recimo da želimo kreirati tablicu osobe (eng. Person) koja ima polja name, email i age, pri čemu ćemo koristiti sljedeći SQL upit:
CREATE TABLE person (id SERIAL PRIMARY KEY, name VARCHAR(100), email VARCHAR(100) UNIQUE, age INT);
Napomena vezana za “SERIAL PRIMARY KEY”
- Primarni ključ omogućava jedinstvenu identifikaciju nekog zapisa.
- Omogućava nam razlikovanje zapisa koji imaju jednake vrijednosti, kao što ćete vidjeti u nastavku na primjeru zapisa gdje dvije osobe imaju isto ime.
- Primarni ključ nije obavezan za svaku vrstu tablice, nego za one gdje je potrebna jedinstvena identifikacija zapisa.
- U većini slučajeva gdje je potrebna jedinstvena identifikacija zapisa, dobra je praksa imati primarni ključ u svakoj tablici, ali nije obavezan.
U slučaju da je upit bio uspješan, naredbeni redak će nam vratiti poruku “CREATE TABLE” kao potvrdu da je tablica kreirana. Kad bi postojao neki problem prilikom kreiranja tablice, komandni redak bi nam ispisao grešku.
Na primjer, ako pokušamo koristiti naziv tablice user, pojavit će se greška jer je user rezervirana ključna riječ. Postgres, naime, ima rezervirane određene riječi za posebnu namjenu i njihova upotreba se ne preporuča, iako je moguća. U takvom slučaju, naime, moramo koristiti dvostruke navodnike oko naziva tablice kako bi kreiranje bilo uspješno.
Dodavanje zapisa u kreiranu tablicu
U prethodnom primjeru kreirali smo tablicu person koristeći operaciju CREATE. Nakon što izvršimo ovaj upit, tablica je kreirana unutar naše baze podataka i u nju se sad mogu spremati zapisi. Kako bi vidjeli sve kreirane tablice, možemo ponovno koristiti \dt naredbu i vidjet ćemo našu novu tablicu u listi.
No, kreiranje tablice pomoću operacije Create tek je prvi dio priče, jer novu tablicu treba popuniti podacima. Za to nam služi ključna riječ Insert. Dakle, da bismo dodali zapis u našu tablicu, kreirat ćemo ga pomoću sljedećeg upita:
INSERT INTO person (name, email, age) VALUES ('Kresimir', 'myemail@email.com', 27);
Izvršavanjem ovog upita, u našu tablicu zapisan je novi redak čije su vrijednosti Kresimir, myemail@email.com, 27.
Operacija Read
Dolazimo do sljedećeg dijela Postgres CRUD operacije, a to je čitanje vrijednosti odnosno Read. Kako bismo dobili sve zapise iz tablice person uključujući onaj koji smo upravo dodali, pišemo sljedeći upit:
SELECT * FROM person;
Zvjezdica (*) u ovom upitu je dio sintakse kojom pozivamo sve zapise iz tablice person
. Drugim riječima, naš upit ‘SELECT * FROM person’ možemo prevesti kao ‘prikaži mi sve iz tablice person’. Nakon izvršavanja ovog upita, prikazuje nam se tablica sa svim zapisima koji se trenutno nalaze unutar ove tablice.
Primijetite kako je prikazano polje id
. To polje nismo unijeli, već se samo zapisalo. Točnije, id
se automatski generira za svaki novi zapis u tablicu. S obzirom na to da je ovo bio prvi zapis, zapisala se vrijednost “1”. Svaki sljedeći zapis bit će inkrement, povećanje za jedan. Drugi zapis dobit će id
vrijednost 2, Treći zapis dobit će id
vrijednost 3, i tako dalje.
Dodat ćemo još jedan zapis u tablicu person. Sjetite se, u tu je svrhu potrebno koristiti naredbu Insert
.
INSERT INTO person (name, email, age) VALUES ('Marko', 'marko@email.com', 20);
Ako želimo dohvatiti sve osobe koje se zovu Marko iz tablice person, koristit ćemo ključnu riječ WHERE
i navesti ime osobe, evo ovako:
SELECT * FROM person WHERE name = 'Marko';
Rezultat ovog upita je tablica sa svim zapisima u tablici person koja sadržava osobu imena Marko. Kao što možete vidjeti u tablici ispod teksta, id
je automatski generiran i dobio je vrijednost 2. Ostali podaci (name, email, age) jednaki su vrijednostima koje smo unijeli koristeći naredbu Insert
.
Operacija Update
Sigurni ste čuli za izraz “Tko radi, taj i griješi” i to se može dogoditi upravo prilikom unosa zapisa u tablicu. Recimo da smo zabunom zapisali da Marko ima 20, a ne 21 godinu. U ovom slučaju možemo koristiti još jednu CRUD operaciju, a to je Update.
Update nam omogućava da izmijenimo jedan ili više zapisa u tablici. Idemo ispraviti Markove godine s 20 na 21, što ćemo postići sljedećim upitom:
UPDATE person SET age = 21 WHERE name = 'Marko';
Idemo analizirati naš upit: prvi dio upita (prije znaka jednakosti) zahtijeva da se izmijeni (Update) tablica person
odnosno da se vrijednost za godine (age) postavi na 21. Nakon toga slijedi ključna riječ WHERE
, kojim uvjetujemo da se vrijednost promijeni samo osobama koje se zovu Marko. Kada pošaljemo ovaj upit, povratno ćemo dobiti poruku UPDATE 1
, što znači da je upit bio uspješan. Sada pokušajte samostalno, koristeći ključne riječi UPDATE
i WHERE
, promijeniti druge vrijenosti u tablici.
Ako sad ispišemo sve redove unutar tablice person, dobijemo sljedeći rezultat.
Na prijašnjoj slici vidimo kako smo uspjeli promijeniti godine s 20 na 21 gdje je “person” imena Marko. No, što u slučaju da imamo dvije osobe koje se zovu Marko? Idemo dodati još jednu osobu s istim imenom u našu tablicu.
INSERT INTO person (name, email, age) VALUES ('Marko', 'marko2@email.com', 19);
Ako sad ispišemo sve osobe iz tablice person, dobit ćemo sljedeći rezultat:
Ako sad pokušamo napraviti update nad tablicom person i za osobu kojoj je name=’Marko’ stavimo da ima 30 godina, dogodit će se sljedeće:
UPDATE person SET age = 30 WHERE name = 'Marko';
Iz povratne informacije možemo vidjeti kako su izmijenjena dva zapisa. Ako pokušamo dohvatiti sve zapise iz tablice person, vidjet ćemo da obje osobe kojima je name=’Marko’ sad imaju 30 godina.
Kako bi promijenili vrijednost nekog specifičnog retka u tablici potrebno je ili koristiti id
zato što je jedinstven, ili koristiti više parametara u kombinaciji kao što su to npr. name
i email
. Primijetite kako obje osobe zapisane pod imenom Marko imaju drukčije email adrese.
Preporuka je koristiti primarni ključ u tablici (u našem slučaju to je id
), pa pišemo sljedeći upit gdje age postavljamo na vrijednost 17, a id
zapisa je jednak 2.
UPDATE person SET age = 17 WHERE id = 2;
Nakon prethodnog upita, unosimo upit za dohvaćanje svih zapisa iz tablice person, pri čemu ćemo dobiti sljedeći rezultat:
Operacija Delete
Sad dolazimo i do zadnje CRUD operacije, odnosno Delete. Ovu operaciju koristimo kad želimo obrisati neki zapis iz tablice. Recimo da želimo iz tablice person obrisati zapis gdje je id
jednak 2, što radimo sljedećim upitom:
DELETE from person WHERE id = 2;
Sada ispisujemo cijelu tablicu person i provjeravamo rezultat. Kao što vidite, obrisali smo zapis kojem je id
jednak 2.
Ovo je bio prikaz četiri osnovne operacije nad Postgres bazama podataka. Kako bi se upoznali s ostalim mogućnostima koje ovaj sustav za upravljanje bazama podataka pruža, uvijek je dobro pročitati službenu dokumentaciju.