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 y la misma región | postgresql://postgres:<password>@<name>.lizard.internal:5432/postgres |
DATABASE_URL | Tu máquina, CI o un servicio de otro proyecto o de otra región | postgresql://postgres:<password>@<host>:<port>/postgres |
<name> es el nombre que tenía la base de datos cuando recibió su dirección privada: postgres para la primera. Renombrar la base de datos no lo cambia. Lizard asigna el host y el puerto públicos al crear la base de datos. Lee los hosts de DATABASE_PRIVATE_URL, DATABASE_URL, PGHOST y PGPORT en lugar de escribirlos a mano.
La dirección privada solo funciona desde servicios del mismo proyecto y la misma región; consulta red privada. Un servicio de otra región debe usar DATABASE_URL. Para que use la dirección privada, crea la base de datos en la región del servicio: lizard add postgres --region <code>.
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 o de otra región. 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 8192Los tamaños permitidos son 512, 1024, 2048, 4096, 8192 o 16384 MB. Al ampliar el volumen, Lizard detiene la base de datos, copia sus datos a un volumen más grande y la vuelve a arrancar, así que cuenta con una breve interrupción. Si la base de datos está en pausa, reanúdala antes con lizard resume.
Varias 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