Vadovai

Kas yra Postgres? Duomenų bazė, kuria remiasi daugelis programėlių

Postgres (oficialiai PostgreSQL) yra nemokama atvirojo kodo reliacinė duomenų bazė: programa, kuri saugo programėlės duomenis lentelėse iš eilučių ir stulpelių, susieja lenteles tarpusavyje ir atsako į klausimus apie jas kalba SQL. Ji žinoma kaip patikima, griežtai saugo duomenų teisingumą ir pakankamai lanksti – tinka nuo registracijų sąrašo iki didelės įmonės įrašų. Daugelis žiniatinklio programėlių ir paslaugų, kurios jas talpina, veikia ant jos.

Kodėl tai svarbu kuriant su DI

Kai DI programėlių kūrimo įrankis projektui prideda „duomenų bazę“, didelė tikimybė, kad tai Postgres. SQL rašyti nereikia, bet šiek tiek supratimo labai padeda:

  • Duomenis galite aprašyti forma, kokios reikia duomenų bazei. „Klientai turi daug užsakymų; kiekvienas užsakymas turi daug prekių“ tiesiogiai virsta lentelėmis.
  • Galite prašyti tinkamos apsaugos. Postgres pats gali atmesti blogus duomenis – pasikartojantį el. paštą, užsakymą klientui, kuris neegzistuoja – jei DI nustato taisykles.
  • Galite perskaityti, ką padarė DI. Lentelių pavadinimus, stulpelius ir ryšius lengva patikrinti lentelių peržiūros įrankyje, net jei kodo nekeičiate.

Kasdienė analogija: griežta archyvo tarnyba

Įsivaizduokite archyvą su spintele kiekvienam daiktų tipui – vieną klientams, vieną užsakymams, vieną produktams. Kiekvienos stalčiuje esančios kortelės yra tos pačios išspausdintos langelių formos. Kiekviena kortelė turi unikalų numerį, o užsakymo kortelėje nekartojami kliento duomenys; ten tik parašyta „klientas nr. 214“, nukreipiantis į klientų stalčių.

Tarnautojas griežtas. Jis neįregistruos užsakymo, nurodančio į klientą, kurio nėra. Nepriims kortelės, kurioje privalomas langelis tuščias. Ir jei paprašysite perkelti pinigus iš vienos sąskaitos kortelės į kitą, bus atlikta arba abi pusės, arba nė viena – niekada tik viena.

Tas tarnautojas yra Postgres. Stalčiai – lentelės, langeliai – stulpeliai, kiekviena kortelė – eilutė, o nuoroda „klientas nr. 214“ – užsienio raktas (foreign key).

Ką Postgres gerai daro

SavybėKą tai reiškia paprastais žodžiais
Lentelės ir ryšiaiDuomenys laikomi lentelėse, kurios rodo viena į kitą, todėl niekas nekopijuojama penkiose vietose
SQLStandartinė kalba klausimams: „visi nesumokėti užsakymai iš praėjusio mėnesio, naujausi pirmi“
Transakcijos (ACID)Grupė pakeitimų arba įvyksta visi, arba nė vienas, net jei serveris sugenda per vidurį
ApribojimaiTaisyklės, kurias duomenų bazė vykdo pati: privalomi laukai, unikalūs el. paštai, teisingi ryšiai tarp lentelių
IndeksaiPaieškos trumpiniai, kad paieška išliktų greita augant lentelėms
JSONBLankstūs dokumento tipo duomenys stulpelyje, kai fiksuota struktūra netinka
Viso teksto paieškaPaieška tekstiniuose laukuose be atskiros paieškos paslaugos paprastais atvejais
PlėtiniaiPapildiniai, pavyzdžiui, PostGIS žemėlapiams ir vietoms, arba pgvector DI įterpimams (embeddings) saugoti
Eilučių lygio saugumasTaisyklės duomenų bazėje, nusakančios, kurias eilutes konkretus vartotojas gali matyti

