Zum Hauptinhalt springen
Version: Weekly Build

PostgreSQL

PostgreSQL ist eine relationale Allzweckdatenbank für transaktionale Workloads, Anwendungszustände und strukturierte Analysen. In den aktuellen Provider-Definitionen ist dieser Provider GA.

EigenschaftWertHinweise
Provider-NamepostgresIn Landscape-Provider-Definitionen zu verwenden.
Versionv1Aktuelle vom Provider bereitgestellte Schema-Version.
KategorieDatabaseWird im Managed Services-Katalog angezeigt.
ScopeglobalAuf Team-Ebene verfügbar, statt an einen einzelnen Workspace-Runtime gebunden zu sein.
Team-SingletonfalseTeams können mehrere PostgreSQL-Service-Instanzen erstellen.
Pause-UnterstützungtrueDieser Provider unterstützt das Pausieren.

Funktionen

FunktionUnterstütztHinweise
BackupsBackups der Datenbank werden unterstützt.
Point-in-Time RecoveryDie Datenbank kann auf einen bestimmten Zeitpunkt zurückgesetzt werden.

Gut zu wissen

  • Hochverfügbarkeit ist noch nicht verfügbar; der Service läuft als Einzelinstanz.
  • Upgrades werden nie automatisch angewendet. Manuelle Minor-Version-Upgrades werden über das Konfigurationsfeld version unterstützt.
  • Speicher wächst nicht automatisch, aber der storage-Planparameter kann jederzeit manuell erhöht werden.

Architektur

Jeder PostgreSQL-Service ist ein dedizierter PostgreSQL-Server, der auf der Kubernetes-Infrastruktur von Codesphere läuft und vom CloudNativePG-Operator betrieben wird. Codesphere verwaltet den gesamten Lebenszyklus: Bereitstellung, Konfigurationsänderungen, Minor-Version-Updates, Volume-Resizing und Wiederherstellung aus Backups.

  • Dedizierte Instanz: Die Datenbank läuft in einem eigenen Pod mit eigenem persistenten Volume. Es wird nichts mit anderen Services oder Teams geteilt.
  • Speicher: Daten werden auf Ceph-Block-Storage (RBD) gespeichert, das auf Storage-Ebene repliziert wird.
  • Backups: Backups werden kontinuierlich in Object Storage archiviert, was sowohl die Wiederherstellung eines bestimmten Backups als auch Point-in-Time Recovery ermöglicht.
  • Container-Image: Codesphere liefert eigene PostgreSQL-Images, basierend auf den CloudNativePG-Images, mit den unten aufgeführten Erweiterungen vorinstalliert.
  • Einzelinstanz: Da der Service als Einzelinstanz ohne Replikate läuft, können Konfigurationsänderungen und Versions-Upgrades zu einer kurzen Downtime führen.

Schema

Konfiguration

FeldTypBei Erstellung erforderlichHinweise
versionstringNeinPostgreSQL-Engine-Version. Standard: 17.9. Erlaubte Werte: 17.9, 17.6, 16.13, 16.10, 15.17, 15.14, 14.22, 14.19. Nur Minor-Upgrades.
userNamestringNeinStandard: app. Nach der Erstellung unveränderlich. Darf nicht postgres sein.
databaseNamestringNeinStandard: app. Nach der Erstellung unveränderlich.

Secrets

FeldTypBei Erstellung erforderlichHinweise
userPasswordstringJaPasswort für den durch userName definierten Anwendungsbenutzer.
superuserPasswordstringJaPasswort für den postgres-Superuser.

Details / Ausgabe

FeldTypVerfügbarkeitHinweise
hostnamestringNach Bereitstellung verfügbarInterner Service-Hostname.
portintegerNach Bereitstellung verfügbarPostgreSQL-Port.
dsnstringNach Bereitstellung verfügbarVom Provider zurückgegebener Connection-String.
readybooleanNach Bereitstellung verfügbarGibt an, ob die Instanz bereit für Verbindungen ist.

Plan

Der Provider stellt einen Plan bereit, Small (id: 0). Beispielplan: Small (id: 0).

ParameterTypStandardMinimumMaximumStatischHinweise
cpunumber1--JaWird als cpu-tenths abgerechnet.
memoryinteger128--JaWird als ram-mib abgerechnet.
storageinteger1024512-NeinWird als storage-mib abgerechnet.

