Šta je Postgres? Baza podataka iza mnogih aplikacija, objašnjena
Postgres (zvanično PostgreSQL) je besplatna, open source relaciona baza podataka: program koji čuva podatke aplikacije u tabelama redova i kolona, povezuje te tabele i odgovara na pitanja o njima pomoću jezika zvanog SQL. Poznat je po pouzdanosti, strogosti u očuvanju tačnih podataka i dovoljnoj fleksibilnosti da obradi sve, od liste za prijave do evidencije velike kompanije. Mnoge web aplikacije, kao i mnoge usluge koje ih hostuju, izgrađene su na njemu.
Zašto je važan kada gradite uz AI
Kada AI graditelj aplikacija u vaš projekat doda „bazu podataka”, velika je šansa da je to Postgres. Ne morate pisati SQL da biste ga koristili, ali malo razumijevanja mnogo pomaže:
- Podatke možete opisati onako kako baza treba. „Kupci imaju mnogo narudžbi; svaka narudžba ima mnogo stavki” direktno se prevodi u tabele.
- Možete tražiti prave zaštite. Postgres sam može odbiti loše podatke — dupliranu e-poštu ili narudžbu za kupca koji ne postoji — ako AI postavi pravila.
- Možete pročitati šta je AI uradio. Nazivi tabela, kolone i veze lako se provjere u pregledniku tabela, čak i ako nikada ne dirate kod.
Svakodnevna analogija: vrlo stroga kancelarija za arhiviranje
Zamislite kancelariju za arhiviranje s ormarom za svaku vrstu stvari — jedan za kupce, jedan za narudžbe, jedan za proizvode. Svaka kartica u fiokama ima iste štampane rubrike za popunjavanje. Svaka kartica ima jedinstven broj, a kartica narudžbe ne ponavlja podatke kupca; samo kaže „kupac #214”, što upućuje na fioku kupaca.
Službenik je strog. Neće arhivirati narudžbu koja upućuje na kupca koji ne postoji. Neće prihvatiti karticu s praznim obaveznim poljem. A ako ga zamolite da prebaci novac s jednog računa na drugi, uradiće obje strane ili nijednu — nikada samo jednu.
Taj službenik je Postgres. Fioke su tabele, štampane rubrike su kolone, svaka kartica je red, a veza „kupac #214” je strani ključ (foreign key).
Šta je Postgres dobar u tome
| Funkcija | Šta znači jednostavnim riječima |
|---|---|
| Tabele i veze | Podaci žive u tabelama koje pokazuju jedna na drugu, pa se ništa ne kopira na pet mjesta |
| SQL | Standardni jezik za postavljanje pitanja: „sve neplaćene narudžbe iz prošlog mjeseca, najnovije prve” |
| Transakcije (ACID) | Grupa promjena ili se sve desi ili se ništa ne desi, čak i ako server padne na pola puta |
| Ograničenja (constraints) | Pravila koja baza sama sprovodi: obavezna polja, jedinstvene adrese e-pošte, ispravne veze između tabela |
| Indeksi | Prečice za pretragu da pretrage ostanu brze kako tabele rastu |
| JSONB | Čuvanje fleksibilnih podataka u stilu dokumenta u koloni kada fiksna struktura ne odgovara |
| Pretraga punog teksta | Pretraga riječi u tekstualnim poljima bez zasebnog servisa za pretragu, za jednostavne slučajeve |
| Proširenja | Dodaci, poput PostGIS-a za mape i lokacije ili pgvector-a za čuvanje AI embeddinga |
| Sigurnost na nivou reda | Pravila unutar baze o tome koje redove određeni korisnik smije vidjeti |
Postgres je počeo kao istraživački projekat na Univerzitetu Kalifornije u Berkeleyu 1980-ih i od 1990-ih ga otvoreno razvija globalna zajednica. Ta duga historija je razlog zašto je često podrazumijevani izbor: dobro je dokumentovan, široko podržan, a svaki veliki cloud provajder nudi upravljanu verziju.
Primjer: pretvaranje tabele u tabele baze
Recimo da vodite mali catering biznes i sve pratite u jednoj tabeli: svaki red je događaj, s imenom klijenta, telefonom i e-poštom, datumom, stavkama menija i cijenom.
Problemi se brzo pojavljuju. Isti klijent se pojavljuje u šest redova s dva različita broja telefona. Stavke menija su upisane u jednu ćeliju kao „canapés x40, salad x2”, pa ne možete zbrojiti koliko ste canapéa napravili ovog mjeseca.
U Postgresu, iste informacije postaju četiri tabele:
| Tabela | Kolone | Napomene |
|---|---|---|
| clients | id, name, phone, email | E-pošta mora biti jedinstvena |
| events | id, client_id, date, venue, status | client_id mora odgovarati stvarnom klijentu |
| menu_items | id, name, unit_price | Jedan red po jelu |
| event_items | event_id, menu_item_id, quantity | Povezuje događaje s jelima, uz količinu |
Sada broj telefona klijenta živi na jednom mjestu. „Koliko canapéa smo napravili u martu?” je jedan SQL upit. A kada zabilježite novi događaj sa stavkama, transakcija osigurava da nikada nemate događaj koji je sačuvan s polovinom stavki.
Ovo je korak koji ljudi preskoče kada od AI-ja traže da „napravi aplikaciju od moje tabele”. Vodič o pretvaranju tabele u aplikaciju ide dalje.
Ključni pojmovi
- Tabela, red, kolona: vrsta stvari, jedan primjerak te stvari, jedna informacija o njoj.
- Primarni ključ: jedinstveni ID svakog reda, obično
id. - Strani ključ: kolona koja pokazuje na red u drugoj tabeli, poput
client_id. - Šema: dizajn svih vaših tabela i kolona.
- Migracija: sačuvana, ponovljiva promjena šeme, poput „dodaj kolonu
venueu events”. - Upit (query): pitanje ili instrukcija napisana u SQL-u.
- Connection string: adresa i lozinka koju backend koristi da dođe do baze. To je tajna — pogledajte varijable okruženja i tajne.
- Upravljani Postgres: usluga koja pokreće, pravi rezervne kopije i ažurira Postgres umjesto vas.
Za svakodnevne operacije koje svaka aplikacija radi nad tim tabelama — kreiranje, čitanje, ažuriranje, brisanje — pogledajte šta znači CRUD.
Česte greške i zablude
- Jedna ogromna tabela. Kopiranje tabele kolonu po kolonu vodi do istih problema s dupliranjem. Razdvojite stvari koje se ponavljaju u zasebne tabele.
- Čuvanje lista u jednom tekstualnom polju. „canapés x40, salad x2” u jednoj koloni ne može se pravilno prebrojati ili pretraživati. Koristite tabelu za povezivanje.
- Nema ograničenja. Bez pravila „e-pošta mora biti jedinstvena” ili „svaki događaj treba klijenta”, loši podaci se tiho uvuku i izađu na vidjelo mjesecima kasnije.
- Ručno mijenjanje baze u produkciji. Tražite promjene šeme kao migracije, da promjena bude zabilježena i da se može ponoviti.
- Dozvoljavanje pretraživaču da direktno priča s bazom. Frontend treba ići kroz vaš backend, koji provjerava dozvole. Lozinka baze nikada ne pripada kodu stranice.
- „Postgres je samo za velike kompanije.” Jednako dobro radi za listu čekanja od 50 redova, a nećete morati da se selite s njega kako rastete.
- Pretpostavka da je baza rezervna kopija. Ona čuva podatke; ne štiti vas automatski od brisanja. Provjerite koje rezervne kopije vaš hosting nudi.
Šta tražiti od AI graditelja
- „Sačuvaj [stvari] u bazi podataka. Tabele: … s ovim poljima: … Poveži svaku [narudžbu] s [kupcem].”
- „Neka e-pošta kupca bude jedinstvena. Ova polja neka budu obavezna. Ne dozvoli narudžbu bez kupca.”
- „Koristi migracije za svaku promjenu šeme.”
- „Dodaj indekse za pretrage koje najčešće radimo: narudžbe po kupcu i po datumu.”
- „Sav pristup bazi ide kroz server. Čuvaj connection string u varijablama okruženja.”
Ako uopšte niste upoznati s idejom baze podataka, počnite s šta je baza podataka, pa se vratite ovdje. Aplikacija s punim stekom pokazuje gdje baza stoji pored frontenda i backenda.
Postgres na Mythexu
Mythex svakom projektu kojem treba baza daje sopstvenu namjensku Postgres bazu. Ne podešavate je: zatražite u chatu („sačuvaj emailove liste čekanja u bazu”) ili upotrijebite komandu /database, a Mythex je priključuje, ubacuje detalje o vezi u vašu aplikaciju i može napraviti tabele umjesto vas. Baza objavljene aplikacije uspava se nakon pet minuta mirovanja i probudi na sljedeći zahtjev, a naplaćuje se vrijeme u kojem je bila budna, iz istog saldo kredita kao i pravljenje. Detalji su u dokumentaciji o bazi, a šabloni kontrolnih tabli su dobro mjesto da vidite aplikacije s podacima.
Pitanja
Je li Postgres isto što i PostgreSQL?
Da. PostgreSQL je zvanični naziv, a Postgres je uobičajeni skraćeni naziv; oba se odnose na istu open source relacionu bazu podataka.
Je li Postgres besplatan?
Da. PostgreSQL je open source pod permisivnom PostgreSQL licencom, pa ga možete besplatno koristiti, uključujući u komercijalnim proizvodima. Plaćate samo servere ili upravljanu uslugu koja ga pokreće.
Koja je razlika između Postgresa i MySQL-a?
Oba su besplatne, relacione SQL baze i oba su dobra za većinu aplikacija. Postgres je poznat po strogom integritetu podataka, bogatim tipovima podataka kao što su JSONB i nizovi, te velikom ekosistemu proširenja; MySQL je poznat po jednostavnosti i dugoj istoriji u web hostingu.
Je li Postgres dobar za malu aplikaciju?
Da. Radi dobro i za jednostavnu listu čekanja s jednom tabelom i za velike produkcijske sisteme, pa nećete morati mijenjati bazu kako aplikacija raste. Upravljane usluge olakšavaju rad bez administratora baze.