Skip to content

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 osoitteesta GET /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/extensions näyttää yhä kysytyn tilaversion (extensionRevision) ilman uusia merkintöjä. Laajennuskohtaiset merkinnät — nimi, tila enabled, removed tai failed sekä valinnaiset detail ja updatedAt — 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:

LaajennusPostgreSQL-versiotVaatii uudelleenkäynnistyksen
timescaledb16, 17, 18Kyllä
pg_stat_statements14, 15, 16, 17, 18Kyllä
pg_trgm14–18Ei
pgcrypto14–18Ei

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:

json
{
  "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.