Managed Postgres

Managed Postgres auf Lizard (lizard.build) ist eine PostgreSQL-Datenbank, die Sie mit lizard add postgres zu einem Projekt hinzufügen. Neue Datenbanken laufen standardmäßig mit PostgreSQL 18. Lizard legt die Verbindungszeichenfolge in DATABASE_URL und ihre Bestandteile in PGHOST, PGPORT, PGUSER, PGPASSWORD und PGDATABASE ab, und Ihre Services lesen sie über eine Referenz wie ${{postgres.DATABASE_PRIVATE_URL}}. Für CPU, Arbeitsspeicher und Speicher der Datenbank zahlen Sie dieselben Tarife wie für Apps. Im Dashboard können Sie die Datenbank mit einem SQL-Editor abfragen. Einen Überblick und die Preise finden Sie auf der Seite zu Managed Postgres.

Bereitstellen

lizard add postgres

Das erste Postgres-Add-on heißt postgres, daher funktioniert ${{postgres.DATABASE_URL}} sofort.

Umgebungsvariablen

Das Add-on stellt einen Standardsatz an Verbindungsvariablen bereit:

VariableBeschreibung
DATABASE_URLVollständige Verbindungszeichenfolge über den öffentlichen Endpunkt (postgresql://…)
DATABASE_PRIVATE_URLVerbindungszeichenfolge über das private Netzwerk des Projekts (<name>.lizard.internal:5432)
PGHOSTHost
PGPORTPort
PGUSERBenutzer
PGPASSWORDPasswort
PGDATABASEDatenbankname
POSTGRES_USERAlias für den Benutzer
POSTGRES_DBAlias für die Datenbank
POSTGRES_PASSWORDAlias für das Passwort

Postgres-Verbindungszeichenfolge

Jede Datenbank hat zwei Verbindungszeichenfolgen. Beide verwenden den Benutzer postgres und die Datenbank postgres:

VariableZugriff vonFormat
DATABASE_PRIVATE_URLServices im selben Projektpostgresql://postgres:<password>@<name>.lizard.internal:5432/postgres
DATABASE_URLIhrem Rechner, CI oder einem Service in einem anderen Projektpostgresql://postgres:<password>@<host>:<port>/postgres

<name> ist der Name der Datenbank im Projekt, postgres für die erste. Lizard vergibt den öffentlichen Host und Port beim Erstellen der Datenbank. Lesen Sie sie daher aus DATABASE_URL, PGHOST und PGPORT, statt sie abzutippen. Die private Adresse funktioniert nur innerhalb des Projekts; siehe privates Netzwerk.

Die meisten Treiber übernehmen die Zeichenfolge unverändert:

// Node.js with pg
import pg from 'pg';
const pool = new pg.Pool({ connectionString: process.env.DATABASE_URL });
# Python with psycopg
import os, psycopg
conn = psycopg.connect(os.environ["DATABASE_URL"])

psql und andere libpq-Werkzeuge lesen die PG*-Variablen und verbinden sich daher ohne Argumente.

Wie sehe ich die Verbindungszeichenfolge?

  • Dashboard: Öffnen Sie die Datenbank in Ihrem Projekt. Der Tab Overview zeigt DATABASE_URL und die private URL mit Kopier-Schaltflächen. Der Tab Secrets listet jede Verbindungsvariable und die ${{…}}-Referenz, die Sie in einen Service einfügen.
  • CLI: lizard run --service postgres -- printenv DATABASE_URL gibt die öffentliche Zeichenfolge aus. Sie enthält das Passwort, fügen Sie sie also nicht in Logs oder Chats ein.

Die Zeichenfolge enthält Zugangsdaten. Verwenden Sie in Services eine Referenz auf die Zeichenfolge. So erhalten sie bei jedem Deploy den aktuellen Wert, ohne dass Sie ihn in ein Secret kopieren müssen.

Einen Service verbinden

Referenzieren Sie die private Verbindungszeichenfolge im Service, der die Datenbank nutzt, und deployen Sie erneut:

lizard secrets set DATABASE_URL='${{postgres.DATABASE_PRIVATE_URL}}' --service api
lizard redeploy --service api

Lizard löst die Referenz beim Deployment auf. Der Service erhält dabei die aktuellen Werte des Add-ons. Verwenden Sie stattdessen DATABASE_URL für Clients außerhalb des Projekts. Jeder Service im Projekt erhält außerdem die öffentliche DATABASE_URL des Add-ons mit der niedrigsten Priorität; eine explizite Referenz überschreibt sie.

Prüfen Sie die Verbindung von Ihrem Rechner aus, ohne die Verbindungszeichenfolge auszugeben:

lizard run --service postgres -- sh -c 'psql "$DATABASE_URL" -c "SELECT 1"'

lizard run --service postgres führt den Befehl auf Ihrem Rechner mit den öffentlichen Verbindungswerten der Datenbank aus; dafür muss psql lokal installiert sein. lizard run --service api würde ${{…}}-Referenzen als unveränderten Text weitergeben; siehe lizard run.

Migrationen beim Bereitstellen ausführen

Verwenden Sie für Migrationen einen Befehl vor dem Deployment. Er wird nur ausgeführt, wenn auch ein Startbefehl gesetzt ist, und zwar als sh -c "<pre> && exec <start>" beim Start jedes Containers: jedes Replikats, jedes Neustarts. Gestalten Sie Migrationen so, dass sie sicher mehrfach und gleichzeitig ausgeführt werden können und sowohl mit der alten als auch mit der neuen Anwendungsversion kompatibel sind:

lizard service set api --set preDeployCommand="npm run migrate" --set startCommand="npm start"
lizard redeploy --service api

Für eine Django-App lautet der Befehl python manage.py migrate; siehe den Django-Leitfaden und Python-App-Hosting. Die Leitfäden zu Umami und Flowise zeigen vollständige Apps auf Managed Postgres.

Daten durchsuchen und abfragen

Öffnen Sie den Postgres-Editor im Dashboard (lizard open), um SQL auszuführen und Tabellen direkt zu durchsuchen. Für lokale Ad-hoc-Arbeiten führen Sie einen Befehl mit den Verbindungswerten des Add-ons aus:

lizard run --service postgres -- sh -c 'exec psql "$DATABASE_URL"'

Speicher erweitern

Datenvolumes können nur vergrößert werden:

lizard scale --service postgres --storage 8192

Mehrere Datenbanken

Wenn Sie ein zweites Postgres hinzufügen, erhält es einen generierten Namen (z. B. postgres-autumn-bear). Referenzieren Sie es explizit:

lizard add postgres
lizard secrets set ANALYTICS_URL='${{postgres-autumn-bear.DATABASE_PRIVATE_URL}}' --service api

Backups und Wiederherstellung

Gehen Sie nicht von geplanten Backups oder Point-in-Time-Recovery aus. Exportieren Sie die Datenbank vor einer riskanten Migration selbst und testen Sie die Wiederherstellung in einer separaten Datenbank. Zum Beispiel mit lokal installiertem pg_dump 18 oder neuer:

lizard run --service postgres -- sh -c 'pg_dump "$DATABASE_URL" > backup.sql'

Siehe Speicher und Wiederherstellung für einen Plan zur Wiederherstellung.

Siehe auch

Aktualisiert