🔄 Recetas de Migraciones
Las migraciones en Supabase/Postgres pueden romper el entorno de producción si no se hacen con cuidado. Estas recetas aseguran Zero-Downtime Migrations.
1. Añadir una Columna Obligatoria (NOT NULL)
[PELIGRO]: Si haces ALTER TABLE ... ADD COLUMN ... NOT NULL en una tabla con millones de filas, Postgres reescribirá la tabla entera y bloqueará las escrituras, causando caída de la API.
[REQUIRED] Receta Segura:
- Añadir la columna admitiendo nulos.sql
ALTER TABLE users ADD COLUMN age INT; - Actualizar las filas existentes (en lotes si son millones).sql
UPDATE users SET age = 18 WHERE age IS NULL; - Añadir el constraint de
NOT NULL.sqlALTER TABLE users ALTER COLUMN age SET NOT NULL;
2. Renombrar una Columna (Zero-Downtime)
Si renombras una columna con ALTER TABLE RENAME, el código backend viejo fallará al intentar leerla hasta que el nuevo deploy finalice.
[REQUIRED] Receta Segura:
- Crea la nueva columna.sql
ALTER TABLE users ADD COLUMN full_name TEXT; - Sincroniza los datos con un Trigger, para que cada inserto en
old_namevaya afull_name. - Haz el deploy del código para que lea y escriba en
full_name. - Borra la columna vieja
old_nameen una migración futura.
3. Crear Índices de Forma Segura
Crear un índice normal bloquea las escrituras en la tabla hasta que el índice termine de construirse.
[REQUIRED] Receta Segura: Siempre usa CONCURRENTLY para crear índices en producción.
CREATE INDEX CONCURRENTLY idx_users_email ON users(email);(Nota: No se puede usar CONCURRENTLY dentro de una transacción BEGIN ... COMMIT).