tai-sql push¶
Sincroniza la base de datos con lo que declara el schema.
Empieza siempre por --dry-run --verbose
Imprime el DDL exacto que se ejecutaría, y no toca nada. Es el hábito que evita el 100 % de los disgustos.
Sin migraciones versionadas¶
tai-sql no tiene ficheros de migración que revisar ni un historial que reproducir. En cada ejecución compara el schema declarado con el estado real de la base de datos y genera el DDL que hace falta para que coincidan:
detectar drift → planificar DDL → validar seguridad → confirmar → ejecutar en una
transacción → regenerar recursos
Todo el DDL va en una transacción: o se aplica entero o no se aplica nada. En los motores
donde el DDL no es transaccional eso no se puede garantizar, y por eso el --dry-run importa
todavía más.
Los tres niveles de seguridad¶
Antes de ejecutar nada, cada operación se clasifica:
| Nivel | Qué significa | Qué pasa |
|---|---|---|
| SAFE | No puede perder datos | Se ejecuta |
| WARNING | Puede perder datos | Pide confirmación (--force la salta) |
| BLOCKED | No se puede ejecutar sobre los datos actuales | Corta el push, con la solución |
Un push cortado por la validación sale con código distinto de 0, así que un script que lo llame se entera.
Qué puede destruir¶
La respuesta corta: push aplica lo que declaras, y lo que no declaras lo elimina.
Lo que destruye datos¶
| Cambio en el schema | Qué hace en la base de datos |
|---|---|
| Quitar una columna | DROP COLUMN — se pierden sus datos. WARNING si tiene filas con valor |
| Quitar una tabla | DROP TABLE — se pierde entera |
| Cambiar el tipo de una columna | Intenta convertir. Si los datos no caben, la transacción falla y no se aplica nada. Para hacerlo, suelta y recrea las FKs que apunten a esa columna |
Lo que corta antes de empezar (BLOCKED)¶
- Volver
NOT NULLuna columna que tiene NULLs → hay que rellenarlos antes. - Añadir una
uniquesobre una columna con duplicados. - Añadir una FK con filas huérfanas.
- Cambiar la clave primaria de una tabla referenciada por una FK: el índice que respalda la PK es el que usan esas claves foráneas, y el motor no deja eliminarlo.
Se arreglan con los datos, no con el schema:
Lo que no toca¶
- Un índice ajeno no se elimina nunca. Si no lleva la convención de nombres de tai-sql, se da por creado a mano y se respeta, aunque el schema no lo declare.
- Convertir una columna en autoincremental no se aplica, y por eso tampoco se reporta: exige crear una secuencia o una identidad. Hay que hacerlo a mano.
Las opciones¶
| Opción | Qué hace |
|---|---|
-d, --dry-run |
Muestra el DDL y no ejecuta nada |
-v, --verbose |
Detalle de cada paso |
-f, --force |
No pregunta. Para CI, no para tu terminal |
--no-generate |
No regenera el cliente al terminar (por defecto sí, si hubo cambios) |
--with-feed |
Ejecuta el feed entre la creación de las tablas y la aplicación de las FKs |
-s, --schema |
Sobre qué schema actuar |
Cuándo regenera el cliente
Al terminar, y solo si hubo cambios en la base de datos. Si tocaste algo que no produce
DDL —una descripción, un feed(), un trigger—, no regenera nada: para eso está
tai-sql generate.
Si la base de datos no existe¶
push la crea. Para saberlo antes sin tocar nada, tai-sql ping -d.
En CI¶
--force salta las confirmaciones, pero no los BLOCKED: si una operación no se puede
ejecutar sobre los datos actuales, el push corta igualmente y devuelve error.