Kaj je Postgres? Baza podatkov za mnoge aplikacije, razloženo
Postgres (uradno PostgreSQL) je brezplačna odprtokodna relacijska baza podatkov: program, ki podatke aplikacije hrani v tabelah vrstic in stolpcev, povezuje tabele med seboj in odgovarja na vprašanja o njih v jeziku SQL. Znan je po zanesljivosti, strogosti pri ohranjanju pravilnih podatkov in dovolj prilagodljiv, da obvlada vse od seznama prijav do evidenc velikega podjetja. Mnoge spletne aplikacije in mnoge storitve, ki jih gostijo, temeljijo nanj.
Zakaj je pomembno pri gradnji z AI
Ko graditelj aplikacij z AI v vaš projekt doda »bazo podatkov«, je velika verjetnost, da gre za Postgres. Ne potrebujete pisanja SQL-a, da ga uporabljate, vendar vam malo razumevanja veliko pomaga:
- Podatke lahko opišete v obliki, ki jo baza potrebuje. »Stranke imajo veliko naročil; vsako naročilo ima veliko postavk« se neposredno prevede v tabele.
- Lahko zahtevate pravilne zaščite. Postgres lahko sam zavrne slabe podatke — podvojen e-poštni naslov, naročilo za stranko, ki ne obstaja —, če AI nastavi pravila.
- Lahko preberete, kaj je AI naredil. Imena tabel, stolpci in povezave so enostavni za preverjanje v pregledovalniku tabel, tudi če se nikoli ne dotaknete kode.
Vsakdanja primerjava: zelo strog arhiv
Predstavljajte si pisarno z arhivom, s predalniki za vsako vrsto stvari — eden za stranke, eden za naročila, eden za izdelke. Vsaka kartica v predalniku ima enake natisnjene okvirčke za izpolnjevanje. Vsaka kartica ima edinstveno številko, kartica naročila pa ne ponavlja podatkov stranke; samo pravi »stranka št. 214«, kar kaže na predalnik strank.
Uradnik je strog. Naročila, ki kaže na stranko, ki ne obstaja, ne bo vložil. Kartice z obveznim, a praznim datumom ne bo sprejel. Če ga prosite, naj prenese denar z ene računske kartice na drugo, naredi obe polovici ali nobene — nikoli samo eno.
Ta uradnik je Postgres. Predalniki so tabele, natisnjeni okvirčki so stolpci, vsaka kartica je vrstica, povezava »stranka št. 214« pa je tuj ključ.
Kaj Postgres dobro počne
| Lastnost | Kaj pomeni z drugimi besedami |
|---|---|
| Tabele in povezave | Podatki so v tabelah, ki kažejo ena na drugo, zato se nič ne kopira na petih mestih |
| SQL | Standardni jezik za poizvedbe: »vsa neplačana naročila zadnjega meseca, najnovejša najprej« |
| Transakcije (ACID) | Skupina sprememb se zgodi v celoti ali sploh ne, tudi če se strežnik sredi zruši |
| Omejitve (constraints) | Pravila, ki jih baza sama uveljavi: obvezna polja, edinstveni e-poštni naslovi, veljavne povezave med tabelami |
| Indeksi | Bližnjice za iskanje, da so poizvedbe hitre, ko tabele rastejo |
| JSONB | Prilagodljivi podatki v obliki dokumenta v stolpcu, kadar fiksna struktura ne ustreza |
| Polnotekstno iskanje | Iskanje besed v besedilnih poljih brez ločene storitve za iskanje, za preproste primere |
| Razširitve | Dodatki, na primer PostGIS za zemljevide in lokacije ali pgvector za shranjevanje vektorjev AI |
| Varnost na ravni vrstic | Pravila v bazi o tem, katere vrstice lahko vidi določen uporabnik |
Postgres se je začel kot raziskovalni projekt na univerzi v Kaliforniji v Berkeleyju v osemdesetih letih in ga od devetdesetih razvija odprta globalna skupnost. Ta dolga zgodovina je razlog, da je pogosto privzeta izbira: dobro je dokumentiran, široko podprt in vsak večji ponudnik oblaka ponuja upravljano različico.
Praktičen primer: pretvorba preglednice v tabele
Recimo, da vodite majhno podjetje za catering in vse spremljate v eni preglednici: vsaka vrstica je dogodek z imenom stranke, telefonom, e-pošto, datumom, jedilnikom in ceno.
Težave se hitro pojavijo. Ista stranka je na šestih vrsticah z dvema različnima telefonskima številkama. Jedi so vpisane v eno celico kot »kanapeji x40, solata x2«, zato ne morete sešteti, koliko kanapejev ste pripravili marca.
V Postgresu se iste informacije spremenijo v štiri tabele:
| Tabela | Stolpci | Opombe |
|---|---|---|
| clients | id, name, phone, email | E-pošta mora biti edinstvena |
| events | id, client_id, date, venue, status | client_id mora ustrezati pravi stranki |
| menu_items | id, name, unit_price | Ena vrstica na jed |
| event_items | event_id, menu_item_id, quantity | Poveže dogodke z jedmi, s količino |
Zdaj telefonska številka stranke živi na enem mestu. »Koliko kanapejev smo pripravili marca?« je ena poizvedba SQL. In ko zabeležite nov dogodek z njegovimi postavkami, transakcija poskrbi, da nikoli ne ostane dogodek, ki ima shranjeno samo polovico postavk.
To je korak, ki ga ljudje preskočijo, ko AI prosijo, naj »iz moje preglednice naredi aplikacijo«. Vodnik za pretvorbo preglednice v aplikacijo gre dlje.
Ključni pojmi
- Tabela, vrstica, stolpec: vrsta stvari, en primerek te stvari, ena informacija o njej.
- Primarni ključ: edinstveni ID vsake vrstice, ponavadi
id. - Tuji ključ: stolpec, ki kaže na vrstico v drugi tabeli, na primer
client_id. - Shema: zasnova vseh vaših tabel in stolpcev.
- Migracija: shranjena, ponovljiva sprememba sheme, na primer »dodaj stolpec
venuev events«. - Poizvedba (query): vprašanje ali ukaz, napisan v SQL-u.
- Povezovalni niz (connection string): naslov in geslo, ki ju zaledje uporablja za dostop do baze. Je skrivnost — glejte okoljske spremenljivke in skrivnosti.
- Upravljani Postgres: storitev, ki Postgres namesto vas poganja, varnostno kopira in posodablja.
Za osnovne operacije, ki jih vsaka aplikacija izvaja nad temi tabelami — ustvarjanje, branje, posodabljanje, brisanje —, glejte kaj pomeni CRUD.
Pogoste napake in zmote
- Ena ogromna tabela. Kopiranje preglednice stolpec za stolpcem vodi do istih težav s podvajanjem. Stvari, ki se ponavljajo, razdelite v lastne tabele.
- Shranjevanje seznamov v enem besedilnem polju. »kanapeji x40, solata x2« v enem stolpcu ni mogoče pravilno šteti ali iskati. Uporabite povezovalno tabelo.
- Brez omejitev. Brez pravil »e-pošta mora biti edinstvena« ali »vsak dogodek potrebuje stranko« v bazo tiho vstopijo slabi podatki, ki se pokažejo šele mesece kasneje.
- Ročno spreminjanje baze v produkciji. Spremembe sheme zahtevajte kot migracije, da se sprememba zabeleži in jo je mogoče ponoviti.
- Dovoljevanje brskalniku, da se neposredno pogovarja z bazo. Frontend mora iti prek vašega zaledja, ki preveri dovoljenja. Geslo za bazo nikoli ne sodi v kodo strani.
- »Postgres je samo za velika podjetja.« Enako dobro deluje za čakalni seznam s 50 vrsticami, ko aplikacija raste, pa vam ni treba preiti stran od njega.
- Domneva, da je baza varnostna kopija. Hrani podatke, vendar vas samodejno ne ščiti pred njihovim brisanjem. Preverite, katere varnostne kopije vam ponuja gostitelj.
Kaj zahtevati od svojega graditelja z AI
- »Shrani [stvari] v bazo podatkov. Tabele: … s temi polji: … Vsako [naročilo] poveži s [stranko].«
- »Naredi e-pošto pri strankah edinstveno. Ta polja naj bodo obvezna. Ne dovoli naročila brez stranke.«
- »Za vsako spremembo sheme uporabi migracije.«
- »Dodaj indekse za iskanja, ki jih najpogosteje delamo: naročila po stranki in po datumu.«
- »Ves dostop do baze gre prek strežnika. Povezovalni niz hrani v okoljskih spremenljivkah.«
Če se z idejo baze podatkov sploh še niste srečali, najprej preberite kaj je baza podatkov, nato se vrnite sem. Aplikacija s celotnim skladom pokaže, kje baza sedi poleg frontenda in zaledja.
Postgres v Mythexu
Mythex vsakemu projektu, ki ga potrebuje, dodeli njegovo lastno namensko bazo Postgres. Ničesar ne nastavljate: v klepetu rečete (»shrani e-poštne naslove čakalnega seznama v bazo«) ali uporabite ukaz /database, Mythex pa jo pripne, vbrizga podatke za povezavo v vašo aplikacijo in lahko za vas ustvari tabele. Objavljena aplikacija se baza uspava po petih minutah nedejavnosti in se zbudi ob naslednji zahtevi, plačate pa za čas, ko je bila dejansko budna, iz istega stanja kreditov kot pri gradnji. Podrobnosti so v dokumentaciji o bazi, predloge nadzornih plošč pa so dober kraj za ogled aplikacij, ki temeljijo na podatkih.
Vprašanja
Ali je Postgres isto kot PostgreSQL?
Da. PostgreSQL je uradno ime, Postgres pa je običajno krajše ime; oba se nanašata na isto odprtokodno relacijsko bazo podatkov.
Ali je Postgres brezplačen?
Da. PostgreSQL je odprtokoden pod dovoljujočo licenco PostgreSQL, zato ga lahko uporabljate brezplačno, tudi v komercialnih izdelkih. Plačate samo strežnike ali upravljano storitev, ki ga poganja.
Kakšna je razlika med Postgresom in MySQL-om?
Oba sta brezplačni relacijski bazi SQL in oba sta primerna za večino aplikacij. Postgres je znan po strogi celovitosti podatkov, bogatih podatkovnih tipih, kot sta JSONB in nizi, ter veliki ekosistemu razširitev; MySQL pa po preprostosti in dolgi zgodovini na spletnem gostovanju.
Ali je Postgres dober za majhno aplikacijo?
Da. Dobro deluje za čakalni seznam z eno tabelo in za velike produkcijske sisteme, zato vam ni treba zamenjati baze, ko aplikacija raste. Upravljane storitve omogočajo enostavno delovanje brez skrbnika baze podatkov.