Estoy agregando una nueva columna "NOT NULL" a mi base de datos Postgresql usando la siguiente consulta (desinfectada para Internet):
ALTER TABLE mytable ADD COLUMN mycolumn character varying(50) NOT NULL;
Cada vez que ejecuto esta consulta, recibo el siguiente mensaje de error:
ERROR: column "mycolumn" contains null values
Estoy perplejo. ¿A dónde me estoy yendo mal?
NOTA: Estoy usando pgAdmin III (1.8.4) principalmente, pero recibí el mismo error cuando ejecuté el SQL desde la Terminal.
sql
postgresql
alter-table
Huuuze
fuente
fuente
man ALTER_TABLE
:)Como otros han observado, debe crear una columna anulable o proporcionar un valor POR DEFECTO. Si eso no es lo suficientemente flexible (por ejemplo, si necesita que el nuevo valor se calcule para cada fila individualmente de alguna manera), puede usar el hecho de que en PostgreSQL, todos los comandos DDL se pueden ejecutar dentro de una transacción:
fuente
Como las filas ya existen en la tabla, la
ALTER
instrucción intenta insertarNULL
en la columna recién creada para todas las filas existentes. Tendría que agregar la columna según lo permitaNULL
, luego llenar la columna con los valores que desee y luego configurarla comoNOT NULL
después.fuente
Debe definir un valor predeterminado o hacer lo que dice Sean y agregarlo sin la restricción nula hasta que lo haya completado en las filas existentes.
fuente
Especificar un valor predeterminado también funcionaría, suponiendo que un valor predeterminado sea apropiado.
fuente
O cree una nueva tabla como temporal con la columna adicional, copie los datos en esta nueva tabla mientras la manipula según sea necesario para llenar la nueva columna no anulable, y luego cambie la tabla mediante un cambio de nombre de dos pasos.
Sí, es más complicado, pero es posible que deba hacerlo de esta manera si no desea una gran ACTUALIZACIÓN en una mesa en vivo.
fuente
esta consulta actualizará automáticamente los valores nulos
fuente
Esto funcionó para mí: :)
fuente
NOT NULL
restricción en su consulta. Por supuesto que está funcionando.