Bases de datos
Add Service → Databases muestra PostgreSQL, MySQL, MariaDB, MongoDB, Redis y Valkey. Elige una versión en la fila y haz clic (o pulsa Enter): la base de datos se añade y se despliega.
| Base de datos | Versiones | Volumen de datos |
|---|---|---|
| PostgreSQL | 18, 17, 16, 15, 14 | /var/lib/postgresql (18+) o /var/lib/postgresql/data |
| MySQL | 8.4 LTS, 9, 8.0 | /var/lib/mysql |
| MariaDB | 11.8 LTS, 11.4 LTS, 10.11 LTS | /var/lib/mysql |
| MongoDB | 8.0, 7.0, 6.0 | /data/db |
| Redis | 8, 7.4, 7.2 | /data |
| Valkey | 8, 7.2 | /data |
Cada base de datos recibe un volumen para sus datos, una contraseña generada y una comprobación de salud. La versión principal queda fijada: actualizarla más tarde requiere un volcado y una restauración.
Conéctate desde tu aplicación
Los demás servicios del proyecto llegan a la base de datos en <hostname>.zenavo.internal y reciben estas variables, con el nombre del nombre de host privado que tenía la base de datos al añadirla (postgresql → POSTGRESQL_…, postgresql-2 → POSTGRESQL_2_…). Su parte de host es ${CONTAINER_HOSTNAME}, así que sigue un cambio posterior del nombre de host:
| Variable | Ejemplo |
|---|---|
<NAME>_CONNECTION_STRING | postgresql://postgres:…@postgresql.zenavo.internal:5432/zenavo |
<NAME>_HOST | postgresql.zenavo.internal |
<NAME>_PORT | 5432 |
<NAME>_DB_PASSWORD | la contraseña generada |
La base de datos es privada para el proyecto. Para llegar a ella desde tu ordenador, publica un puerto TCP en Networking (Puertos TCP y UDP) o usa el panel Command del servicio.
Vista de base de datos
La pestaña Database de un servicio de base de datos muestra sus datos y ejecuta peticiones dentro del contenedor con el propio cliente de la base de datos, conectado por el socket local del contenedor o 127.0.0.1 con las credenciales de las variables del servicio. No se abre el puerto de la base de datos para ello, las credenciales nunca llegan al navegador y nada de lo que escribes pasa por un shell.
| Quién puede ver datos | Los miembros, administradores y propietarios del equipo. Los Viewer no pueden ver datos. |
| Quién puede cambiar datos | Los administradores y propietarios del equipo. |
| Límites | 15 segundos, 2 MB de salida y dos peticiones a la vez por base de datos. Los resultados más largos se recortan y se indica. |
| Registro de auditoría | Cada listado, página, consulta y comando se registra en el registro de auditoría del equipo con el servicio y el tipo de petición, nunca el SQL, las claves, los valores, los filtros ni los documentos, que pueden contener secretos. |
El cliente se ejecuta como el usuario administrador de la base de datos, y los miembros del equipo ya pueden abrir un shell en el contenedor desde el panel Command, así que el modo de solo lectura de la vista protege contra cambios accidentales; no es un entorno aislado. Usa usuarios de base de datos con menos privilegios para lo que necesite una separación más estricta.
PostgreSQL, MySQL y MariaDB
La pestaña lista tablas y vistas con su número estimado de filas y sus columnas (las claves primarias están marcadas). Haz clic en una tabla para recorrer sus filas de 100 en 100, o cambia a SQL para ejecutar una sentencia y ver el resultado como tabla. Pulsa ⌘ Enter (Ctrl Enter) para ejecutarla; con texto seleccionado, solo se ejecuta la selección. Las consultas usan psql, o mysql / mariadb.
| Solo lectura por defecto | Las sentencias se ejecutan en una transacción de solo lectura y solo se aceptan SELECT, WITH, SHOW, EXPLAIN y DESCRIBE. |
| Escrituras | Un administrador o propietario del equipo activa Allow writes para INSERT, UPDATE, DELETE y cambios de esquema. Se aplican de inmediato; haz antes una copia de seguridad. |
| Una sentencia cada vez | Se rechazan los scripts con varias sentencias, los comandos del cliente (\!, source, system, …) y los comentarios ejecutables de MySQL (/*! … */). |
| Límites | 15 segundos de tiempo máximo por sentencia y 1.000 filas por consulta. |
Redis y Valkey
Keys lista las claves con su tipo, tiempo de vida y tamaño en memoria. Elige la base de datos (db0, db1, …; la lista muestra cuántas claves tiene cada una) y escribe un patrón como user:*. Las claves se listan con SCAN, de 100 en 100, nunca con KEYS, que bloquea el servidor en bases de datos grandes; Scan more continúa. Haz clic en una clave para ver su valor:
| Tipo | Se muestra como |
|---|---|
| string | El valor, hasta 256 KB |
| hash | Campos y valores, de 100 en 100 (HSCAN) |
| list | Elementos con su índice, de 100 en 100 |
| set | Miembros, de 100 en 100 (SSCAN) |
| sorted set | Miembros y puntuaciones en orden, de 100 en 100 |
| stream | Entradas con sus campos, de 100 en 100 |
Los elementos se recortan a 4 KB. Los bytes que no son texto se muestran como \xHH. Los tipos de módulos (JSON, series temporales, …) muestran su tipo y tamaño; léelos con sus propios comandos.
Command ejecuta un comando, entrecomillado como en redis-cli: SET "my key" "a value". Pulsa Enter para ejecutarlo. Los comandos usan redis-cli o valkey-cli con la contraseña de REDIS_PASSWORD o VALKEY_PASSWORD.
| Solo lectura por defecto | Solo se aceptan comandos de lectura: GET, HGETALL, LRANGE, SCAN, TTL, INFO, … |
| Escrituras | Un administrador o propietario del equipo activa Allow writes para los comandos que cambian claves y valores: SET, DEL, EXPIRE, HSET, LPUSH, ZADD, XADD, … Se aplican de inmediato. |
| Siempre rechazados | Comandos que afectan a todo el servidor o a otros clientes: FLUSHALL, FLUSHDB, SWAPDB, CONFIG, SHUTDOWN, DEBUG, MODULE, ACL, CLIENT, MONITOR, SLOWLOG, REPLICAOF / SLAVEOF, MIGRATE, SAVE, BGSAVE, CLUSTER, FAILOVER; KEYS; scripts (EVAL, EVALSHA, SCRIPT, FUNCTION, FCALL); comandos bloqueantes (BLPOP, XREAD … BLOCK, WAIT, …); pub/sub, transacciones (MULTI, WATCH) y SELECT. También se rechazan los comandos que la vista no conoce. |
Para cualquier otra cosa, ejecuta redis-cli o valkey-cli desde el panel Command.
MongoDB
La pestaña lista las bases de datos y sus colecciones con el número estimado de documentos (admin, config y local aparecen en System databases). Haz clic en una colección y escribe un filtro, un orden y una proyección en JSON, como {"status": "active"}, {"created": -1} y {"name": 1}; pulsa Enter para buscar. Los documentos se muestran de 50 en 50 como Extended JSON relajado: {"$oid": "…"} para los ObjectId, {"$date": "…"} para las fechas y {"$numberLong": "…"} para los enteros de 64 bits que un número de JavaScript no puede representar con exactitud. Usa las mismas formas en los filtros. Las peticiones usan mongosh, con MONGO_INITDB_ROOT_USERNAME y MONGO_INITDB_ROOT_PASSWORD.
| Buscar | Un filtro, un orden y una proyección de hasta 64 KB cada uno; como mucho 500 documentos por página. Los documentos de más de 256 KB solo muestran su _id; usa una proyección para ver una parte. |
| Cambios | Los administradores y propietarios del equipo pueden hacer Insert de un documento, y actualizar o borrar un documento cada vez, buscado por su _id. Las actualizaciones usan operadores ($set, $unset, $inc, …); no se admite sustituir un documento entero. Las colecciones de sistema no se pueden cambiar. |
| Rechazado | Operadores que ejecutan JavaScript en el servidor ($where, $function, $accumulator). No hay agregaciones ni runCommand; usa mongosh desde el panel Command para eso. |