PostgreSQL
PostgreSQL ist eine relationale Allzweckdatenbank für transaktionale Workloads, Anwendungszustände und strukturierte Analysen. In den aktuellen Provider-Definitionen ist dieser Provider GA.
| Eigenschaft | Wert | Hinweise |
|---|---|---|
| Provider-Name | postgres | In Landscape-Provider-Definitionen zu verwenden. |
| Version | v1 | Aktuelle vom Provider bereitgestellte Schema-Version. |
| Kategorie | Database | Wird im Managed Services-Katalog angezeigt. |
| Scope | global | Auf Team-Ebene verfügbar, statt an einen einzelnen Workspace-Runtime gebunden zu sein. |
| Team-Singleton | false | Teams können mehrere PostgreSQL-Service-Instanzen erstellen. |
| Pause-Unterstützung | true | Dieser Provider unterstützt das Pausieren. |
Funktionen
| Funktion | Unterstützt | Hinweise |
|---|---|---|
| Backups | ✅ | Backups der Datenbank werden unterstützt. |
| Point-in-Time Recovery | ✅ | Die 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
versionunterstü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
| Feld | Typ | Bei Erstellung erforderlich | Hinweise |
|---|---|---|---|
version | string | Nein | PostgreSQL-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. |
userName | string | Nein | Standard: app. Nach der Erstellung unveränderlich. Darf nicht postgres sein. |
databaseName | string | Nein | Standard: app. Nach der Erstellung unveränderlich. |
Secrets
| Feld | Typ | Bei Erstellung erforderlich | Hinweise |
|---|---|---|---|
userPassword | string | Ja | Passwort für den durch userName definierten Anwendungsbenutzer. |
superuserPassword | string | Ja | Passwort für den postgres-Superuser. |
Details / Ausgabe
| Feld | Typ | Verfügbarkeit | Hinweise |
|---|---|---|---|
hostname | string | Nach Bereitstellung verfügbar | Interner Service-Hostname. |
port | integer | Nach Bereitstellung verfügbar | PostgreSQL-Port. |
dsn | string | Nach Bereitstellung verfügbar | Vom Provider zurückgegebener Connection-String. |
ready | boolean | Nach Bereitstellung verfügbar | Gibt an, ob die Instanz bereit für Verbindungen ist. |
Plan
Der Provider stellt einen Plan bereit, Small (id: 0).
Beispielplan: Small (id: 0).
| Parameter | Typ | Standard | Minimum | Maximum | Statisch | Hinweise |
|---|---|---|---|---|---|---|
cpu | number | 1 | - | - | Ja | Wird als cpu-tenths abgerechnet. |
memory | integer | 128 | - | - | Ja | Wird als ram-mib abgerechnet. |
storage | integer | 1024 | 512 | - | Nein | Wird 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.
| Provider | Version | Team-ID | Workspace-ID | Service-Name | Hostname |
|---|---|---|---|---|---|
postgres | v1 | 42 | 100 | db | ms-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({
});
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
| Erweiterung | Version | Beschreibung |
|---|---|---|
address_standardizer | 3.6.0 | Zerlegt eine Adresse in ihre Bestandteile, üblicherweise zur Unterstützung der Geocoding-Adressnormalisierung. |
address_standardizer_data_us | 3.6.0 | Beispiel-Datensatz für den Address Standardizer (US). |
amcheck | 1.4 | Funktionen zur Überprüfung der Relationsintegrität. |
autoinc | 1.0 | Funktionen für automatisch inkrementierende Felder. |
bloom | 1.0 | Bloom-Zugriffsmethode — signaturdateibasierter Index. |
btree_gin | 1.3 | Unterstützung für die Indizierung gängiger Datentypen in GIN. |
btree_gist | 1.7 | Unterstützung für die Indizierung gängiger Datentypen in GiST. |
citext | 1.6 | Datentyp für Zeichenfolgen ohne Berücksichtigung der Groß-/Kleinschreibung. |
cube | 1.5 | Datentyp für mehrdimensionale Würfel. |
dblink | 1.2 | Verbindung zu anderen PostgreSQL-Datenbanken aus einer Datenbank heraus. |
dict_int | 1.0 | Textsuche-Wörterbuchvorlage für Ganzzahlen. |
dict_xsyn | 1.0 | Textsuche-Wörterbuchvorlage für erweiterte Synonymverarbeitung. |
earthdistance | 1.2 | Berechnung von Großkreisdistanzen auf der Erdoberfläche. |
file_fdw | 1.0 | Foreign-Data-Wrapper für den Zugriff auf Flatfiles. |
fuzzystrmatch | 1.2 | Bestimmt Ähnlichkeiten und Abstände zwischen Zeichenfolgen. |
hstore | 1.8 | Datentyp zum Speichern von (Schlüssel, Wert)-Paaren. |
insert_username | 1.0 | Funktionen zur Nachverfolgung, wer eine Tabelle geändert hat. |
intagg | 1.1 | Integer-Aggregator und -Enumerator (veraltet). |
intarray | 1.5 | Funktionen, Operatoren und Indexunterstützung für 1D-Arrays von Ganzzahlen. |
isn | 1.2 | Datentypen für internationale Produktnummerierungsstandards. |
lo | 1.1 | Verwaltung von Large Objects. |
ltree | 1.3 | Datentyp für hierarchische, baumartige Strukturen. |
moddatetime | 1.0 | Funktionen zur Nachverfolgung des letzten Änderungszeitpunkts. |
pageinspect | 1.12 | Untersucht den Inhalt von Datenbankseiten auf niedriger Ebene. |
pg_buffercache | 1.5 | Untersucht den geteilten Puffer-Cache. |
pg_freespacemap | 1.2 | Untersucht die Free Space Map (FSM). |
pg_prewarm | 1.2 | Vorwärmen von Relationsdaten. |
pg_stat_statements | 1.11 | Verfolgt Planungs- und Ausführungsstatistiken aller ausgeführten SQL-Anweisungen. |
pg_surgery | 1.0 | Erweiterung zur Reparatur beschädigter Relationen. |
pg_trgm | 1.6 | Textähnlichkeitsmessung und Indexsuche auf Basis von Trigrammen. |
pg_visibility | 1.2 | Untersucht die Visibility Map (VM) und Sichtbarkeitsinformationen auf Seitenebene. |
pg_walinspect | 1.1 | Funktionen zur Untersuchung des Inhalts des PostgreSQL Write-Ahead Logs. |
pgaudit | 17.1 | Stellt Auditing-Funktionalität bereit. |
pgcrypto | 1.3 | Kryptografische Funktionen. |
pgrowlocks | 1.2 | Zeigt Informationen zu Sperren auf Zeilenebene. |
pgstattuple | 1.5 | Zeigt Statistiken auf Tupel-Ebene. |
plpgsql | 1.0 | Prozedurale Sprache PL/pgSQL. Standardmäßig installiert. |
postgis | 3.6.0 | PostGIS-Geometrie- und Geografie-Raumtypen und -Funktionen. |
postgis_raster | 3.6.0 | PostGIS-Rastertypen und -Funktionen. |
postgis_sfcgal | 3.6.0 | PostGIS-SFCGAL-Funktionen. |
postgis_tiger_geocoder | 3.6.0 | PostGIS-TIGER-Geocoder und Reverse-Geocoder. |
postgis_topology | 3.6.0 | PostGIS-Topologie-Raumtypen und -Funktionen. |
postgres_fdw | 1.1 | Foreign-Data-Wrapper für entfernte PostgreSQL-Server. |
refint | 1.0 | Funktionen zur Implementierung referenzieller Integrität (veraltet). |
seg | 1.4 | Datentyp zur Darstellung von Liniensegmenten oder Fließkomma-Intervallen. |
sslinfo | 1.2 | Informationen zu SSL-Zertifikaten. |
tablefunc | 1.0 | Funktionen zur Manipulation ganzer Tabellen, einschließlich Crosstab. |
tcn | 1.0 | Ausgelöste Änderungsbenachrichtigungen (Triggered Change Notifications). |
tsm_system_rows | 1.0 | TABLESAMPLE-Methode, die eine Zeilenanzahl als Grenzwert akzeptiert. |
tsm_system_time | 1.0 | TABLESAMPLE-Methode, die eine Zeitangabe in Millisekunden als Grenzwert akzeptiert. |
unaccent | 1.1 | Textsuche-Wörterbuch, das Akzente entfernt. |
uuid-ossp | 1.1 | Generierung universell eindeutiger Identifikatoren (UUIDs). |
vector | 0.8.1 | Vektor-Datentyp sowie ivfflat- und hnsw-Zugriffsmethoden (pgvector). |
xml2 | 1.1 | XPath-Abfragen und XSLT. |