Šta je Postgres? Baza podataka iza mnogih aplikacija, objašnjeno
Postgres (zvanično PostgreSQL) je besplatna, otvorenog koda relaciona baza podataka: program koji čuva podatke aplikacije u tabelama redova i kolona, povezuje te tabele međusobno i odgovara na pitanja o njima pomoću jezika pod nazivom SQL. Poznat je po pouzdanosti, strogosti u očuvanju ispravnih podataka i fleksibilnosti, pa može da podnese sve od liste prijava do evidencija velike kompanije. Mnoge veb aplikacije, i mnoge usluge koje ih hostuju, rade na njemu.
Zašto je važan kada pravite aplikacije uz AI
Kada AI alat za aplikacije u vaš projekat doda „bazu podataka“, velika je šansa da je to Postgres. Ne morate da pišete SQL da biste ga koristili, ali malo razumevanja mnogo pomaže:
- Podatke možete opisati u obliku koji baza traži. „Klijenti imaju mnogo porudžbina; svaka porudžbina ima mnogo stavki“ direktno se prevodi u tabele.
- Možete tražiti odgovarajuću zaštitu. Postgres sam može da odbije loše podatke, na primer duplu mejl adresu ili porudžbinu za klijenta koji ne postoji, ako AI postavi pravila.
- Možete da pročitate šta je AI uradio. Nazivi tabela, kolone i veze lako se proveravaju u pregledaču tabela, čak i ako nikada ne dodirnete kod.
Svakodnevna analogija: vrlo stroga kancelarija za arhiviranje
Zamislite kancelariju za arhiviranje sa ormarićem za svaku vrstu stvari: jedan za klijente, jedan za porudžbine, jedan za proizvode. Svaka kartica u fiokama ima iste štampane rubrike koje treba popuniti. Svaka kartica ima jedinstven broj, a kartica porudžbine ne ponavlja podatke o klijentu, već samo kaže „klijent #214“, što upućuje na fioku klijenata.
Službenik je strog. Neće arhivirati porudžbinu koja upućuje na klijenta koji ne postoji. Neće prihvatiti karticu sa praznim obaveznim poljem. A ako tražite da se novac prebaci sa jedne kartice računa na drugu, ili se urade obe polovine ili nijedna, nikada samo jedna.
Taj službenik je Postgres. Fioke su tabele, štampane rubrike su kolone, svaka kartica je red, a veza „klijent #214“ je strani ključ (foreign key).
Šta je Postgres dobar za
| Funkcija | Šta znači jednostavnim rečima |
|---|---|
| Tabele i veze | Podaci žive u tabelama koje pokazuju jedna na drugu, pa se ništa ne kopira na pet mesta |
| SQL | Standardni jezik za postavljanje pitanja: „sve neplaćene porudžbine iz prošlog meseca, najnovije prvo“ |
| Transakcije (ACID) | Grupa promena se ili sve izvrši ili nijedna, čak i ako server padne usred posla |
| Ograničenja (constraints) | Pravila koja baza sama sprovodi: obavezna polja, jedinstvene mejl adrese, ispravne veze između tabela |
| Indeksi | Prečice za pretragu, da pretrage ostanu brze kako tabele rastu |
| JSONB | Fleksibilni podaci u obliku dokumenta u koloni, kada fiksna struktura ne odgovara |
| Pretraga punog teksta | Pretraga reči u tekstualnim poljima bez posebnog servisa za pretragu, za jednostavne slučajeve |
| Proširenja | Dodaci poput PostGIS-a za mape i lokacije, ili pgvector za čuvanje AI embeddinga |
| Bezbednost na nivou reda (row-level security) | Pravila unutar baze o tome koje redove određeni korisnik sme da vidi |
Postgres je počeo kao istraživački projekat na Univerzitetu Kalifornije u Berkliju 1980-ih i od 1990-ih se razvija otvoreno, uz globalnu zajednicu. Ta duga istorija je razlog zašto je često podrazumevani izbor: dobro je dokumentovan, široko podržan, a svaki veliki cloud provajder nudi upravljanu verziju.
Radni primer: pretvaranje tabele u bazu
Recimo da vodite mali ketering biznes i sve pratite u jednoj tabeli: svaki red je događaj, sa imenom klijenta, telefonom i mejlom, datumom, stavkama menija i cenom.
Problemi se brzo pojavljuju. Isti klijent se pojavljuje u šest redova sa dva različita broja telefona. Stavke menija su upisane u jednu ćeliju kao „canapés x40, salad x2“, pa ne možete da saberete koliko ste kanapea napravili ovog meseca.
U Postgres-u iste informacije postaju četiri tabele:
| Tabela | Kolone | Napomene |
|---|---|---|
| clients | id, name, phone, email | Mejl mora biti jedinstven |
| events | id, client_id, date, venue, status | client_id mora odgovarati pravom klijentu |
| menu_items | id, name, unit_price | Jedan red po jelu |
| event_items | event_id, menu_item_id, quantity | Povezuje događaje sa jelima, sa količinom |
Sada broj telefona klijenta živi na jednom mestu. „Koliko smo kanapea napravili u martu?“ je jedan SQL upit. A kada zabeležite novi događaj sa stavkama, transakcija osigurava da nikada ne ostane događaj sa polovinom sačuvanih stavki.
To je korak koji ljudi preskoče kada od AI-ja traže da „napravi aplikaciju iz moje tabele“. Vodič o pretvaranju tabele u aplikaciju ide dalje.
Ključni pojmovi
- Tabela, red, kolona: vrsta stvari, jedan primerak te stvari, jedan podatak 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 tabela i kolona.
- Migracija: sačuvana, ponovljiva promena šeme, na primer „dodaj kolonu
venueu events“. - Upit: pitanje ili uputstvo napisano u SQL-u.
- Connection string: adresa i lozinka pomoću kojih backend dolazi do baze. To je tajna; pogledajte promenljive okruženja i tajne.
- Upravljani Postgres: usluga koja pokreće, pravi rezervne kopije i ažurira Postgres umesto vas.
Za svakodnevne operacije koje svaka aplikacija obavlja nad ovim tabelama, kreiranje, čitanje, izmenu i brisanje, pogledajte šta znači CRUD.
Česte greške i zablude
- Jedna ogromna tabela. Kopiranje tabele kolonu po kolonu vodi istim problemima sa dupliranjem. Ono što se ponavlja izdvojite u sopstvene tabele.
- Čuvanje lista u jednom tekstualnom polju. „canapés x40, salad x2“ u jednoj koloni ne može pravilno da se prebroji ili pretraži. Koristite tabelu za povezivanje.
- Bez ograničenja. Bez „mejl mora biti jedinstven“ ili „svaki događaj mora imati klijenta“, loši podaci se tiho uvlače i izbijaju mesecima kasnije.
- Ručno menjanje baze u produkciji. Tražite izmene šeme kao migracije, da se promena zabeleži i može da se ponovi.
- Dozvoljavanje pregledaču da direktno pristupa bazi. Frontend treba da ide preko vašeg backend-a, koji proverava dozvole. Lozinka za bazu nikada ne pripada kodu stranice.
- „Postgres je samo za velike kompanije.“ Podjednako dobro radi za listu čekanja sa 50 redova, a nećete morati da ga napustite kako rastete.
- Pretpostavka da je baza rezervna kopija. Ona čuva podatke, ali vas automatski ne štiti od brisanja. Proverite koje rezervne kopije vaš hosting pruža.
Šta tražiti od AI alata za aplikacije
- „Čuvaj [stvari] u bazi podataka. Tabele: … sa ovim poljima: … Poveži svaku [porudžbinu] sa [klijentom].“
- „Neka mejl bude jedinstven kod klijenata. Ova polja neka budu obavezna. Ne dozvoli porudžbinu bez klijenta.“
- „Koristi migracije za svaku izmenu šeme.“
- „Dodaj indekse za pretrage koje najčešće radimo: porudžbine po klijentu i po datumu.“
- „Sav pristup bazi ide preko servera. Connection string drži u promenljivim okruženja.“
Ako uopšte niste upoznati sa idejom baze podataka, počnite od šta je baza podataka, pa se vratite ovde. Aplikacija sa punim stekom pokazuje gde baza stoji pored frontend-a i backend-a.
Postgres na Mythex-u
Mythex svakom projektu koji ga zatraži daje sopstvenu Postgres bazu. Ne morate ništa da podešavate: u chatu napišite („sačuvaj mejlove sa liste čekanja u bazu“) ili koristite komandu /database, a Mythex je povezuje, ubacuje detalje veze u vašu aplikaciju i može da napravi tabele umesto vas. Baza objavljene aplikacije spava posle pet minuta neaktivnosti i budi se pri sledećem zahtevu, a naplaćuje se vreme u kojem je zaista bila budna, iz istog balansa kredita kao i pravljenje. Detalji su u dokumentaciji za baze, a šabloni kontrolnih tabli su dobro mesto da vidite aplikacije sa podacima.
Pitanja
Da li je Postgres isto što i PostgreSQL?
Da. PostgreSQL je zvanični naziv, a Postgres je uobičajen kratak naziv; oba se odnose na istu relacionu bazu podataka otvorenog koda.
Da li je Postgres besplatan?
Da. PostgreSQL je otvorenog koda pod permisivnom PostgreSQL licencom, pa ga možete koristiti besplatno, uključujući i u komercijalnim proizvodima. Plaćate samo servere ili upravljanu uslugu koja ga pokreće.
Koja je razlika između Postgres-a i MySQL-a?
Obe su besplatne SQL relacione baze i obe su dobre za većinu aplikacija. Postgres je poznat po strogom integritetu podataka, bogatim tipovima podataka kao što su JSONB i nizovi, i velikom ekosistemu proširenja; MySQL je poznat po jednostavnosti i dugoj istoriji u veb hostingu.
Da li je Postgres dobar za malu aplikaciju?
Da. Dobro radi za jednu tabelu sa listom čekanja i za velike produkcione sisteme, pa nećete morati da menjate bazu kako aplikacija raste. Upravljane usluge olakšavaju rad bez administratora baze.