Managed Postgres
Managed Postgres en Lizard (lizard.build) es una base de datos PostgreSQL que añades a un proyecto con lizard add postgres. Las bases de datos nuevas usan PostgreSQL 18 de forma predeterminada. Lizard pone la cadena de conexión en DATABASE_URL y sus partes en PGHOST, PGPORT, PGUSER, PGPASSWORD y PGDATABASE, y tus servicios las leen mediante una referencia como ${{postgres.DATABASE_PRIVATE_URL}}. La base de datos se factura con las mismas tarifas de CPU, memoria y almacenamiento que las apps, y el panel incluye un editor SQL para ella. Para ver un resumen y los precios, consulta la página de Managed Postgres.
Aprovisionar
lizard add postgresEl primer addon de Postgres se llama postgres, así que ${{postgres.DATABASE_URL}} funciona de inmediato.
Variables de entorno
El addon expone un conjunto estándar de variables de conexión:
| Variable | Descripción |
|---|---|
DATABASE_URL | Cadena de conexión completa a través del endpoint público (postgresql://…) |
DATABASE_PRIVATE_URL | Cadena de conexión a través de la red privada del proyecto (<name>.lizard.internal:5432) |
PGHOST | Host |
PGPORT | Puerto |
PGUSER | Usuario |
PGPASSWORD | Contraseña |
PGDATABASE | Nombre de la base de datos |
POSTGRES_USER | Alias del usuario |
POSTGRES_DB | Alias de la base de datos |
POSTGRES_PASSWORD | Alias de la contraseña |
Cadena de conexión de Postgres
Cada base de datos tiene dos cadenas de conexión. Ambas usan el usuario postgres y la base de datos postgres:
| Variable | Úsala desde | Formato |
|---|---|---|
DATABASE_PRIVATE_URL | Servicios del mismo proyecto | postgresql://postgres:<password>@<name>.lizard.internal:5432/postgres |
DATABASE_URL | Tu máquina, CI o un servicio de otro proyecto | postgresql://postgres:<password>@<host>:<port>/postgres |
<name> es el nombre de la base de datos en el proyecto: postgres para la primera. Lizard asigna el host y el puerto públicos al crear la base de datos, así que léelos de DATABASE_URL, PGHOST y PGPORT en lugar de escribirlos a mano. La dirección privada solo funciona dentro del proyecto; consulta red privada.
La mayoría de los drivers aceptan la cadena tal cual:
// 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 y otras herramientas de libpq leen las variables PG*, así que se conectan sin argumentos.
¿Cómo veo la cadena de conexión?
- Panel: abre la base de datos en tu proyecto. La pestaña Overview muestra
DATABASE_URLy la URL privada con botones para copiarlas. La pestaña Secrets lista todas las variables de conexión y la referencia${{…}}que debes pegar en un servicio. - CLI:
lizard run --service postgres -- printenv DATABASE_URLimprime la cadena pública. Contiene la contraseña, así que no la pegues en logs ni en chats.
La cadena es una credencial. Conecta los servicios a ella con una referencia en lugar de copiarla en un secreto, para que reciban el valor actual en cada despliegue.
Conectar un servicio
Haz referencia a la cadena de conexión privada desde el servicio consumidor y vuelve a desplegar:
lizard secrets set DATABASE_URL='${{postgres.DATABASE_PRIVATE_URL}}' --service api
lizard redeploy --service apiLa referencia se resuelve en el momento del despliegue, así que cada consumidor obtiene los valores actuales del addon en su siguiente despliegue. Usa DATABASE_URL en su lugar para clientes fuera del proyecto. Además, todos los servicios del proyecto reciben el DATABASE_URL público del addon con la prioridad más baja; una referencia explícita lo sobrescribe.
Verifica la conectividad desde tu máquina sin imprimir la cadena de conexión:
lizard run --service postgres -- sh -c 'psql "$DATABASE_URL" -c "SELECT 1"'lizard run --service postgres ejecuta el comando en tu máquina con los valores de conexión públicos de la base de datos, así que requiere tener psql instalado localmente. lizard run --service api pasaría las referencias ${{…}} como texto literal; consulta lizard run.
Ejecutar migraciones al desplegar
Usa un comando previo al despliegue para las migraciones. Solo se ejecuta si también hay un comando de inicio definido, como sh -c "<pre> && exec <start>" al comienzo de cada contenedor: cada réplica, cada reinicio. Haz que las migraciones se puedan ejecutar muchas veces y al mismo tiempo de forma segura, y que sean compatibles tanto con la versión antigua como con la nueva de la aplicación:
lizard service set api --set preDeployCommand="npm run migrate" --set startCommand="npm start"
lizard redeploy --service apiPara una app de Django, el comando es python manage.py migrate; consulta la guía de Django y hosting de apps Python. Las guías de Umami y Flowise muestran apps completas sobre Managed Postgres.
Explorar y consultar datos
Abre el editor de Postgres en el panel (lizard open) para ejecutar SQL y explorar tablas directamente. Para trabajo local puntual, ejecuta un comando con los valores de conexión del addon:
lizard run --service postgres -- sh -c 'exec psql "$DATABASE_URL"'Ampliar almacenamiento
Los volúmenes de datos solo pueden crecer:
lizard scale --service postgres --storage 8192Varias bases de datos
Al añadir un segundo Postgres, recibe un nombre generado (p. ej., postgres-autumn-bear). Haz referencia a él explícitamente:
lizard add postgres
lizard secrets set ANALYTICS_URL='${{postgres-autumn-bear.DATABASE_PRIVATE_URL}}' --service apiCopias de seguridad y restauración
No des por hecho que hay copias de seguridad programadas ni recuperación a un punto en el tiempo. Antes de una migración arriesgada, exporta tú mismo la base de datos y prueba la restauración en una base de datos aparte. Por ejemplo, con pg_dump 18 o posterior instalado localmente:
lizard run --service postgres -- sh -c 'pg_dump "$DATABASE_URL" > backup.sql'Consulta almacenamiento y recuperación para un plan de restauración.
Ver también
- Managed Addons: nomenclatura, referencias y los exploradores del panel.
- Referencias entre servicios: sintaxis y resolución de referencias.
Actualizado