我有一个名为“Route”的表(生产postgres数据库的一部分)。由于缺少列“arrival_time”,我使用了phpPgAdmin的“添加列”功能。在那里,我添加了每个重要的属性(名称,类型)。当我在创建列后浏览列时,会自动创建一个值:
arrival_time | count
--------------------
NULL | 9358
因此,我无法设置约束“NOT_NULL”,但这是必需的。这个自动创建的值的原因是什么?我该如何避免或解决这个问题?
答案 0 :(得分:2)
这不是phpPgAdmin问题。您必须使用NULL
添加新列(无论如何这是默认值),或使用NOT NULL
约束和添加DEFAULT
子句。如果两者都不存在,PostgreSQL不知道如何处理现有行。
使用
ADD COLUMN
添加列时,表中的所有现有行都会使用列的默认值(NULL
,如果未指定DEFAULT
子句)进行初始化。如果没有DEFAULT
子句,这仅仅是元数据更改,不需要立即更新表的数据;相反,在读数时提供了添加的NULL
值。
如果您已添加该列,则可以使用单个UPDATE
将所有现有行设置为起始值f.ex。:
UPDATE table SET arrival_time = NOW();
之后,您可以向此列添加NOT NULL
约束。