Beispiel in einer Landscape

schemaVersion: v0.2

run:
app-db:
provider:
name: postgres
version: v1
plan:
id: 0
parameters:
storage: 2048
config:
version: "17.9"
userName: "${{ workspace.env.PGUSER }}"
databaseName: "${{ workspace.env.PGDATABASE }}"
secrets:
userPassword: "${{ vault.pgUserPassword }}"
superuserPassword: "${{ vault.pgSuperuserPassword }}"

Hostnamen konstruieren

Von der Landscape verwaltete Service-Hostnamen sind deterministisch und folgen dieser Struktur:

ms-{providerName}-{providerVersion}-{teamId}-landscape-{workspaceId}-{serviceName}.ms-postgres

Der Hostname wird in Kleinbuchstaben umgewandelt, und ungültige Zeichen werden durch Bindestriche ersetzt.

Wenn der PostgreSQL-Service db heißt, kann der Hostname in Shell-Befehlen als ms-postgres-v1-$TEAM_ID-landscape-$WORKSPACE_ID-db.ms-postgres oder in Landscape-Templates als ms-postgres-v1-${{ team.id }}-landscape-${{ workspace.id }}-db.ms-postgres konstruiert werden.

ProviderVersionTeam-IDWorkspace-IDService-NameHostname
postgresv142100dbms-postgres-v1-42-landscape-100-db.ms-postgres

Beispiel für eine ci.yml, die den konstruierten Hostnamen direkt in einem Befehl verwendet:

schemaVersion: v0.2

run:
db:
provider:
name: postgres
version: v1
plan:
id: 0
parameters:
storage: 2048
config:
version: "17.9"
secrets:
userPassword: "${{ vault.pgUserPassword }}"
superuserPassword: "${{ vault.pgSuperuserPassword }}"

api:
steps:
- command: >
psql "postgres://app:${PG_PASSWORD}@ms-postgres-v1-$TEAM_ID-landscape-$WORKSPACE_ID-db.ms-postgres:5432/app" -c "select 1"
env:
PG_PASSWORD: "${{ vault.pgUserPassword }}"

Beispiel für eine ci.yml, die den konstruierten Hostnamen über eine Umgebungsvariable verwendet:

schemaVersion: v0.2

run:
db:
provider:
name: postgres
version: v1
plan:
id: 0
parameters:
storage: 2048
config:
version: "17.9"
secrets:
userPassword: "${{ vault.pgUserPassword }}"
superuserPassword: "${{ vault.pgSuperuserPassword }}"

api:
steps:
- command: >
psql "postgres://app:${PG_PASSWORD}@${PG_HOST}:5432/app" -c "select 1"
env:
PG_HOST: ms-postgres-v1-${{ team.id }}-landscape-${{ workspace.id }}-db.ms-postgres
PG_PASSWORD: "${{ vault.pgUserPassword }}"

Innerhalb von Anwendungs-Runtimes wird die Verbindung über den zurückgegebenen dsn oder über hostname, port, den konfigurierten Benutzernamen und das gespeicherte Passwort aufgebaut. Derselbe interne Endpunkt kann auch von anderen Codesphere-Runtimes verwendet werden, einschließlich Reactives, Managed Containers und Workloads, die innerhalb eines Virtual Cluster laufen.

Verbindung zu einer Postgres-DB herstellen

Voraussetzungen

Sobald die Postgres-DB bereitgestellt ist, kann von den Codesphere-Workspaces aus eine Verbindung dazu aufgebaut werden. Jeder Service listet seine nicht sensiblen Verbindungsdetails auf seiner Einstellungsseite im Übersichtstab auf (oder in der Eigenschaft details des öffentlichen API-Payloads).

info

Vor dem Verbinden sicherstellen, dass der Service synchronisiert ist und läuft: In den Service-Einstellungen muss ready auf true stehen.

Verbindung über das Terminal (psql)

Das Kommandozeilentool psql kann direkt aus dem Workspace-Terminal verwendet werden.

# psql installieren
nix-env -iA nixpkgs.postgresql

# Allgemeine Syntax
psql "postgres://<username>@<hostname>:5432/<database>" -W

# Beispiel
psql "postgres://[email protected]:5432/mydb" -W

Verbindung über Node.js

