Funciones · Base de datos
Una base de datos real, ya conectada.
Postgres administrado, sin necesidad de abrir una cuenta de base de datos. En un plan de pago, tus bases de datos administradas son un total compartido entre todas tus apps: pide una al desplegar, y una sola acción la crea, la conecta y solo entonces compila, así que las migraciones que ejecuta tu compilación llegan a ella ya en la primera compilación. El plan Free incluye una para tu app: con su primer despliegue cuando el plan Free ejecuta el código de servidor de la app y, en caso contrario, una vez que está en línea; se conserva mientras la app siga en línea.
Lo que llama tu agente
deploydatabaseCreatedatabaseStatusdatabaseReconcile
Take my restaurant app live, with a database.
tofu · setFramework nextjs
confirmed
tofu · deploy database: true
managed database ready · Postgres
DATABASE_URL + 5 more · write-only
build ready
HTTP 200 · publicly reachable
Live at https://franks-kitchen-3f9a1c07b2e4.trytofu.app
Una sola acción
Crea, conecta y luego compila. En ese orden y en un solo paso.
Elige una base de datos en el paso de despliegue: una casilla en el panel, database: true desde tu agente o deploy --database desde una terminal. Cada base de datos cuenta para las que incluye tu plan, así que nunca viene por defecto: solo tu sí, para esa app, crea una.
Crear la base de datos
Una base de datos Postgres propia, en la región que elijas: Americas, EMEA o APAC.Esperar a que esté en buen estado
Hasta 2 minutos. Si para entonces no está conectada, no se envía ninguna compilación y la respuesta indica en qué estado está.Escribir la configuración de conexión
En el proyecto de alojamiento de tu app: la conexión como valores de solo escritura y el certificado público de la base de datos junto a esos valores. En un primer despliegue, Tofu crea ese proyecto aquí.Compilar, con la base de datos en su lugar
Solo ahora. Cuando tu compilación ejecuta tus migraciones, estas se ejecutan contra la nueva base de datos ya en la primera compilación, antes de que la app se ponga en línea.
Una base de datos creada antes desde la página Base de datos se conecta de la misma manera con tu siguiente despliegue, antes de que ese despliegue compile.
Lo que recibe tu app
Todo conectado, nunca a la vista.
Tofu escribe la configuración de conexión directamente en el entorno sensible y de solo escritura de tu proveedor de alojamiento y, junto a ella, el certificado público de la base de datos como un valor no secreto. Tofu solo guarda los nombres y nada más, y no se usa ninguna clave de service role.
| Variable | Quién la recibe |
|---|---|
| DATABASE_URL | Todas las apps: la cadena de conexión, a través del pooler de transacciones del proveedor. |
| SUPABASE_URL | Todas las apps: la dirección pública del proyecto de base de datos. |
| SUPABASE_ANON_KEY | Todas las apps: su clave pública. |
| SUPABASE_CA_CERT | Todas las apps: el certificado raíz público del servidor de base de datos, para que tu código pueda comprobar que habla con tu base de datos. No es un secreto. |
| ‹prefix›SUPABASE_URL‹prefix›SUPABASE_ANON_KEY‹prefix›SUPABASE_PUBLISHABLE_KEY | Apps de Next.js (NEXT_PUBLIC_), Vite (VITE_) y Astro (PUBLIC_): de nuevo la dirección pública y la clave, con el nombre que espera el código que se ejecuta en el navegador. |
Cualquier otro preset, incluidas las apps de servidor en Python, Go o JavaScript, recibe solo los nombres del lado del servidor, porque Tofu no adivina un prefijo para el navegador.
Confirma el framework de tu app antes de que se conecte la base de datos: los nombres para el navegador se eligen a partir de él en ese momento y no se agregan después.
En el plan Free, si tu app está en el alojamiento estático compartido de Tofu, sus páginas llegan a la base de datos directamente desde el navegador, así que solo recibe la dirección pública y la clave bajo VITE_, y no recibe DATABASE_URL ni el certificado. En caso contrario, recibe lo mismo que en un plan de pago.
Tus migraciones, las ejecuta tu compilación.
La base de datos empieza vacía a propósito: el esquema pertenece al repositorio que lo define. Si pones tu migración en el comando de compilación, cada despliegue trae consigo el esquema: no se copia ninguna credencial a ningún lugar y el esquema no puede quedarse atrás respecto del código con el que se despliega.
A partir del 30 de octubre de 2026, Supabase ya no concede automáticamente acceso a las tablas nuevas de public a los roles que usan las páginas de la app, así que la migración que crea una tabla tiene que otorgarle permisos: select a anon solo para lo que pueden leer los visitantes que no iniciaron sesión, select, insert, update, delete a authenticated, y los mismos a service_role si el código del servidor lo usa. Una vista necesita su propio grant select, creado con security_invoker = true para que las filas que están debajo sigan protegidas por sus reglas de acceso.
Si falla una migración que ejecuta tu compilación, la compilación falla y la versión anterior sigue en línea. Las sentencias que ya se habían aplicado no se revierten.
Cuando la página Base de datos de tu app lo indica, Tofu aplica por sí mismo los archivos de tu carpeta supabase/migrations antes de cada actualización. Si uno de ellos falla, Tofu detiene esa actualización antes de compilarla, y cualquier versión que ya esté en línea sigue funcionando.
La estructura viaja; los datos no. Las migraciones que ejecuta tu compilación llegan a esta base de datos. Las filas que solo existen en tu computadora no llegan, a menos que una migración las inserte.
En el plan Free, si tu app está en el alojamiento estático compartido de Tofu, su compilación no ejecuta migraciones, así que sus tablas se crean fuera de la compilación, como lo muestra la página Base de datos de tu app. Si no, su compilación puede ejecutarlas, como en un plan de pago.
{
"scripts": {
"build": "prisma migrate deploy && next build"
}
}drizzle-kit migrate. Supabase CLI: supabase db push --db-url "$DATABASE_URL". SQL directo: el ejecutor que ya tiene tu repositorio.Ver tus datos
Un editor de tablas, no una consola de SQL.
La página Base de datos muestra las tablas de tu esquema public y recorre sus filas página por página, sin entregarle una consola a nadie.
Lectura
Todas las tablas de tu base de datos, 25 filas por página
Los esquemas propios de tu app y los que el servicio de base de datos mantiene para ella (entre ellos, sus cuentas de inicio de sesión, en modo de solo lectura, con contraseñas y tokens ocultos hasta que presionas Mostrar), con el tipo de cada columna, la clave principal y si la seguridad a nivel de fila está activada. El recuento de filas es una estimación del planificador y la pantalla lo indica.
Escritura
Desactivado hasta que lo actives
La escritura se activa con un interruptor por app. Cada inserción, cambio o eliminación afecta una sola fila y se confirma por separado; si una fila cambió mientras tanto, se avisa en lugar de sobrescribirla.
Nunca
Sin cambios de esquema, sin SQL, sin exportación
El editor no puede crear, modificar ni eliminar nada, y las filas solo salen de él una página a la vez, en tu pantalla.
Solo para ti
En tu panel, no en tu agente
Ningún agente puede leer ni escribir filas. El editor se conecta con el rol de administrador de la propia base de datos, así que la seguridad a nivel de fila no lo limita, y el panel lo indica.
Tuyo para quedártelo
Tus datos, y tu forma de salir.
Se traslada a tu propia organización de Supabase
Si lo solicitas, la base de datos se traslada a una organización de Supabase que te pertenece: un traslado que se acuerda contigo y se revisa, en la misma región, y no un botón.
La cadena de conexión, cuando la necesitas
Para usar una herramienta local o hacer un arreglo de datos puntual, presiona “Mostrar la clave de la base de datos”: la cadena de conexión se vuelve a generar para ti, que eres el propietario, y queda registrado. Ningún agente puede recibirla.
Se elimina cuando tú lo decides
Eliminar una base de datos es una acción del propietario: escribes el nombre de la app y se eliminan la base de datos, su esquema y sus datos, sin dejar ninguna copia.
Todavía no está hecho
Solo Next.js, Vite y Astro obtienen nombres de variables para el navegador. Los demás presets reciben los nombres del lado del servidor, y todavía ninguna app de Python o Go se ha ejecutado de principio a fin contra una base de datos administrada.
No hay rotación de contraseñas. Nada en el panel cambia la contraseña de la base de datos; si sospechas que se filtró, es un caso de soporte.
Cómo se comporta esta base de datos
Tofu no diseña tablas propias ni tiene consola de SQL. Las tablas de tu app provienen de sus propias migraciones: cuando la página Base de datos de tu app lo indica, Tofu aplica los archivos de supabase/migrations antes de cada actualización; si no, las aplica un paso de migración en tu compilación o tu propia computadora con la clave de la base de datos. La falta de consola de SQL es una decisión deliberada: el código que se sube es una entrada no confiable y una sola credencial de operador da acceso a todas las bases de datos administradas.
Los datos locales se quedan locales. Las filas que solo existen en tu computadora nunca llegan a esta base de datos, a menos que una migración las inserte.
Sin tablas ni políticas propias de Tofu. La base de datos empieza vacía; tus migraciones crean las tablas y las políticas de seguridad a nivel de fila de las que depende tu app.
La cantidad de bases de datos depende de tu plan. La cantidad es para todas tus apps en conjunto. La página de precios indica qué planes incluyen bases de datos y cuántas.
Pega un prompt. En línea en 10 minutos.
Tu app, su base de datos, tu dominio y tu inicio de sesión: desde el agente que ya usas, en unos 10 minutos.
Describe una app o trae una hecha con tu agente. Tofu la pone en línea.
Funciona con cualquier agente de programación
Recursos
Comparar
© 2026 Tofu
trytofu.ai
Traducido del inglés. Si las dos versiones no coinciden, prevalece el original en inglés.