Ahora toca hablar de cómo modificar tablas que ya existen. En la vida de un proyecto, casi nada se queda igual para siempre — los requisitos pueden llegar de repente, como un bombardeococodrilo. Por ejemplo, el product manager decide de pronto que cada usuario necesita un identificador único para su color favorito de fondo de perfil. O te das cuenta de que VARCHAR(50) para el nombre es una broma, porque ya tienes un usuario en la base que se llama "Bombardeococodrilo-Junior-Tercero".
Pues bien, en PostgreSQL tienes una herramienta para estas cosas — el comando ALTER TABLE.
ALTER TABLE es un comando que te permite modificar la estructura de tablas existentes. Con él puedes:
- Añadir nuevas columnas;
- Eliminar columnas que ya no hacen falta;
- Cambiar el tipo de datos de una columna;
- Renombrar la tabla o sus columnas;
- Añadir o quitar restricciones como
NOT NULL,UNIQUE, y mucho más.
Es como si ya hubieras construido una casa (la tabla), pero ahora quieres añadirle una habitación nueva (columna) o quitar ese trastero que no usas (eliminar columna).
Sintaxis de ALTER TABLE
La estructura general del comando es bastante intuitiva:
ALTER TABLE tabla
accion_de_cambio;
Donde:
tabla— el nombre de la tabla que quieres modificar;-
accion_de_cambio— la acción concreta que quieres hacer (por ejemplo, añadir columna, eliminarla o cambiar el tipo de datos).
Ejemplos de uso de ALTER TABLE
Añadir una nueva columna
Si quieres añadir una columna nueva a la tabla, usa el comando ADD COLUMN. Mira este ejemplo:
ALTER TABLE students
ADD COLUMN email VARCHAR(100);
Este comando añade la columna email a la tabla students, donde se guardará la dirección de correo del estudiante. El tipo de datos de la columna es una cadena de hasta 100 caracteres.
Supón que creaste la tabla de estudiantes pero olvidaste añadir la fecha de inscripción. Así lo arreglas:
ALTER TABLE students
ADD COLUMN enrollment_date DATE;
Ahora tienes la columna enrollment_date y puedes guardar la fecha de inscripción.
Eliminar una columna
Si decides que una columna ya no hace falta, usa el comando DROP COLUMN. Por ejemplo:
ALTER TABLE students
DROP COLUMN email;
Este comando elimina la columna email de la tabla students. Ojo, los datos de esa columna también se borran sin posibilidad de recuperarlos.
Punto importante:
Si intentas eliminar una columna que se usa en otras tablas (por ejemplo, como clave foránea), PostgreSQL puede darte un error. En ese caso, primero tienes que eliminar las dependencias.
Cambiar el tipo de datos de una columna
A veces el tipo de datos que elegiste al principio no es el adecuado. Por ejemplo, decides guardar la edad de los estudiantes como SMALLINT, pero luego ves que no es suficiente y quieres usar BIGINT. Así se hace:
ALTER TABLE students
ALTER COLUMN age TYPE BIGINT;
Punto importante: si ya hay datos en la columna, PostgreSQL comprueba si se pueden convertir al nuevo tipo. Si no se puede, te dará un error.
Supón que creaste la columna description como VARCHAR(100), pero luego ves que las descripciones de los cursos pueden ser mucho más largas. Cambia el tipo de datos a TEXT:
ALTER TABLE courses
ALTER COLUMN description TYPE TEXT;
Ahora puedes guardar descripciones completas de los cursos sin límite de longitud.
Renombrar una columna
Si necesitas cambiar el nombre de una columna, usa el comando RENAME COLUMN:
ALTER TABLE students
RENAME COLUMN name TO full_name;
Ahora la columna name se llama full_name.
Renombrar una tabla
También puedes cambiar el nombre de la propia tabla. Para eso se usa el comando RENAME TO:
ALTER TABLE students
RENAME TO university_students;
Ahora la tabla students se llama university_students.
Poner/quitar la restricción NOT NULL
Supón que creaste una columna pero olvidaste hacerla obligatoria (NOT NULL). ¡No pasa nada! Puedes añadir esa restricción después:
ALTER TABLE students
ALTER COLUMN name SET NOT NULL;
Si quieres quitar la restricción NOT NULL, usa el comando DROP NOT NULL:
ALTER TABLE students
ALTER COLUMN name DROP NOT NULL;
Poner un valor por defecto
Si la columna ya existe pero quieres ponerle un valor por defecto, usa SET DEFAULT:
ALTER TABLE enrollments
ALTER COLUMN enrollment_date SET DEFAULT CURRENT_DATE;
Para quitar el valor por defecto, haz esto:
ALTER TABLE enrollments
ALTER COLUMN enrollment_date DROP DEFAULT;
Veremos cada comando con más detalle en las próximas tres lecciones. Así que prepárate :)
Errores típicos al usar ALTER TABLE
Al trabajar con ALTER TABLE pueden salir errores. Aquí tienes los más comunes:
Intentar cambiar a un tipo de datos que no es compatible con los datos actuales. Por ejemplo, si en la columna age ya hay datos y quieres convertirla a una cadena VARCHAR, eso dará error. Solución: primero borra o convierte los datos.
Intentar eliminar una columna que se usa como clave foránea o índice. PostgreSQL no te dejará hacerlo para mantener la integridad de los datos. Antes de eliminar columnas dependientes, tienes que quitar las relaciones.
Errores de sintaxis. El comando ALTER TABLE es bastante flexible, pero exige que sigas la sintaxis al pie de la letra. Por ejemplo, el comando ADD COLUMN debe incluir el tipo de datos.
Escenarios reales de uso
En la vida real, el comando ALTER TABLE se usa todo el rato. Puedes encontrártelo cuando:
- Añades nuevos datos a una tabla existente (por ejemplo, nuevas columnas);
- Optimizas la base de datos (por ejemplo, cambiando tipos de datos para ahorrar memoria);
- Corriges errores de diseño (por ejemplo, si al principio olvidaste restricciones o elegiste mal el tipo de datos).
Ahora ya ves lo potente que es el comando ALTER TABLE. Es una herramienta brutal que te ayuda a adaptarte a los cambios del proyecto. Lo principal: ve con cuidado y no te precipites, para no "romper la casa" (tu tabla) intentando añadirle una habitación nueva.
GO TO FULL VERSION