PostgreSQL-将布尔列添加到表集默认


159

这是正确的postgresql语法,用于向表中添加默认值为的列 false

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

谢谢!


3
您想要位列还是实际boolean列?
rfusca

Answers:


285
ALTER TABLE users
  ADD COLUMN "priv_user" BOOLEAN DEFAULT FALSE;

您也可以直接指定NOT NULL

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

UPDATE:以下仅适用于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;

28
请注意,如果您的桌子很大,这可能会花费很长时间并且会在整个时间内锁定桌子。更快地将其拆分为多个步骤:使用添加默认值的列ALTER TABLE users ADD COLUMN priv_user BOOLEAN;,然后UPDATE users SET priv_user = 'f';根据需要添加ALTER TABLE users ALTER COLUMN priv_user SET NOT NULL;
Craig Ringer

分为步骤的方法不添加默认值。在单独的步骤中添加“ DEFAULT'f'”是否仍然更快?
查理·布朗

1
是的,在单独的步骤中添加默认值只是一个元数据操作,因此非常快。
Eelke

它是什么-“元数据操作”?从什么意义上讲,为什么它与一次性设置值有所不同?谢谢
Andrey M. Stepanov

1
实际规则是关键字和未加引号的标识符不区分大小写,因此允许BOOLEAN认为内部的postgresql将使用布尔值。我倾向于以大写形式编写标准类型和SQL关键字,我对所有自己的标识符都使用小写形式。
Eelke '18

17

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

ALTER TABLE users ADD "priv_user" boolean DEFAULT false;

注意:并非所有版本的Postgres都支持在一行中定义。
本杰明·R

14

仅供以后参考,如果您已经有一个布尔列并且只想添加一个默认值,请执行以下操作:

ALTER TABLE users
  ALTER COLUMN priv_user SET DEFAULT false;

5

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

ALTER TABLE用户添加“ priv_user”布尔值DEFAULT false;


4

在psql中,像这样更改列查询语法

Alter table users add column priv_user boolean default false ;

布尔值(true-false)(tf) value 一样保存在DB中。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.