Como alguien que vino aquí con la misma pregunta, no estoy seguro de qué hacer con estas respuestas. Los probé todos, y siempre obtuve un error de sintaxis "cerca" de un término u otro. Después de volver al docs oficial, me di cuenta de que lo que faltaba era una palabra clave adicional, como SET o TYPE. Ejemplos:
por primera vez este
zuri=# ALTER TABLE newarts ALTER COLUMN sunsetdate DATE NULL; ERROR: syntax error at or near "DATE" LINE 2: ALTER COLUMN sunsetdate DATE NULL;
Entonces esto:
zuri=# ALTER TABLE newarts ALTER COLUMN sunsetdate TYPE DATE NULL; ERROR: syntax error at or near "NULL" LINE 2: ALTER COLUMN sunsetdate TYPE DATE NULL;
Sí, todavía hay un error allí, pero una vez que se especifica el significado de la fecha con la palabra clave TIPO del se resolvió el error y pasé a otro. Tuve la misma experiencia con la adición de SET (vea los ejemplos en la misma página de los documentos oficiales que ya cité).
En cuanto a la cuestión específica de NOT NULL, (especialmente en lo relacionado a mi problema de fechas) He leído este answer y parece que ha funcionado - No he tenido un mensaje de error -
zuri=# update lili_code set sunsetdate=NULL; UPDATE 0
pero luego leí
al finalizar con éxito, un comando UPDATE devuelve una etiqueta de comando de la forma
UPDATE count
El recuento es el número de filas actualizadas. Si count es 0, no hay filas que coincidan con la condición (esto no se considera un error).
que también está en los documentos oficiales, here.
Finalmente, me dirigí a PGAdminIII, donde encontré que NOT NULL es una casilla de verificación simple. Desmárquelo, problema resuelto. Estoy seguro de que hay una manera de hacer que esto funcione en la línea de comandos con psql, simplemente no lo he encontrado.
Creo que parte de la variación también puede deberse a las diferencias entre ALTER y ACTUALIZACIÓN (ver este SO answer y mi descarado comentario) así como también entre agregar nuevas estructuras (como en la pregunta del OP) y modificar datos ya está allí (como en el mío). La moraleja de la historia, lea la documentación oficial. No lo escanee. Léelo. Y si quiere saber más acerca de NULL y NOT NULL, lea this.
El mensaje de error tiene un paréntesis y la sintaxis que publicó no. ¿Estás seguro de que los dos están sincronizados? ¿Y qué RDBMS estás usando? Estoy bastante seguro de que tendrás que delimitar los nombres de las columnas que contienen espacios de alguna manera (probablemente entre comillas) –
Estoy usando postgresql – lakshmi