Kas ir Postgres? Datubāze, uz kuras balstās daudzas lietotnes, izskaidrota
Postgres (oficiāli PostgreSQL) ir bezmaksas, atvērtā pirmkoda relāciju datubāze: programma, kas glabā lietotnes datus tabulās ar rindām un kolonnām, savieno šīs tabulas un atbild uz jautājumiem par tām valodā, ko sauc par SQL. Tā ir pazīstama ar uzticamību, stingru rūpi par datu pareizību un pietiekamu elastību, lai apstrādātu jebko — no pieteikšanās saraksta līdz lielas kompānijas ierakstiem. Daudzas tīmekļa lietotnes un daudzi pakalpojumi, kas tās mitina, ir balstīti uz to.
Kāpēc tas ir svarīgi, veidojot ar MI
Kad MI lietotņu veidotājs projektam pievieno „datubāzi”, ir liela iespēja, ka tā ir Postgres. Tev nav jāraksta SQL, lai to izmantotu, bet neliela izpratne daudz palīdz:
- Vari aprakstīt datus tādā formā, kādu datubāze vajag. „Klientiem ir daudz pasūtījumu; katram pasūtījumam ir daudz preču” tieši tulkojas tabulās.
- Vari pieprasīt pareizās aizsardzības. Postgres pats var noraidīt nepareizus datus — dublētu e-pastu, pasūtījumu klientam, kas neeksistē —, ja MI tos iestata.
- Vari izlasīt, ko MI izdarīja. Tabulu nosaukumus, kolonnas un saites ir viegli pārbaudīt tabulu skatītājā, pat ja nekad nepieskaries kodam.
Ikdienas analoģija: ļoti stingrs arhīvs
Iedomājies arhīva biroju ar skapi katram lietu veidam — vienu klientiem, vienu pasūtījumiem, vienu produktiem. Katrā atvilktnē esošajai kartei ir tie paši iespiestie lauciņi, ko aizpildīt. Katrai kartei ir unikāls numurs, un pasūtījuma kartē nekad neatkārtojas klienta dati; tajā tikai teikts „klients #214”, norādot uz klientu atvilktni.
Arhivārs ir stingrs. Viņš nepieņems pasūtījuma kartīti, kas norāda uz klientu, kurš neeksistē. Viņš nepieņems kartīti ar tukšu obligātu datuma lauku. Un ja lūdz pārvietot naudu no viena konta kartītes uz citu, viņš izdara vai abas puses, vai neviena — nekad tikai vienu.
Tas arhivārs ir Postgres. Atvilktnes ir tabulas, iespiestie lauciņi ir kolonnas, katra karte ir rinda, un saite „klients #214” ir ārējā atslēga (foreign key).
Ko Postgres dara labi
| Funkcija | Ko tā nozīmē vienkāršos vārdos |
|---|---|
| Tabulas un attiecības | Dati dzīvo tabulās, kas norāda viena uz otru, tāpēc nekas netiek kopēts piecās vietās |
| SQL | Standarta valoda jautājumiem: „visi neapmaksātie pasūtījumi no pagājušā mēneša, jaunākie pirmie” |
| Transakcijas (ACID) | Izmaiņu grupa vai nu notiek visa, vai nenotiek nemaz, pat ja serveris avarē pusceļā |
| Ierobežojumi | Noteikumi, ko datubāze pati izpilda: obligāti lauki, unikāli e-pasti, derīgas saites starp tabulām |
| Indeksi | Meklēšanas saīsnes, lai meklēšana paliek ātra, tabulām augot |
| JSONB | Glabā elastīgus, dokumentam līdzīgus datus kolonnā, kad fiksēta struktūra nederīga |
| Pilnteksta meklēšana | Meklē vārdus teksta laukos bez atsevišķa meklēšanas pakalpojuma vienkāršos gadījumos |
| Paplašinājumi | Papildinājumi, piemēram, PostGIS kartēm un atrašanās vietām, vai pgvector MI iegulšanu (embeddings) glabāšanai |
| Rindu līmeņa drošība | Noteikumi datubāzē par to, kuras rindas konkrētais lietotājs drīkst redzēt |
Postgres sākās kā pētniecības projekts Kalifornijas universitātē Bērklijā 80. gados un kopš 90. gadiem to attīsta atklātā veidā globāla kopiena. Šī ilgā vēsture ir iemesls, kāpēc tā bieži ir noklusējuma izvēle: tā ir labi dokumentēta, plaši atbalstīta, un katrs lielais mākoņa nodrošinātājs piedāvā pārvaldītu versiju.
Darba piemērs: izklājlapas pārveidošana tabulās
Pieņem, ka vadi mazu keitringa biznesu un visu sekot vienā izklājlapā: katra rinda ir pasākums ar klienta vārdu, tālruni un e-pastu, datumu, ēdienkarti un cenu.
Problēmas parādās ātri. Tas pats klients ir sešās rindās ar diviem dažādiem tālruņa numuriem. Ēdienkartes preces ir ierakstītas vienā šūnā kā „canapés x40, salad x2”, tāpēc nevari saskaitīt, cik canapés izgatavoji šomēnes.
Postgres tā pati informācija kļūst par četrām tabulām:
| Tabula | Kolonnas | Piezīmes |
|---|---|---|
| clients | id, name, phone, email | E-pastam jābūt unikālam |
| events | id, client_id, date, venue, status | client_id jāsakrīt ar reālu klientu |
| menu_items | id, name, unit_price | Viena rinda katram ēdienam |
| event_items | event_id, menu_item_id, quantity | Savieno pasākumus ar ēdieniem, ar daudzumu |
Tagad klienta tālruņa numurs dzīvo vienā vietā. „Cik canapés izgatavojām martā?” ir viens SQL vaicājums. Un, kad ieraksti jaunu pasākumu ar tā precēm, transakcija nodrošina, ka nekad nebūs pasākums ar pusi saglabātu preču.
To solis cilvēki bieži izlaiž, kad MI lūdz „izveido lietotni no manas izklājlapas”. Ceļvedis par izklājlapas pārvēršanu lietotnē iet tālāk.
Galvenie termini
- Tabula, rinda, kolonna: kāda veida lieta, viens tās gadījums, viena informācija par to.
- Primārā atslēga: katras rindas unikālais ID, parasti
id. - Ārējā atslēga: kolonna, kas norāda uz rindu citā tabulā, piemēram,
client_id. - Shēma: visu tavu tabulu un kolonnu dizains.
- Migrācija: saglabāta, atkārtojama izmaiņa shēmā, piemēram, „pievienot kolonnu
venueevents”. - Vaicājums: jautājums vai instrukcija, kas uzrakstīta SQL.
- Savienojuma virkne: adrese un parole, ar ko backend sasniedz datubāzi. Tas ir noslēpums — skat. vides mainīgie un noslēpumi.
- Pārvaldīts Postgres: pakalpojums, kas darbina, dublē un atjaunina Postgres tavā vietā.
Lai iegūtu ikdienas darbības, ko katra lietotne veic ar šīm tabulām — izveidot, lasīt, atjaunināt, dzēst —, skat. kas nozīmē CRUD.
Biežākās kļūdas un maldīgi priekšstati
- Viena milzīga tabula. Kopēt izklājlapas kolonnas vienu pret vienu noved pie tās pašas dublēšanās problēmas. Atdali atkārtojošās lietas savās tabulās.
- Sarakstu glabāšana vienā teksta laukā. „canapés x40, salad x2” vienā kolonnā nevar pareizi saskaitīt vai meklēt. Izmanto saistošo tabulu.
- Nav ierobežojumu. Bez „e-pastam jābūt unikālam” vai „katram pasākumam jābūt klientam” nepareizi dati ieplūst klusi un parādās mēnešus vēlāk.
- Datubāzes mainīšana ar rokām produkcijā. Lūdz shēmas izmaiņas kā migrācijas, lai izmaiņa tiktu reģistrēta un to varētu atkārtot.
- Ļaut pārlūkprogrammai tieši sazināties ar datubāzi. Frontend jāiet caur tavu backend, kas pārbauda atļaujas. Datubāzes parolei nekad nav jābūt lapas kodā.
- „Postgres ir tikai lieliem uzņēmumiem.” Tas vienlīdz labi darbojas 50 rindu pieteikšanās sarakstam, un tev nevajadzēs pārcelties, augot.
- Pieņemt, ka datubāze ir dublējums. Tā glabā datus; tā automātiski nepasargā tevi no to dzēšanas. Pārbaudi, kādus dublējumus nodrošina tavs hosts.
Ko lūgt savam MI veidotājam
- „Saglabā [lietas] datubāzē. Tabulas: … ar šiem laukiem: … Savieno katru [pasūtījumu] ar [klientu].”
- „Padari e-pastu unikālu klientiem. Šiem laukiem jābūt obligātiem. Neatļauj pasūtījumu bez klienta.”
- „Izmanto migrācijas katrai shēmas izmaiņai.”
- „Pievieno indeksus visbiežākajiem meklējumiem: pasūtījumi pēc klienta un pēc datuma.”
- „Visa piekļuve datubāzei iet caur serveri. Glabā savienojuma virkni vides mainīgajos.”
Ja vispār esi jauns datubāzes idejai, sāc ar kas ir datubāze un atgriezies šeit. Pilnā steka lietotne parāda, kur datubāze atrodas blakus frontend un backend.
Postgres Mythex
Mythex katram projektam, kam tā vajag, piešķir savu īpašo Postgres datubāzi. Tu to nekonfigurē: pajautā čatā („saglabā pieteikšanās e-pastus datubāzē”) vai izmanto komandu /database, un Mythex to pievieno, ievieto savienojuma informāciju lietotnē un var izveidot tabulas tavā vietā. Publicētas lietotnes datubāze pēc piecām dīkstāves minūtēm aizmieg un pamostas nākamajā pieprasījumā, un tu maksā par laiku, kad tā patiesi bija nomodā, no tā paša kredītu atlikuma, kas tiek izmantots veidošanai. Sīkāka informācija ir datubāzes dokumentācijā, un informācijas paneļu veidnes ir labs veids, kā redzēt lietotnes ar datiem.
Jautājumi
Vai Postgres ir tas pats, kas PostgreSQL?
Jā. PostgreSQL ir oficiālais nosaukums, un Postgres ir ierastais īsais nosaukums; abi attiecas uz to pašu atvērtā pirmkoda relāciju datubāzi.
Vai Postgres ir bezmaksas?
Jā. PostgreSQL ir atvērtā pirmkoda programmatūra ar atļauju licenci PostgreSQL License, tāpēc to var izmantot bez maksas, arī komerciālos produktos. Maksā tikai par serveriem vai pārvaldīto pakalpojumu, kas to darbina.
Kāda ir atšķirība starp Postgres un MySQL?
Abas ir bezmaksas relāciju SQL datubāzes, un abas der lielākajai daļai lietotņu. Postgres ir pazīstams ar stingru datu integritāti, bagātīgiem datu tipiem, piemēram, JSONB un masīviem, un plašu paplašinājumu ekosistēmu; MySQL ir pazīstams ar vienkāršību un ilgu vēsturi tīmekļa hostingā.
Vai Postgres ir labs mazai lietotnei?
Jā. Tas labi darbojas vienas tabulas pieteikšanās sarakstam un arī lielām produkcijas sistēmām, tāpēc, lietotnei augot, datubāzi nevajadzēs mainīt. Pārvaldītie pakalpojumi ļauj to viegli darbināt bez datubāzes administratora.