Mit der pg-Bibliothek:

const { Client } = require('pg');

const client = new Client({
connectionString: 'postgres://admin:[email protected]:5432/mydb'
});

await client.connect();
const res = await client.query('SELECT $1::text as message', ['Hello Codesphere!']);
console.log(res.rows[0].message); // Hello Codesphere!
await client.end();

Backups

Der PostgreSQL-Provider unterstützt automatisierte Backups und Point-in-Time Recovery in jeden S3-kompatiblen Backup-Store. Dieser Abschnitt enthält die PostgreSQL-spezifische Konfiguration; die allgemeinen Konzepte werden unter Managed Service Backups behandelt.

Im Hintergrund werden Backups mit dem CloudNativePG-Barman-Cloud-Plugin umgesetzt: Es erstellt periodisch physische Basis-Backups der Datenbank und archiviert kontinuierlich das Write-Ahead-Log (WAL) im konfigurierten Backup-Store. Eine Wiederherstellung stellt ein Basis-Backup wieder her und spielt das archivierte WAL darauf ab — dies ermöglicht Point-in-Time Recovery zwischen zwei Backups.

Backups aktivieren

Das folgende Beispiel aktiviert Backups für einen bestehenden PostgreSQL-Service. Derselbe backups-Block funktioniert ebenso beim Erstellen eines neuen Services mit POST /managed-services.

curl -X PATCH "https://api.codesphere.com/managed-services/YOUR_SERVICE_ID" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"backups": {
"enabled": true,
"intervalH": 12,
"deleteRetentionDays": 30,
"config": {
"endpointUrl": "https://s3.eu-central-1.amazonaws.com",
"destinationPath": "s3://my-codesphere-backups/",
"accessKey": "YOUR_S3_ACCESS_KEY"
},
"secrets": {
"secretKey": "YOUR_S3_SECRET_KEY"
}
}
}'

warnung

Die endpointUrl muss der regionale S3-Endpunkt sein, nicht ein bucket-spezifischer Hostname. Zum Beispiel https://s3.eu-central-1.amazonaws.com statt https://my-bucket.s3.eu-central-1.amazonaws.com.

Erforderliche S3-Berechtigungen

Die Zugangsdaten (Access Key und Secret Key), die für den Zugriff auf den S3-kompatiblen Backup-Store verwendet werden, müssen ausreichende Berechtigungen zum Erstellen, Lesen, Aktualisieren und Löschen von Objekten besitzen. Bei AWS S3 bedeutet das, dass der IAM-Benutzer oder die Rolle, die mit dem Access Key verknüpft ist, mindestens die folgenden Berechtigungen benötigt.

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "BucketLevelOperations",
"Effect": "Allow",
"Action": [
"s3:GetBucketLocation",
"s3:ListBucket",
"s3:ListBucketMultipartUploads"
],
"Resource": "arn:aws:s3:::YOUR_BUCKET_NAME"
},
{
"Sid": "ObjectLevelOperations",
"Effect": "Allow",
"Action": [
"s3:AbortMultipartUpload",
"s3:DeleteObject",
"s3:GetObject",
"s3:ListMultipartUploadParts",
"s3:PutObject",
"s3:PutObjectTagging"
],
"Resource": "arn:aws:s3:::YOUR_BUCKET_NAME/*"
}
]
}

Beispiele für Wiederherstellungen

Das Wiederherstellen eines Backups erstellt immer einen neuen Managed Service; der bestehende Service bleibt unverändert.

Point-in-Time Recovery

Die vorherige Managed-Service-ID (msId) zusammen mit einem Wiederherstellungszeitpunkt (time) angeben:

curl -X POST "https://api.codesphere.com/managed-services" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"teamId": 123,
"name": "my-postgres-recovered",
"provider": {
"name": "postgres",
"version": "v1"
},
"plan": {
"id": 0,
"parameters": { "storage": 2048 }
},
"config": {
"version": "17.9"
},
"secrets": {
"userPassword": "secure-password",
"superuserPassword": "secure-superuser-password"
},
"recoverFrom": {
"msId": "OLD_MANAGED_SERVICE_ID",
"time": "2026-04-10T12:00:00Z",
"config": {
"endpointUrl": "https://s3.eu-central-1.amazonaws.com",
"destinationPath": "s3://my-codesphere-backups/",
"accessKey": "YOUR_S3_ACCESS_KEY"
},
"secrets": {
"secretKey": "YOUR_S3_SECRET_KEY"
}
}
}'

