phpPgAdmin 在添加列时自动创建空行

phpPgAdmin automatically creates null row during adding a column

我有一个 table,叫做 "Route"(生产 postgres 数据库的一部分)。由于缺少列 "arrival_time",我使用了 phpPgAdmin 的 "Add column" 函数。在那里,我添加了每个重要的 属性(名称、类型)。当我浏览创建后的列时,会自动创建一个值:

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

因此,我无法设置约束 "NOT_NULL",但这是必需的。这个自动创造价值的原因是什么?我该如何避免或解决这个问题?

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

When a column is added with ADD COLUMN, all existing rows in the table are initialized with the column's default value (NULL if no DEFAULT clause is specified). If there is no DEFAULT clause, this is merely a metadata change and does not require any immediate update of the table's data; the added NULL values are supplied on readout, instead.

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

UPDATE table SET arrival_time = NOW();

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