【问题标题】:postgresql - add boolean column to table set defaultpostgresql - 将布尔列添加到表集默认值
【发布时间】:2012-08-09 22:29:35
【问题描述】:

在默认值为false的表中添加列是正确的postgresql语法吗

ALTER TABLE users
ADD "priv_user" BIT
ALTER priv_user SET DEFAULT '0'

谢谢!

【问题讨论】:

  • 你想要一个位列还是一个实际的boolean 列?

标签: sql postgresql


【解决方案1】:
ALTER TABLE users
  ADD COLUMN "priv_user" BOOLEAN DEFAULT FALSE;

也可以直接指定NOT NULL

ALTER TABLE users
  ADD COLUMN "priv_user" BOOLEAN NOT NULL DEFAULT FALSE;

更新:以下仅适用于 postgresql 11 之前的版本。

正如 Craig 在填充表格中提到的那样,将其拆分为多个步骤会更有效:

ALTER TABLE users ADD COLUMN priv_user BOOLEAN;
UPDATE users SET priv_user = 'f';
ALTER TABLE users ALTER COLUMN priv_user SET NOT NULL;
ALTER TABLE users ALTER COLUMN priv_user SET DEFAULT FALSE;

【讨论】:

  • 请注意,如果您的表很大,这可能需要很长时间,并且会一直锁定表。将其拆分为多个步骤会更快:使用ALTER TABLE users ADD COLUMN priv_user BOOLEAN; 添加没有默认值的列,然后添加UPDATE users SET priv_user = 'f';,最后如果需要ALTER TABLE users ALTER COLUMN priv_user SET NOT NULL;
  • 分步的方法是不添加默认值。在单独的步骤中添加“DEFAULT 'f'”会更快吗?
  • 是的,在单独的步骤中添加默认值只是元数据操作,因此非常快。
  • 它是什么 - '元数据操作'?在什么意义上,为什么它与一次性设置值不同?谢谢
  • 实际规则是关键字和不带引号的标识符不区分大小写,因此允许 BOOLEAN 认为内部 postgresql 将使用布尔值。我倾向于用大写来编写标准类型和 SQL 关键字,我自己的标识符都使用小写。
【解决方案2】:

在 psql 中改变列查询语法是这样的

Alter table users add column priv_user boolean default false ;

布尔值 (true-false)(t-f) 值一样保存在数据库中。

【讨论】:

    【解决方案3】:

    仅供参考,如果您已经有一个布尔列并且您只想添加一个默认值:

    ALTER TABLE users
      ALTER COLUMN priv_user SET DEFAULT false;
    

    【讨论】:

    • 此操作对大型表有性能影响吗?在 postgres 9.6 上专门将默认值更改为另一个值而不更改类型
    • 好问题@CPS。我不知道答案,但由于这对现有行没有任何作用(它不像 NOT NULL),所以无论表的大小如何,这都不应该花费任何时间。
    【解决方案4】:

    如果您使用的是 postgresql,那么您必须使用小写的 BOOLEAN 列类型作为布尔值。

    ALTER TABLE users ADD "priv_user" boolean DEFAULT false;

    【讨论】:

      【解决方案5】:

      如果你想要一个实际的布尔列:

      ALTER TABLE users ADD "priv_user" boolean DEFAULT false;
      

      【讨论】:

      • 注意:并非所有版本的 Postgres 都支持在一行中定义。
      猜你喜欢
      • 1970-01-01
      • 2021-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多