PostgreSQL
v16.xBase de datos relacional open-source más avanzada
Descripción
PostgreSQL es la base de datos relacional de todos los proyectos WicSecure. Cada cliente tiene su propia base de datos con usuario dedicado (mínimo privilegio). Usamos Prisma como ORM para migraciones y queries type-safe.
Uso en WicSecure
PostgreSQL corre en node-db como servicio dedicado. Convención de nombres: base de datos db_<app>, usuario userdb_<app>. DATABASE_URL: postgresql://userdb_<app>:<password>@postgres:5432/db_<app>. Backups automáticos diarios con pg_dump via el Monitor SOC.
Configuración clave
prismaconfig
-- Provisioning de base de datos por app (ejecutar en psql)
CREATE USER userdb_miapp WITH PASSWORD 'contraseña-segura';
CREATE DATABASE db_miapp OWNER userdb_miapp;
GRANT CONNECT ON DATABASE db_miapp TO userdb_miapp;
-- DATABASE_URL en .env de la app
DATABASE_URL=postgresql://userdb_miapp:contraseña@postgres:5432/db_miapp?connect_timeout=10
-- Variables en .env-miapp
MIAPP_DB_USER=userdb_miapp
MIAPP_DB_PASSWORD=contraseña-seguraEjemplo de uso
prisma
// schema.prisma — configuración estándar
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
generator client {
provider = "prisma-client-js"
}
model User {
id String @id @default(uuid())
email String @unique
name String
role Role @default(USER)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@index([email])
}
enum Role { ADMIN USER VIEWER }Características clave
- ACID completo con transacciones anidadas (savepoints)
- JSONB, arrays, UUID y tipos geoespaciales nativos
- Row-Level Security (RLS) para multi-tenancy
- Full-Text Search integrado sin extensiones
- Replicación streaming para réplicas de lectura