PostgreSQL-laajennukset
Laajennukset ovat paketteja, jotka tuovat PostgreSQL-palvelimelle uusia ominaisuuksia — ylimääräisiä tietotyyppejä ja operaattoreita, salausfunktioita, kyselytilastoja ja muuta. Frostmolnin hallituissa tietokannoissa laajennukset kuuluvat vain PostgreSQL:lle, ja ne tulevat alustan omasta laajennuskataloogista. MySQL-instansseilla niitä ei ole.
Miten se toimii
- Nimet ovat katalogiarvoja, eivät vapaita merkkijonoja. Instanssille voi ottaa käyttöön vain nimiä, jotka alustan laajennuskatalogi tarjoaa. Tuntematon nimi saa tyypitetyn HTTP 400 -virheen, joka kertoo nimen —
unknown extension: <name>— ja nimi, jonka katalogi tuntee muttei tarjoa instanssin PostgreSQL-versiolle, hylätään myös. Mikä tahansa todennettu tenant voi lukea katalogin osoitteestaGET /api/v1/databases/extensions(kuten tyyppi- ja versioluvut); portaalin Laajennukset-välilehti tarjoaa kataloogivalitsimen, ja Terraform-provider tarkistaa nimet katalogin ajantasaisen sisällön perusteella jo suunnitteluvaiheessa. - Yksi operaatio kerrallaan instanssia kohden. Kun operaatio on käynnissä, toinen laajennusoperaatio hylätään HTTP 409 -virheellä:
another operation is already running on this instance; extensions can be applied only while no backup, restore or other operation is in flight — please retry once it completes. Laajennuksia ei myöskään hyväksytä, kun varmuuskopiointi tai palautus on kesken. - Alusta tallentaa lopputulokset kerran, lopuksi. Kun operaatio on käynnissä,
GET /api/v1/tenants/:tenant_id/databases/:id/extensionsnäyttää yhä kysytyn tilaversion (extensionRevision) ilman uusia merkintöjä. Laajennuskohtaiset merkinnät — nimi, tilaenabled,removedtaifailedsekä valinnaisetdetailjaupdatedAt— ilmestyvät vasta, kun operaatio päättyy, ja epäonnistunut käyttöönotto tallennetaan alustan perustelun kera. Käynnissä olevan operaation etenemistä laajennuksittain ei näytetä.
Katalogi
Tiliversio 1:n mukana tullut lähtöjoukko:
| Laajennus | PostgreSQL-versiot | Vaatii uudelleenkäynnistyksen |
|---|---|---|
timescaledb | 16, 17, 18 | Kyllä |
pg_stat_statements | 14, 15, 16, 17, 18 | Kyllä |
pg_trgm | 14–18 | Ei |
pgcrypto | 14–18 | Ei |
timescaledb ja pg_stat_statements vaativat shared_preload_libraries-asetuksen, joka astuu voimaan käynnistyksessä — kumman tahansa käyttöönotto käynnistää siis instanssin uudelleen. Katalogi kasvaa, kun alustaan lisätään lisää validoituja katalogiarvoja.
Saatavuus ja käyttöoikeus
- Avoin kaikille tenanteille. Tallennettu laajennustila on näkyvissä kaikille, jotka näkevät instanssin, ja jokainen tenant voi ottaa laajennuksia käyttöön ja poistaa niitä käytöstä omissa instansseissaan.
- Korkean käytettävyyden instanssit on toistaiseksi jätetty ulkopuolelle. Pyyntö hylätään HTTP 409 -virheellä:
extensions are not yet available for highly available instances; coordinated node sequencing is not built yet - Ennen laajennusten julkaisua luotuja instansseja ei voi ottaa niissä käyttöön. Palvelinpuolen palaset, joita käyttöönotto tarvitsee, määrittyvät luontihetkellä, eikä alusta hylkää pyyntöä etukäteen: käyttöönotto tällaisessa instanssissa hyväksytään ja kirjataan sen jälkeen rekisteriin epäonnistuneina merkintöinä. Ratkaisu on rakentaa uudelleen — luo uusi instanssi ja siirrä datasi (sivu Hallitut tietokannat kattaa luonnin ja siirron).
Laajennusten käyttäminen
Päätepiste on POST /api/v1/tenants/:tenant_id/databases/:id/extensions. Pyynnön runko kertoo suunnan — "op" on "install", kun laajennus otetaan käyttöön, ja "remove", kun se poistetaan käytöstä — sekä laajennusten nimet, enintään 8 per operaatio:
{
"op": "install",
"extensions": ["timescaledb"]
}Vastauksena tulee 202, jossa ovat operationId, tila applying_extensions ja se tilaversio (extensionRevision), jonka pyyntö otti käyttöön. Kunnes operaatio päättyy, rekisteri näyttää täsmälleen sen version ilman uusia merkintöjä; kun se päättyy, merkinnät ilmestyvät (katso yltä). Alusta tekee paikan päällä kaksi tarkistusta: instanssin on oltava käynnissä — muu tila hylätään virheellä 409 — ja laajennuksen poistaminen käytöstä, jota instanssilla ei ole, hylätään virheellä 400.
Komentorivityökalu puhuu käyttöönotosta ja poistamisesta käytöstä, ja se odottaa puolestasi: fm database postgres instance extensions enable|disable odottaa operaation loppuun ja tarkistaa tallennetun lopputuloksen sitä vastaan (valitsin --no-wait palauttaa heti, kun pyyntö on hyväksytty), ja ... extensions list näyttää rekisterin aina kun kysyt.
Terraformissa määritä extensions-joukko resurssille frostmoln_postgres_instance — generoitu terraform-referenssi kertoo attribuutista tarkemmin.
Rajoitukset yhdellä silmäyksellä
- Laajennuksia on vain PostgreSQL:ssä — MySQL-instansseilla ei ole.
- Operaatiot hyväksytään vain, kun instanssi on käynnissä.
- Yksi operaatio kerrallaan instanssia kohden.
- Enintään 8 nimeä per operaatio.