PostgreSQL-udvidelser
Udvidelser er pakker, der tilføjer egenskaber til en PostgreSQL-server — ekstra datatyper og operatorer, kryptografifunktioner, forespørgselsstatistik og mere. På Frostmolns administrerede databaser er udvidelser et PostgreSQL-tilbud, der leveres fra platformens eget udvidelseskatalog. MySQL-instanser har ingen.
Sådan fungerer det
- Navnene er katalogværdier, ikke frie strenge. Kun navne, som platformens udvidelseskatalog udbuder, kan aktiveres på en instans. Et ukendt navn giver en typet HTTP 400, der navngiver det —
unknown extension: <name>— og et navn, som kataloget kender, men ikke tilbyder til instansens PostgreSQL-version, afvises også. Enhver autentificeret tenant kan læse kataloget viaGET /api/v1/databases/extensions(som type-/versionslæsningerne); fanen Udvidelser i portalen tilbyder en katalogvælger, og Terraform-provideren tjekker navnene mod det aktuelle katalog på planlægningstidspunktet. - Én handling ad gangen pr. instans. Mens en handling kører, afvises en ny udvidelseshandling med HTTP 409:
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. Udvidelser afvises også, mens en backup eller gendannelse er i gang. - Platformen registrerer udfaldene én gang, til sidst. Mens en handling kører, viser
GET /api/v1/tenants/:tenant_id/databases/:id/extensionsstadig den ønskede version (extensionRevision) uden nye poster. Poster pr. udvidelse — navn, statusenabled,removedellerfailedsamt valgfriedetailogupdatedAt— dukker først op, når handlingen er afsluttet, og et mislykket udfald registreres med platformens begrundelse. Der er ingen fremskrift pr. udvidelse, mens handlingen kører.
Kataloget
Startsættet, som katalogets v1 blev leveret med:
| Udvidelse | PostgreSQL-versioner | Kræver genstart |
|---|---|---|
timescaledb | 16, 17, 18 | Ja |
pg_stat_statements | 14, 15, 16, 17, 18 | Ja |
pg_trgm | 14–18 | Nej |
pgcrypto | 14–18 | Nej |
timescaledb og pg_stat_statements kræver shared_preload_libraries, som træder i kraft ved opstart — at aktivere en af dem genstarter derfor instansen. Kataloget vokser, efter hånden som der tilføjes flere validerede katalogværdier til platformen.
Tilgængelighed og adgang
- Åben for alle tenants. Den registrerede udvidelsestilstand er synlig for alle, der kan se instansen, og enhver tenant kan aktivere eller deaktivere udvidelser på sine egne instanser.
- Instanser med høj tilgængelighed er holdt ude indtil videre. Anmodningen afvises med HTTP 409:
extensions are not yet available for highly available instances; coordinated node sequencing is not built yet - Instanser oprettet, før udvidelserne blev lanceret, kan ikke aktivere dem. Delene i gæsten, som handlingen behøver, fastlægges ved oprettelsen, og platformen afviser ikke anmodningen på forhånd: en aktivering på en sådan instans accepteres og registreres derefter som mislykkede poster i registret. Behandlingen er at bygge op igen — opret en ny instans og migrér dine data (siden Administrerede databaser dækker oprettelse og migrering).
Sådan bruger du udvidelserne
Endepunktet er POST /api/v1/tenants/:tenant_id/databases/:id/extensions. Brødteksten bærer retningen — "op" er "install" for at aktivere og "remove" for at deaktivere — og listen med udvidelsesnavne, højst 8 pr. handling:
{
"op": "install",
"extensions": ["timescaledb"]
}En 202 kommer tilbage med et operationId, statussen applying_extensions og den extensionRevision, anmodningen satte. Indtil handlingen er afsluttet, viser registeret nøjagtig den version uden nye poster; når den er afsluttet, dukker posterne op (se ovenfor). To kontroller, som platformen foretager med det samme: instansen skal køre — enhver anden tilstand afvises med 409 — og at deaktivere en udvidelse, instansen ikke har, afvises med 400.
CLI'en taler om at aktivere og deaktivere og venter for dig: fm database postgres instance extensions enable|disable venter på, at handlingen afsluttes, og verificerer det registrerede udfald mod den (--no-wait vender tilbage, så snart anmodningen er accepteret), og ... extensions list viser registeret, når du spørger.
I Terraform deklarerer du sættet extensions på ressourcen frostmoln_postgres_instance — den genererede reference postgres_instance dokumenterer attributten.
Begrænsningerne ét sted
- Udvidelser findes kun til PostgreSQL — MySQL-instanser har ingen.
- Handlinger accepteres kun, mens instansen kører.
- Én handling ad gangen pr. instans.
- Højst 8 navne pr. handling.