PostgreSQL,无法使用ALTER COLUMN SET DEFAULT设置默认值

时间:2016-11-05 21:22:48

标签: postgresql

我想在表格中为INTEGER类型的已存在列设置默认值。

根据postgreSQL doc我应该使用以下声明:

ALTER [ COLUMN ] column_name SET DEFAULT expression 

因此我的sql语句如下所示:

ALTER TABLE users ALTER COLUMN board_consecutive_share_days SET DEFAULT 0;

我发出命令后没有发生任何事情,默认值没有设置为列:

ownpleasuretestdb=# select board_consecutive_share_days from users; 

 board_consecutive_share_days 
------------------------------



(3 rows)

那么,请告诉我我的sql语句有什么问题?

1 个答案:

答案 0 :(得分:1)

您已设置列的默认值。这意味着,只要您INSERT该表中的新行,如果省略该列,将使用默认值。

例如,如果你创建一个这样的表:

CREATE TABLE foo (a int, b int default 0);

然后你可以发出:

# INSERT INTO foo VALUES (1, 2);
# INSERT INTO foo (a) VALUES (2);
# SELECT * FROM foo;
---+---
 1 | 2
 2 | 0
(2 rows)

另一方面,如果要将所有现有值设置为0,则可以使用UPDATE语句执行此操作。像这样的东西会起作用:

UPDATE users SET board_consecutive_share_days = 0;

如果您只想在没有值的地方设置该值(即null),那也很容易:

UPDATE users SET board_consecutive_share_days = 0 WHERE board_consecutive_share_days IS NULL;