Postgres prasidėjo kaip mokslinis projektas Kalifornijos universitete Berklyje 1980-aisiais ir nuo 1990-ųjų kuriamas atvirai pasaulinės bendruomenės. Ši ilga istorija yra priežastis, kodėl jis dažnai pasirenkamas pagal numatytuosius nustatymus: jis gerai dokumentuotas, plačiai palaikomas, o kiekvienas didysis debesijos tiekėjas siūlo valdomą versiją.

Darbinis pavyzdys: lentelės pavertimas iš skaičiuoklės

Tarkime, vedate mažą maitinimo verslą ir viską sekate vienoje skaičiuoklėje: kiekviena eilutė – renginys, su kliento vardu, telefonu, el. paštu, data, meniu punktais ir kaina.

Problemos greitai atsiranda. Tas pats klientas yra šešiose eilutėse su dviem skirtingais telefono numeriais. Meniu punktai surašyti vienoje ląstelėje kaip „kanapė x40, salotos x2“, todėl negalite sudėti, kiek kanapių pagaminote šį mėnesį.

Postgres šią pačią informaciją tampa keturiomis lentelėmis:

LentelėStulpeliaiPastabos
clientsid, name, phone, emailEl. paštas turi būti unikalus
eventsid, client_id, date, venue, statusclient_id turi atitikti tikrą klientą
menu_itemsid, name, unit_priceViena eilutė vienam patiekalui
event_itemsevent_id, menu_item_id, quantitySieja renginius su patiekalais ir kiekiu

Dabar kliento telefono numeris yra vienoje vietoje. „Kiek kanapių pagaminome kovą?“ – tai viena SQL užklausa. Kai įrašote naują renginį su jo prekėmis, transakcija užtikrina, kad niekada neliktų renginio, kuriam išsaugota tik pusė prekių.

Tai žingsnis, kurį žmonės praleidžia, kai prašo DI „padaryti programėlę iš mano skaičiuoklės“. Vadovas, kaip paversti skaičiuoklę programėle, eina toliau.

Pagrindinės sąvokos

  • Lentelė, eilutė, stulpelis: rūšis, vienas jos egzempliorius, viena informacijos dalis apie jį.
  • Pagrindinis raktas (primary key): kiekvienos eilutės unikalus ID, paprastai id.
  • Užsienio raktas (foreign key): stulpelis, rodantis į eilutę kitoje lentelėje, pavyzdžiui, client_id.
  • Schema: visų jūsų lentelių ir stulpelių dizainas.
  • Migracija: išsaugotas, pakartojamas schemos pakeitimas, pavyzdžiui, „pridėti venue stulpelį renginiams“.
  • Užklausa (query): SQL kalba parašytas klausimas ar nurodymas.
  • Prisijungimo eilutė (connection string): adresas ir slaptažodis, kuriais jūsų serverinė dalis pasiekia duomenų bazę. Tai paslaptis – žr. aplinkos kintamieji ir paslaptys.
  • Valdomas Postgres: paslauga, kuri už jus paleidžia, kopijuoja atsargines kopijas ir atnaujina Postgres.

Kasdienėms operacijoms su šiomis lentelėmis, kurias atlieka kiekviena programėlė – kurti, skaityti, atnaujinti, trinti – žr. ką reiškia CRUD.

Dažnos klaidos ir klaidingos nuomonės

  • Viena milžiniška lentelė. Kopijuoti skaičiuoklę stulpelis po stulpelio veda prie tų pačių dublikavimo problemų. Dalykus, kurie kartojasi, išskirkite į atskiras lenteles.
  • Sąrašų saugojimas viename teksto lauke. „kanapė x40, salotos x2“ viename stulpelyje negalima tinkamai suskaičiuoti ar ieškoti. Naudokite jungiamąją lentelę.
  • Jokių apribojimų. Be taisyklių „el. paštas turi būti unikalus“ ar „kiekvienas renginys turi turėti klientą“ blogi duomenys patenka nepastebimai ir išplaukia po mėnesių.
  • Duomenų bazės keitimas rankiniu būdu gamyboje. Prašykite schemos pakeitimų kaip migracijų, kad pakeitimas būtų įrašytas ir galėtų būti pakartotas.
  • Naršyklei leidžiama tiesiogiai kalbėtis su duomenų baze. Priekinė dalis turėtų eiti per jūsų serverį, kuris tikrina leidimus. Duomenų bazės slaptažodis niekada nepriklauso puslapio kodui.
  • „Postgres skirtas tik didelėms įmonėms.“ Jis lygiai taip pat gerai veikia 50 eilučių registracijų sąrašui, ir augdami nereikės jo keisti.
  • Manymas, kad duomenų bazė yra atsarginė kopija. Ji saugo duomenis, bet automatiškai neapsaugo nuo jų ištrynimo. Patikrinkite, kokias atsargines kopijas teikia jūsų talpintojas.