Wiederherstellung aus einem bestimmten Backup

Alternativ kann aus einer bestimmten backupId wiederhergestellt werden:

curl -X POST "https://api.codesphere.com/managed-services" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"teamId": 123,
"name": "my-postgres-recovered",
"provider": {
"name": "postgres",
"version": "v1"
},
"plan": {
"id": 0,
"parameters": { "storage": 2048 }
},
"config": {
"version": "17.9"
},
"secrets": {
"userPassword": "secure-password",
"superuserPassword": "secure-superuser-password"
},
"recoverFrom": {
"id": "BACKUP_UUID_HERE",
"config": {
"endpointUrl": "https://s3.eu-central-1.amazonaws.com",
"destinationPath": "s3://my-codesphere-backups/",
"accessKey": "YOUR_S3_ACCESS_KEY"
},
"secrets": {
"secretKey": "YOUR_S3_SECRET_KEY"
}
}
}'

Hinweise und Einschränkungen zu Backups

Die folgenden Einschränkungen und Anforderungen gelten speziell für das Sichern und Wiederherstellen von PostgreSQL-Datenbanken:

  • Transaktion erforderlich: Um eine Postgres-Datenbank wiederherzustellen, muss mindestens eine Datenbanktransaktion stattgefunden haben.
  • Vorheriges Backup erforderlich: Es muss mindestens ein abgeschlossenes Backup vor dem gewünschten Wiederherstellungszeitpunkt vorliegen.
  • WAL-Datei-Zeitpunkt: Der Wiederherstellungszeitpunkt muss vor der letzten Transaktion in der letzten Write-Ahead-Log-Datei (WAL) liegen. Es kann einige Minuten dauern, bis die letzte WAL-Datei im Backup-Storage-Bucket gespeichert wird.
  • Versionskompatibilität: Die Wiederherstellung eines Backups mit einer anderen Datenbankversion als der ursprünglichen ist nicht garantiert funktionsfähig.
  • Zugangsdaten müssen übereinstimmen: Bei der Wiederherstellung können Datenbankbenutzer, Datenbankname und Passwörter nicht von den ursprünglich im Backup gespeicherten Werten abweichen.

Erweiterungen

Das PostgreSQL-Image wird mit einer Reihe von Erweiterungen ausgeliefert, darunter PostGIS für räumliche Daten und pgvector für die Ähnlichkeitssuche von Vektoren. Alle unten aufgeführten Erweiterungen sind auf jeder Instanz verfügbar, jedoch erst aktiv, nachdem sie aktiviert wurden.

Eine Erweiterung aktivieren

Erweiterungen werden pro Datenbank mit CREATE EXTENSION aktiviert. Als postgres-Superuser mit der Zieldatenbank verbinden und Folgendes ausführen:

-- Eine Erweiterung aktivieren
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";

-- Prüfen, welche Erweiterungen installiert sind
SELECT extname, extversion FROM pg_extension;

-- Eine Erweiterung wieder deaktivieren
DROP EXTENSION "uuid-ossp";

Alle verfügbaren Erweiterungen und ihre Versionen können direkt von der Instanz aus aufgelistet werden:

SELECT name, default_version, installed_version FROM pg_available_extensions ORDER BY name;

Verfügbare Erweiterungen

