我正在尝试更改名为company的表,但它会显示错误
syntax error at or near "("
LINE 2: ADD( company_access_level short NOT NULL,
我的语法是
ALTER TABLE company
ADD company_access_level short NOT NULL,
workgroup_level short NOT NULL,
Company Logon URL character varying NOT NULL,
Company Logoff URL character varying NOT NULL
由于
答案 0 :(得分:21)
我刚刚在postgressql中尝试了这个固定语法,但它确实有效。虽然没有short
数据类型,所以你必须使用别的东西(也许是smallint?)如果你的表包含数据,那么这个脚本会因John的答案中的原因而失败。
ALTER TABLE company
ADD company_access_level int NOT NULL,
ADD workgroup_level int NOT NULL,
ADD "Company Logon URL" character varying NOT NULL,
ADD "Company Logoff URL" character varying NOT NULL
答案 1 :(得分:3)
此外,如果您的表中包含数据,则无法添加NOT NULL列(对于某些RDBMS,即使表中没有数据,也无法添加NOT NULL列)。
提供默认值或允许列为NULL。您始终可以使用数据填充新列,然后将列修改为NOT NULL。
答案 2 :(得分:0)
很抱歉打开这么老的问题,但是其中一个你无法添加NOT NULL的答案中的建议给我带来了很多麻烦。您 CAN 将NOT NULL列添加到包含数据的表中,唯一的限制是您还必须提供默认值。经过Sybase,Postgres和MySQL的测试。所以上面的例子变成了:
ALTER TABLE company
ADD company_access_level int default 'not set' NOT NULL ,
ADD workgroup_level int default 0 NOT NULL,
ADD "Company Logon URL" character varying default 'not set' NOT NULL,
ADD "Company Logoff URL" character varying default 'not set' NOT NULL
答案 3 :(得分:0)
作为一个带着同样问题来到这里的人,我不知道如何解释这些问题。我尝试了所有这些,并且总是在一个或另一个术语中“接近”语法错误。回到官方docs后,我意识到缺少的是一个额外的关键字,例如SET或TYPE。例子:
首先这个
zuri=# ALTER TABLE newarts
ALTER COLUMN sunsetdate DATE NULL;
ERROR: syntax error at or near "DATE"
LINE 2: ALTER COLUMN sunsetdate DATE NULL;
然后这个:
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;
是的,那里仍然有一个错误,但是一旦我用关键字TYPE指定了DATE的含义,错误就解决了,我转到了另一个错误。我对添加SET有相同的经验(参见我已经引用的官方文档的同一页上的示例)。
关于NOT NULL的具体问题,(特别是因为它与我的日期问题有关)我读了这个answer它似乎工作 - 我没有收到错误信息 -
zuri=# update lili_code set sunsetdate=NULL; UPDATE 0
但后来我读了
成功完成后,UPDATE命令将返回表单
的命令标记
UPDATE count
计数是更新的行数。如果count为0,则没有行 匹配条件(这不被视为错误)。
官方文档中也有here。
最后,我转向PGAdminIII,在那里我发现NOT NULL是一个简单的复选框。取消选中,问题解决了。我确定有一种方法可以在psql的命令行中完成这项工作,我还没有找到它。
我认为一些变化也可能是由于ALTER和UPDATE之间的差异(请参阅此SO answer和我的厚颜无耻的评论)以及ADDing新结构(如OP的问题中)和修改之间的差异已存在的数据(如我的)。 故事的寓意,阅读官方文档。不要扫描它。阅读。如果您想了解有关NULL和NOT NULL的更多信息,请阅读this。