PostgreSQL列唯一且不为空

5
我的问题是将电子邮件列设置为NOT NULL和UNIQUE。
ALTER TABLE benutzer ADD email VARCHAR(75) UNIQUE;

运行正常,但是

ALTER TABLE benutzer ADD email VARCHAR(75) UNIQUE NOT NULL;

或者

ALTER TABLE benutzer ADD email VARCHAR(75) UNIQUE ,NOT NULL;

工作不正常 :-(

错误是:

FEHLER: 由于“NULL”导致语法错误

我不理解Postgresql的问题 >.<

编辑:

我已解决这个问题。 我的问题的解决方案是删除我的表中的记录。


1
关于您删除的答案,实际上不能说“UNIQUE NOT NULL”等同于“PRIMARY KEY”。只能有一个“PRIMARY KEY”,并且可以在“INFORMATION SCHEMA”中识别。因此,虽然“PRIMARY KEY”确实是“UNIQUE NOT NULL”,但反过来则不成立——“UNIQUE NOT NULL”列不一定是“PRIMARY KEY”。 - Craig Ringer
2
"ALTER TABLE benutzer ADD email VARCHAR(75) UNIQUE NOT NULL;" 对我来说可以。你看到了什么错误? - harmic
1
你是否真正使用了适当的PostgreSQL?请展示 SELECT version,并且通过编辑你的问题复制并粘贴 UNIQUE NOT NULL 错误的完整、准确的文本 - Craig Ringer
3
第三个例子中的“,NOT NULL”中的逗号明显是错误的。但是,如果表中存在现有行,则无法添加没有默认值的“NOT NULL”列。 - user330315
1个回答

1

在包含现有记录的情况下,不可能同时添加一个既是 UNIQUE 又是 NOT NULL 的新列。

原因是添加列会使其具有空值,并同时表示不允许空值是一种矛盾。

  1. 解决方案是删除数据,添加列,然后将数据添加回去

或者

  1. 为新列创建唯一的默认数据

或者

  1. 先创建列,为其生成唯一数据,然后再添加 NOT NULL

有关更多信息,请参阅另一个答案:使用空列创建唯一约束


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接