Ko prašyti DI kūrėjo

  • „Išsaugok [daiktus] duomenų bazėje. Lentelės: … su šiais laukais: … Susieti kiekvieną [užsakymą] su [klientu].“
  • „Padaryk el. paštą unikalų klientams. Padaryk šiuos laukus privalomus. Neleisk užsakymo be kliento.“
  • „Kiekvienam schemos pakeitimui naudok migracijas.“
  • „Pridėk indeksus dažniausioms paieškoms: užsakymai pagal klientą ir pagal datą.“
  • „Visa prieiga prie duomenų bazės eina per serverį. Prisijungimo eilutę laikyk aplinkos kintamuosiuose.“

Jei apskritai nesate girdėję apie duomenų bazę, pradėkite nuo kas yra duomenų bazė, tada grįžkite čia. Pilno steko programėlė parodo, kur duomenų bazė yra šalia priekinės ir serverinės dalių.

Postgres Mythex platformoje

Mythex kiekvienam projektui, kuriam jos reikia, suteikia atskirą Postgres duomenų bazę. Jos konfigūruoti nereikia: paprašykite pokalbyje („išsaugok laiškų adresus į duomenų bazę“) arba naudokite komandą /database, o Mythex ją prijungia, įdeda prisijungimo duomenis į jūsų programėlę ir gali sukurti lenteles. Publikuotos programėlės duomenų bazė užmiega po penkių neaktyvumo minučių ir pabunda kitos užklausos metu; mokate už laiką, kai ji iš tikrųjų buvo budi, iš to paties kreditų balanso kaip ir kuriant. Išsami informacija – duomenų bazės dokumentacijoje, o skydelių šablonai yra geras būdas pamatyti duomenimis paremtas programėles.

Klausimai

Ar Postgres tas pats kaip PostgreSQL?

Taip. PostgreSQL yra oficialus pavadinimas, o Postgres – įprastas trumpas pavadinimas; abu reiškia tą pačią atvirojo kodo reliacinę duomenų bazę.

Ar Postgres nemokamas?

Taip. PostgreSQL yra atvirojo kodo su leidžiančia PostgreSQL licencija, todėl jį galima naudoti nemokamai, įskaitant komerciniuose produktuose. Mokate tik už serverius ar valdomą paslaugą, kuri jį paleidžia.

Kuo skiriasi Postgres ir MySQL?

Abi yra nemokamos reliacinės SQL duomenų bazės, ir abi tinka daugumai programėlių. Postgres žinomas dėl griežto duomenų vientisumo, turtingų duomenų tipų, pavyzdžiui, JSONB ir masyvų, bei didelio plėtinių ekosistemos; MySQL žinomas dėl paprastumo ir ilgos istorijos žiniatinklio talpinime.

Ar Postgres tinka mažai programėlei?

Taip. Jis gerai veikia vienos lentelės registracijų sąrašui ir dideliems gamybiniams sistemoms, todėl augant programėlei nereikės keisti duomenų bazės. Valdomos paslaugos leidžia jį naudoti be duomenų bazės administratoriaus.

Mythex · Pricing · Kurkite bet ką su dirbtiniu intelektu · Svetainių ir programėlių šablonai · Mythex palyginimas · Programėlių kūrimo su dirbtiniu intelektu žodynėlis · Nemokami programėlių kūrimo su dirbtiniu intelektu įrankiai · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 简体中文 繁體中文(香港) 繁體中文(台灣)