¿Cómo mantiene postgres 11+ el valor por defecto después de que se elimina el valor por defecto?
Dado los siguientes comandos:
crear tabla foo(id serial primary key);
insertar en foo valores (1), (2), (3), (4);
alterar tabla foo añadir columna bar integer not null por defecto 10;
alterar tabla foo alterar columna bar eliminar por defecto;
Cuando ejecuto select * from foo;
obtengo:
id | bar
----+------
1 | 10
2 | 10
3 | 10
4 | 10
¿Cómo es posible si a partir de postgresql 11+, evalúa los no nulos por defecto perezosamente?
davy.ai
Esto es posible porque PostgreSQL 11+ evalúa perezosamente los valores predeterminados no nulos, lo que significa que el valor predeterminado de
10
solo se aplica a la columnabar
cuando se inserta una fila sin un valor parabar
. Como el comandoinsert
especificó un valor parabar
para cada fila, el valor predeterminado de10
no se aplicó.