Lecciones del módulo (3/4)
Cambiar la estructura: ALTER TABLE
Las necesidades de una aplicación cambian con el tiempo y la base de datos debe mantenerse al día. ALTER TABLE es el comando (extremadamente versátil) dedicado a modificar esquemas de tablas existentes sin tener que eliminarlos (arriesgando los datos que contienen).
Modificar columnas (AÑADIR/DROP/ALTER)
Agregar una columna requiere cuidado. Si la tabla ya contiene datos, agregar una columna "NO NULA" arrojará un error en Postgres: ¿qué debería insertar en las filas anteriores? Debes asociar un DEFAULT.
-- Aggiungiamo una colonna
ALTER TABLE users ADD COLUMN age INTEGER; -- Ok, sarà NULL ovunque
-- Aggiungiamo NOT NULL, quindi diamogli un deafult
ALTER TABLE users ADD COLUMN active BOOLEAN NOT NULL DEFAULT true;
-- Cancellare una colonna (ATTENZIONE! i dati andranno persi)
ALTER TABLE users DROP COLUMN age;No solo agregar o eliminar: a menudo es necesario volver a configurar el tipo de una columna o una de sus restricciones:
-- Cambia il tipo di dato (postgreSQL farà un 'cast' dei dati esistenti se possibile)
ALTER TABLE users ALTER COLUMN username TYPE VARCHAR(100);
-- Aggiunge il vincolo NOT NULL
ALTER TABLE users ALTER COLUMN username SET NOT NULL;
-- Rimuove il vincolo NOT NULL (ritorna ad accettare null)
ALTER TABLE users ALTER COLUMN username DROP NOT NULL;Agregar restricciones en tiempo de ejecución
Al igual que con CREATE TABLE, podemos usar ALTER TABLE para adjuntar un CONSTRAINT a una tabla que ya está en uso en la aplicación de producción.
-- Aggiungi un nuovo Foreign Key
ALTER TABLE orders
ADD CONSTRAINT fk_order_status FOREIGN KEY (status_id) REFERENCES statuses(id);
-- Aggiungi un CHECK
ALTER TABLE products
ADD CONSTRAINT price_positive CHECK (price > 0);
-- E per distruggerli?
ALTER TABLE products DROP CONSTRAINT price_positive;Cambiar nombre
Se puede cambiar el nombre de columnas y tablas:
ALTER TABLE users RENAME TO auth_users;
ALTER TABLE auth_users RENAME COLUMN username TO login_name;Pruébalo
La tabla 'productos' actualmente tiene una columna 'nombre'. Modifique la tabla cambiando el nombre de la columna 'nombre' a 'título'. Utilice la operación RENOMBRAR COLUMNA.
Mostrar pista
Sintaxis: ALTERAR TABLA... RENOMBRAR COLUMNA... A...
Solución disponible después de 3 intentos
Agregar restricciones en la posproducción
Modifique la tabla 'productos' agregando una restricción CHECK (llamada 'verifica_prezzo') que requiere que el precio (columna 'precio') sea mayor que 0. La restricción debe agregarse sin eliminar la columna original.
Mostrar pista
Sintaxis: ALTER TABLE tabla ADD CONSTRAINT nombre CHECK (...)
Solución disponible después de 3 intentos