Mitä on Postgres? Monien sovellusten tietokanta selitettynä
Postgres (virallisesti PostgreSQL) on ilmainen, avoimen lähdekoodin relaatiotietokanta: ohjelma, joka tallentaa sovelluksen datan tauluihin, joissa on rivejä ja sarakkeita, yhdistää taulut toisiinsa ja vastaa kysymyksiin SQL-kielellä. Se tunnetaan luotettavuudestaan, tiukkuudestaan datan oikeellisuuden suhteen ja joustavuudestaan. Sama tietokanta riittää yhtä hyvin yksinkertaiseen ilmoittautumislistaan kuin suuren yrityksen tietueisiin. Monet verkkosovellukset, ja monet palvelut, jotka niitä hostaavat, perustuvat siihen.
Miksi tämä on tärkeää tekoälyllä rakennettaessa
Kun tekoälysovellusrakentaja lisää projektiisi "tietokannan", se on hyvin todennäköisesti Postgres. Et tarvitse SQL:ää käyttääksesi sitä, mutta pieni ymmärrys auttaa paljon:
- Voit kuvata datan siinä muodossa, jota tietokanta tarvitsee. "Asiakkailla on monta tilausta; jokaisessa tilauksessa on monta tuotetta" kääntyy suoraan tauluiksi.
- Voit pyytää oikeat suojaukset. Postgres voi hylätä huonon datan itse, kuten kaksoiskappaleen sähköpostiosoitteen tai tilauksen asiakkaalle, jota ei ole, jos tekoäly on asettanut säännöt.
- Voit lukea, mitä tekoäly teki. Taulujen nimet, sarakkeet ja suhteet ovat helppo tarkistaa taulukkonäkymässä, vaikka et koskaan koskisi koodiin.
Arkinen vertaus: hyvin tiukka arkistotoimisto
Kuvittele arkistotoimisto, jossa on kaappi jokaiselle asialle: yksi asiakkaille, yksi tilauksille, yksi tuotteille. Jokaisessa laatikossa olevassa kortissa on samat painetut ruudut täytettäväksi. Jokaisella kortilla on yksilöllinen numero, eikä tilauskortti toista asiakkaan tietoja. Se vain sanoo "asiakas #214", ja osoittaa asiakaslaatikkoon.
Virkailija on tiukka. Hän ei arkistoi tilausta, joka osoittaa asiakkaaseen, jota ei ole. Hän ei hyväksy korttia, jonka pakollinen päivämäärä on tyhjä. Ja jos pyydät siirtämään rahaa yhdeltä tilikortilta toiselle, hän tekee molemmat puolikkaat tai ei kumpaakaan, ei koskaan vain toista.
Tuo virkailija on Postgres. Laatikot ovat tauluja, ruudut sarakkeita, jokainen kortti rivi, ja "asiakas #214" -linkki on vierasavain (foreign key).
Mihin Postgres on hyvä
| Ominaisuus | Mitä se tarkoittaa selkokielellä |
|---|---|
| Taulut ja suhteet | Data asuu tauluissa, jotka osoittavat toisiinsa, joten mitään ei kopioida viidessä paikassa |
| SQL | Standardikieli kysymyksille: "kaikki maksamattomat tilaukset viime kuukaudelta, uusin ensin" |
| Transaktiot (ACID) | Muutosryhmä tapahtuu kokonaan tai ei lainkaan, vaikka palvelin kaatuisi puolivälissä |
| Rajoitteet (constraints) | Säännöt, jotka tietokanta pakottaa itse: pakolliset kentät, uniikit sähköpostit, kelvolliset linkit taulujen välillä |
| Indeksit | Hakuoikopolut, jotta haut pysyvät nopeina taulujen kasvaessa |
| JSONB | Joustavan, dokumenttimaisen datan tallentaminen sarakkeeseen, kun kiinteä rakenne ei sovi |
| Kokotekstihaku | Sanojen etsiminen tekstikentistä ilman erillistä hakupalvelua yksinkertaisissa tapauksissa |
| Laajennukset | Lisäosat, kuten PostGIS karttoja ja sijainteja varten tai pgvector tekoälyn upotusten (embeddings) tallentamiseen |
| Rivitason suojaus (row-level security) | Tietokannan sisäiset säännöt siitä, mitkä rivit tietty käyttäjä saa nähdä |
Postgres alkoi tutkimusprojektina Kalifornian yliopistossa Berkeleyssä 1980-luvulla, ja avoimesti kehittää sitä globaali yhteisö 1990-luvulta lähtien. Tämä pitkä historia on syy siihen, että se on usein oletusvalinta: se on hyvin dokumentoitu, laajasti tuettu, ja jokainen suuri pilvipalveluntarjoaja tarjoaa hallitun version.
Esimerkki: taulukosta tauluiksi
Oletetaan, että pyörität pientä pitopalveluyritystä ja seuraat kaikkea yhdessä taulukossa: jokainen rivi on tilaisuus, jossa on asiakkaan nimi, puhelin ja sähköposti, päivämäärä, tarjoiltavat tuotteet ja hinta.
Ongelmat ilmaantuvat nopeasti. Sama asiakas esiintyy kuudella rivillä kahdella eri puhelinnumerolla. Tarjoilut on kirjoitettu yhteen soluun muodossa "canapés x40, salad x2", joten et voi laskea, kuinka monta canapéa teit tässä kuussa.
Postgresissa samasta tiedosta tulee neljä taulua:
| Taulu | Sarakkeet | Huomioita |
|---|---|---|
| clients | id, name, phone, email | Sähköpostin on oltava uniikki |
| events | id, client_id, date, venue, status | client_id:n on vastattava oikeaa asiakasta |
| menu_items | id, name, unit_price | Yksi rivi per ruoka |
| event_items | event_id, menu_item_id, quantity | Yhdistää tilaisuudet ruokiin ja määrään |
Nyt asiakkaan puhelinnumero on yhdessä paikassa. "Kuinka monta canapéa teimme maaliskuussa?" on yksi SQL-kysely. Ja kun tallennat uuden tilaisuuden kohteineen, transaktio varmistaa, ettet koskaan jää tilanteeseen, jossa tilaisuus on tallentunut vain puolikkaana.
Tämän vaiheen ihmiset usein ohittavat, kun pyytävät tekoälyä "tekemään sovelluksen taulukostani". Opas taulukon muuttamisesta sovellukseksi menee pidemmälle.
Keskeiset termit
- Taulu, rivi, sarake: tyyppi asiasta, yksi esiintymä siitä, yksi tieto siitä.
- Pääavain (primary key): jokaisen rivin yksilöllinen tunniste, yleensä
id. - Vierasavain (foreign key): sarake, joka osoittaa toisen taulun riviin, kuten
client_id. - Skeema (schema): kaikkien taulujesi ja sarakkeidesi suunnitelma.
- Migraatio: tallennettu, toistettavissa oleva muutos skeemaan, kuten "lisää
venue-sarake tapahtumiin". - Kysely (query): SQL-kielellä kirjoitettu kysymys tai ohje.
- Yhteysmerkkijono (connection string): osoite ja salasana, jolla taustapalvelusi tavoittaa tietokannan. Se on salaisuus. Katso ympäristömuuttujat ja salaisuudet.
- Hallittu Postgres (managed Postgres): palvelu, joka ajaa, varmuuskopioi ja päivittää Postgresin puolestasi.
Tason kaikille operaatioille, joita jokainen sovellus tekee näihin tauluihin (luonti, luku, päivitys, poisto), katso mitä CRUD tarkoittaa.
Yleisiä virheitä ja väärinkäsityksiä
- Yksi jättimäinen taulu. Taulukon kopioiminen sarake sarakkeelta johtaa samoihin kaksoiskappale-ongelmiin. Erota toistuvat asiat omiin tauluihinsa.
- Listojen tallentaminen yhteen tekstikenttään. "canapés x40, salad x2" yhdessä sarakkeessa ei ole laskettavissa tai haettavissa kunnolla. Käytä yhdistävää taulua.
- Ei rajoitteita. Ilman sääntöä "sähköpostin on oltava uniikki" tai "jokaisella tilaisuudella on oltava asiakas" huono data pääsee sisään hiljaa ja tulee esiin kuukausia myöhemmin.
- Tietokannan muuttaminen käsin tuotannossa. Pyydä skeemamuutokset migraatioina, jotta muutos tallentuu ja sen voi toistaa.
- Selaimen antaminen puhua suoraan tietokantaan. Frontendin tulisi kulkea taustapalvelun kautta, joka tarkistaa oikeudet. Tietokannan salasana ei koskaan kuulu sivun koodiin.
- "Postgres on vain suurille yrityksille." Se toimii yhtä hyvin 50 rivin odotuslistalle, eikä sinun tarvitse siirtyä pois siitä kasvaessasi.
- Oletus, että tietokanta on varmuuskopio. Se tallentaa dataa, mutta se ei suojaa automaattisesti siltä, että data poistetaan. Tarkista, mitkä varmuuskopiot hostisi tarjoaa.
Mitä pyytää tekoälysovellusrakentajalta
- "Tallenna [asiat] tietokantaan. Taulut: … näillä kentillä: … Linkitä jokainen [tilaus] [asiakkaaseen]."
- "Tee sähköposti uniikiksi asiakkaissa. Tee nämä kentät pakollisiksi. Älä salli tilausta ilman asiakasta."
- "Käytä migraatioita jokaiseen skeemamuutokseen."
- "Lisää indeksit yleisimmille hauille: tilaukset asiakkaan ja päivämäärän mukaan."
- "Kaikki tietokantakäyttö kulkee palvelimen kautta. Pidä yhteysmerkkijono ympäristömuuttujissa."
Jos tietokanta on sinulle uusi käsite, aloita mitä tietokanta on -oppaasta ja palaa tänne. Full-stack-sovellus näyttää, missä tietokanta sijaitsee frontendin ja taustapalvelun vieressä.
Postgres Mythexissä
Mythex antaa jokaiselle projektille, joka sitä tarvitsee, oman omistetun Postgres-tietokannan. Et määritä sitä itse: pyydät chatissa ("tallenna odotuslistan sähköpostit tietokantaan") tai käytät /database-komentoa, ja Mythex liittää tietokannan, syöttää yhteystiedot sovellukseesi ja voi luoda taulut puolestasi. Julkaistun sovelluksen tietokanta nukkuu viiden käyttämättömän minuutin jälkeen ja herää seuraavalla pyynnöllä, ja sinulta veloitetaan vain aika, jona se oli oikeasti hereillä, samasta krediittisaldosta kuin rakentaminen. Yksityiskohdat löytyvät tietokantadokumentaatiosta, ja kojelautapohjat ovat hyvä paikka nähdä dataa hyödyntäviä sovelluksia.
Kysymykset
Onko Postgres sama asia kuin PostgreSQL?
Kyllä. PostgreSQL on virallinen nimi ja Postgres yleinen lyhennys. Molemmat tarkoittavat samaa avoimen lähdekoodin relaatiotietokantaa.
Onko Postgres ilmainen?
Kyllä. PostgreSQL on avointa lähdekoodia sallivan PostgreSQL-lisenssin alla, joten sitä voi käyttää ilmaiseksi, myös kaupallisissa tuotteissa. Maksat vain palvelimista tai hallitusta palvelusta, joka sitä ajaa.
Mikä ero on Postgresilla ja MySQL:llä?
Molemmat ovat ilmaisia relaatiotietokantoja SQL-kielellä, ja molemmat sopivat useimpiin sovelluksiin. Postgres tunnetaan tiukasta tietojen eheydestä, rikkaista tietotyypeistä, kuten JSONB ja taulukot, sekä laajasta laajennusekosysteemistä. MySQL tunnetaan yksinkertaisuudestaan ja pitkästä historiastaan verkkohostauksessa.
Sopiiko Postgres pieneen sovellukseen?
Kyllä. Se toimii hyvin yksittäiseen taulukkoon perustuvalle odotuslistalle ja myös suurille tuotantojärjestelmille, joten tietokantaa ei tarvitse vaihtaa sovelluksen kasvaessa. Hallitut palvelut tekevät sen ajamisesta helppoa ilman tietokantavastaavaa.