Što je Postgres? Baza podataka iza mnogih aplikacija, objašnjeno
Postgres (službeno PostgreSQL) je besplatna, otvorenog koda relacijska baza podataka: program koji pohranjuje podatke aplikacije u tablice redaka i stupaca, povezuje te tablice i odgovara na pitanja o njima jezikom zvanim SQL. Poznat je po pouzdanosti, strogoći u održavanju točnosti podataka i dovoljnoj fleksibilnosti da obradi sve od liste prijava do evidencije velike tvrtke. Mnoge web aplikacije, kao i mnogi servisi koji ih hostaju, izgrađeni su na njemu.
Zašto je važan kad gradite s AI-jem
Kad AI alat za izradu aplikacija u projekt doda „bazu podataka”, velika je vjerojatnost da je to Postgres. Ne morate pisati SQL da biste ga koristili, ali malo razumijevanja puno pomaže:
- Podatke možete opisati u obliku koji baza treba. „Kupci imaju mnogo narudžbi; svaka narudžba ima mnogo stavki” izravno se prevodi u tablice.
- Možete tražiti odgovarajuću zaštitu. Postgres može sam odbiti loše podatke, poput duplog e-maila ili narudžbe za kupca koji ne postoji, ako AI postavi pravila.
- Možete pročitati što je AI napravio. Nazivi tablica, stupaca i veze lako se provjeravaju u alatu za pregled tablica, čak i ako nikad ne dirate kod.
Svakodnevna analogija: vrlo stroga arhiva
Zamislite arhivu s ormarom za svaku vrstu stvari: jedan za kupce, jedan za narudžbe, jedan za proizvode. Svaka kartica u ladici ima iste otisnute okvire koje treba popuniti. Svaka kartica ima jedinstveni broj, a kartica narudžbe ne ponavlja podatke kupca, nego samo kaže „kupac #214”, pokazujući na ladicu kupaca.
Službenik je strog. Neće arhivirati narudžbu koja pokazuje 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, obavit će obje polovice ili nijednu, nikad samo jednu.
Taj službenik je Postgres. Ladice su tablice, otisnuti okviri su stupci, svaka kartica je redak, a poveznica „kupac #214” je strani ključ (foreign key).
Što je Postgres dobar u
| Značajka | Što znači običnim riječima |
|---|---|
| Tablice i veze | Podaci žive u tablicama 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) | Skupina promjena se ili cijela izvrši ili se nijedna ne izvrši, čak i ako server padne usred posla |
| Ograničenja (constraints) | Pravila koja baza sama provodi: obavezna polja, jedinstvene e-adrese, ispravne veze među tablicama |
| Indeksi | Prečaci za pretraživanje, da pretrage ostanu brze kako tablice rastu |
| JSONB | Pohrana fleksibilnih podataka nalik dokumentima u stupcu kad fiksna struktura ne odgovara |
| Pretraga cijelog teksta | Pretraživanje riječi u tekstualnim poljima bez zasebnog servisa za pretragu, za jednostavne slučajeve |
| Proširenja | Dodaci poput PostGIS-a za karte i lokacije ili pgvectora za pohranu AI embeddinga |
| Sigurnost na razini retka | Pravila unutar baze o tome koje retke određeni korisnik smije vidjeti |
Postgres je nastao kao istraživački projekt na Sveučilištu Kalifornije u Berkeleyju osamdesetih godina i od devedesetih ga razvija otvorena globalna zajednica. Ta duga povijest razlog je zašto je često zadani izbor: dobro je dokumentiran, široko podržan i svaki veći cloud pružatelj nudi upravljanu verziju.
Radni primjer: pretvaranje tablice u tablice baze
Recimo da vodite mali catering posao i sve pratite u jednoj tablici: svaki redak je događaj, s imenom klijenta, telefonom i e-adresom, datumom, stavkama jelovnika i cijenom.
Problemi se brzo pojave. Isti klijent pojavljuje se u šest redaka s dva različita broja telefona. Stavke jelovnika upisane su 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 tablice:
| Tablica | Stupci | Napomene |
|---|---|---|
| clients | id, name, phone, email | E-adresa mora biti jedinstvena |
| events | id, client_id, date, venue, status | client_id mora odgovarati stvarnom klijentu |
| menu_items | id, name, unit_price | Jedan redak po jelu |
| event_items | event_id, menu_item_id, quantity | Povezuje događaje s jelima, s količinom |
Sada broj telefona klijenta živi na jednom mjestu. „Koliko smo canapéa napravili u ožujku?” je jedan SQL upit. A kad zabilježite novi događaj sa stavkama, transakcija osigurava da nikad ne ostane događaj s pola spremljenih stavki.
Ovaj korak ljudi često preskoče kad od AI-ja traže da „od moje tablice napravi aplikaciju”. Vodič za pretvaranje tablice u aplikaciju ide dalje.
Ključni pojmovi
- Tablica, redak, stupac: vrsta stvari, jedna pojava te vrste, jedna informacija o njoj.
- Primarni ključ: jedinstveni ID svakog retka, obično
id. - Strani ključ: stupac koji pokazuje na redak u drugoj tablici, poput
client_id. - Shema: dizajn svih vaših tablica i stupaca.
- Migracija: spremljena, ponovljiva promjena sheme, poput „dodaj stupac
venueu events”. - Upit (query): pitanje ili naredba napisana u SQL-u.
- Connection string: adresa i lozinka kojima vaš backend dolazi do baze. To je tajna, pogledajte varijable okruženja i tajne.
- Upravljani Postgres: usluga koja pokreće, sigurnosno kopira i ažurira Postgres umjesto vas.
Za svakodnevne operacije koje svaka aplikacija izvodi nad tim tablicama, stvaranje, čitanje, ažuriranje i brisanje, pogledajte što znači CRUD.
Česte greške i zablude
- Jedna ogromna tablica. Kopiranje tablice iz tabele stupac po stupac vodi do istih problema s dupliciranjem. Stvari koje se ponavljaju odvojite u vlastite tablice.
- Pohranjivanje popisa u jedno tekstualno polje. „canapés x40, salad x2” u jednom stupcu ne može se pravilno prebrojati ili pretraživati. Koristite tablicu za povezivanje.
- Bez ograničenja. Bez pravila „e-adresa mora biti jedinstvena” ili „svaki događaj treba klijenta”, loši podaci tiho ulaze i iskoče mjesecima kasnije.
- Ručna izmjena baze u produkciji. Promjene sheme tražite kao migracije, da se promjena zabilježi i može ponoviti.
- Dopuštanje pregledniku da izravno razgovara s bazom. Frontend treba ići preko vašeg backenda, koji provjerava dopuštenja. Lozinka za bazu nikad ne pripada kodu stranice.
- „Postgres je samo za velike tvrtke.” Jednako dobro radi za listu čekanja od 50 redaka, a nećete ga morati napustiti kako rastete.
- Pretpostavka da je baza sigurnosna kopija. Baza pohranjuje podatke; ne štiti vas automatski od njihova brisanja. Provjerite koje sigurnosne kopije daje vaš host.
Što tražiti od AI alata za izradu
- „Spremaj [stvari] u bazu podataka. Tablice: … s ovim poljima: … Poveži svaku [narudžbu] s [kupcem].”
- „Neka e-adresa kupca bude jedinstvena. Ova polja neka budu obavezna. Ne dopuštaj narudžbu bez kupca.”
- „Za svaku promjenu sheme koristi migracije.”
- „Dodaj indekse za pretrage koje najčešće radimo: narudžbe po kupcu i po datumu.”
- „Sav pristup bazi ide preko servera. Connection string drži u varijablama okruženja.”
Ako uopće niste upoznati s idejom baze podataka, počnite s što je baza podataka, pa se vratite ovdje. Full-stack aplikacija pokazuje gdje baza stoji uz frontend i backend.
Postgres na Mythexu
Mythex svakom projektu kojem treba baza daje vlastitu Postgres bazu podataka. Ne morate je konfigurirati: zatražite je u chatu („spremi emailove s liste čekanja u bazu”) ili upotrijebite naredbu /database, a Mythex je priključi, ubaci detalje veze u vašu aplikaciju i može kreirati tablice umjesto vas. Objavljena aplikacija uspava svoju bazu nakon pet minuta mirovanja i probudi je pri sljedećem zahtjevu, a naplaćuje se vrijeme u kojem je zaista bila budna, iz istog stanja kredita kao i izrada. Detalji su u dokumentaciji o bazi podataka, a predlošci nadzornih ploča dobro su mjesto da vidite aplikacije s podacima.
Pitanja
Je li Postgres isto što i PostgreSQL?
Da. PostgreSQL je službeni naziv, a Postgres je uobičajeni kratki naziv; oba se odnose na istu relacijsku bazu podataka otvorenog koda.
Je li Postgres besplatan?
Da. PostgreSQL je otvorenog koda pod permisivnom PostgreSQL licencom, pa ga možete koristiti besplatno, 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 relacijske SQL baze i oba su dobra za većinu aplikacija. Postgres je poznat po strogom očuvanju integriteta podataka, bogatim tipovima podataka kao što su JSONB i nizovi te velikom ekosustavu proširenja; MySQL je poznat po jednostavnosti i dugoj povijesti u web hostingu.
Je li Postgres dobar za malu aplikaciju?
Da. Dobro radi za listu čekanja s jednom tablicom, ali i za velike produkcijske sustave, pa se ne morate mijenjati bazu kako aplikacija raste. Upravljane usluge olakšavaju rad bez administratora baze podataka.