ErweiterungVersionBeschreibung
address_standardizer3.6.0Zerlegt eine Adresse in ihre Bestandteile, üblicherweise zur Unterstützung der Geocoding-Adressnormalisierung.
address_standardizer_data_us3.6.0Beispiel-Datensatz für den Address Standardizer (US).
amcheck1.4Funktionen zur Überprüfung der Relationsintegrität.
autoinc1.0Funktionen für automatisch inkrementierende Felder.
bloom1.0Bloom-Zugriffsmethode — signaturdateibasierter Index.
btree_gin1.3Unterstützung für die Indizierung gängiger Datentypen in GIN.
btree_gist1.7Unterstützung für die Indizierung gängiger Datentypen in GiST.
citext1.6Datentyp für Zeichenfolgen ohne Berücksichtigung der Groß-/Kleinschreibung.
cube1.5Datentyp für mehrdimensionale Würfel.
dblink1.2Verbindung zu anderen PostgreSQL-Datenbanken aus einer Datenbank heraus.
dict_int1.0Textsuche-Wörterbuchvorlage für Ganzzahlen.
dict_xsyn1.0Textsuche-Wörterbuchvorlage für erweiterte Synonymverarbeitung.
earthdistance1.2Berechnung von Großkreisdistanzen auf der Erdoberfläche.
file_fdw1.0Foreign-Data-Wrapper für den Zugriff auf Flatfiles.
fuzzystrmatch1.2Bestimmt Ähnlichkeiten und Abstände zwischen Zeichenfolgen.
hstore1.8Datentyp zum Speichern von (Schlüssel, Wert)-Paaren.
insert_username1.0Funktionen zur Nachverfolgung, wer eine Tabelle geändert hat.
intagg1.1Integer-Aggregator und -Enumerator (veraltet).
intarray1.5Funktionen, Operatoren und Indexunterstützung für 1D-Arrays von Ganzzahlen.
isn1.2Datentypen für internationale Produktnummerierungsstandards.
lo1.1Verwaltung von Large Objects.
ltree1.3Datentyp für hierarchische, baumartige Strukturen.
moddatetime1.0Funktionen zur Nachverfolgung des letzten Änderungszeitpunkts.
pageinspect1.12Untersucht den Inhalt von Datenbankseiten auf niedriger Ebene.
pg_buffercache1.5Untersucht den geteilten Puffer-Cache.
pg_freespacemap1.2Untersucht die Free Space Map (FSM).
pg_prewarm1.2Vorwärmen von Relationsdaten.
pg_stat_statements1.11Verfolgt Planungs- und Ausführungsstatistiken aller ausgeführten SQL-Anweisungen.
pg_surgery1.0Erweiterung zur Reparatur beschädigter Relationen.
pg_trgm1.6Textähnlichkeitsmessung und Indexsuche auf Basis von Trigrammen.
pg_visibility1.2Untersucht die Visibility Map (VM) und Sichtbarkeitsinformationen auf Seitenebene.
pg_walinspect1.1Funktionen zur Untersuchung des Inhalts des PostgreSQL Write-Ahead Logs.
pgaudit17.1Stellt Auditing-Funktionalität bereit.
pgcrypto1.3Kryptografische Funktionen.
pgrowlocks1.2Zeigt Informationen zu Sperren auf Zeilenebene.
pgstattuple1.5Zeigt Statistiken auf Tupel-Ebene.
plpgsql1.0Prozedurale Sprache PL/pgSQL. Standardmäßig installiert.
postgis3.6.0PostGIS-Geometrie- und Geografie-Raumtypen und -Funktionen.
postgis_raster3.6.0PostGIS-Rastertypen und -Funktionen.
postgis_sfcgal3.6.0PostGIS-SFCGAL-Funktionen.
postgis_tiger_geocoder3.6.0PostGIS-TIGER-Geocoder und Reverse-Geocoder.
postgis_topology3.6.0PostGIS-Topologie-Raumtypen und -Funktionen.
postgres_fdw1.1Foreign-Data-Wrapper für entfernte PostgreSQL-Server.
refint1.0Funktionen zur Implementierung referenzieller Integrität (veraltet).
seg1.4Datentyp zur Darstellung von Liniensegmenten oder Fließkomma-Intervallen.
sslinfo1.2Informationen zu SSL-Zertifikaten.
tablefunc1.0Funktionen zur Manipulation ganzer Tabellen, einschließlich Crosstab.
tcn1.0Ausgelöste Änderungsbenachrichtigungen (Triggered Change Notifications).
tsm_system_rows1.0TABLESAMPLE-Methode, die eine Zeilenanzahl als Grenzwert akzeptiert.
tsm_system_time1.0TABLESAMPLE-Methode, die eine Zeitangabe in Millisekunden als Grenzwert akzeptiert.
unaccent1.1Textsuche-Wörterbuch, das Akzente entfernt.
uuid-ossp1.1Generierung universell eindeutiger Identifikatoren (UUIDs).
vector0.8.1Vektor-Datentyp sowie ivfflat- und hnsw-Zugriffsmethoden (pgvector).
xml21.1XPath-Abfragen und XSLT.