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