0

我有一个名为“Route”的表(生产 postgres 数据库的一部分)。由于缺少列“arrival_time”,我使用了 phpPgAdmin 的“添加列”功能。在那里,我添加了每个重要的属性(名称、类型)。当我在创建列后浏览该列时,会自动创建一个值:

arrival_time | count
--------------------
NULL         | 9358

因此,我无法设置约束“NOT_NULL”,但这是必需的。这种自动创造价值的原因是什么?我怎样才能避免它或解决这个问题?

4

1 回答 1

2

这不是 phpPgAdmin 问题。您必须添加新列(无论如何都是NULL默认值),或者添加NOT NULL约束DEFAULT子句。如果两者都不存在,PostgreSQL 不知道如何处理现有行。

当添加了 列ADD COLUMN时,表中的所有现有行都将使用该列的默认值进行初始化(NULL如果未DEFAULT指定子句)。如果没有DEFAULT子句,这只是元数据更改,不需要立即更新表数据;NULL相反,增加的值是在读出时提供的。

如果您已经添加了该列,则可以使用单个UPDATE将所有现有行设置为起始值 f.ex.:

UPDATE table SET arrival_time = NOW();

之后,您可以NOT NULL向该列添加约束。

于 2015-01-21T12:54:22.583 回答