Postgresql:alter table

时间:2017-11-03 08:40:07

标签: postgresql

这两个查询之间有什么不同吗?如果有什么会更快?

ALTER TABLE mytable ADD COLUMN newcolumn VARCHAR(64) DEFAULT NULL;
ALTER TABLE mytable ADD COLUMN newcolumn VARCHAR(64) NULL;

它是如何在引擎盖下工作的?如果我们有一个包含数百万行的表,那么任何一个查询都会重写每一行以将NULL值设置为新列吗?

2 个答案:

答案 0 :(得分:1)

第一个语句添加一个默认值为NULL的列,这意味着如果未在插入中明确包含,则插入将设置为null。

第二个语句添加一个列为“约束”的列,列值可能为NULL,与NOT NULL约束相反。

答案 1 :(得分:0)

https://www.postgresql.org/docs/current/static/sql-createtable.html

  

NULL允许列包含空值。这是   默认值。

并进一步

  

DEFAULT default_expr

     

...

     

如果列没有默认值,则默认值为null。

因此,您的两个语句将列重置为两个默认创建选项。

您的列中的默认值不会超过默认值。如果两者都不是默认的 - 将花费相同的时间,因为它只会更新目录,更改两个,一个或没有修饰符......