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 postgres

El 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:

VariableDescripción
DATABASE_URLCadena de conexión completa a través del endpoint público (postgresql://…)
DATABASE_PRIVATE_URLCadena de conexión a través de la red privada del proyecto (<name>.lizard.internal:5432)
PGHOSTHost
PGPORTPuerto
PGUSERUsuario
PGPASSWORDContraseña
PGDATABASENombre de la base de datos
POSTGRES_USERAlias del usuario
POSTGRES_DBAlias de la base de datos
POSTGRES_PASSWORDAlias 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 desdeFormato
DATABASE_PRIVATE_URLServicios del mismo proyectopostgresql://postgres:<password>@<name>.lizard.internal:5432/postgres
DATABASE_URLTu máquina, CI o un servicio de otro proyectopostgresql://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_URL y 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_URL imprime 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 api

La 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 api

Para 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 8192

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 api

Copias 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

Actualizado