【问题标题】:PostgreSQL, can't set default value using ALTER COLUMN SET DEFAULTPostgreSQL,无法使用 ALTER COLUMN SET DEFAULT 设置默认值
【发布时间】:2017-03-19 12:11:18
【问题描述】:

我想为表格中已存在的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 语句有什么问题?

【问题讨论】:

    标签: postgresql


    【解决方案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; 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-23
      • 1970-01-01
      相关资源
      最近更新 更多