繁体   English   中英

向 postgresql 中的现有表添加具有默认值的列

[英]Add a column with a default value to an existing table in postgresql

是否有 postgres 查询将新列添加到现有表并使用特定值自动填充该表的所有行的该列,例如"A1"仅一次,因为该列被创建,以便我可以仍然将列的 DEFAULT 值设置为另一个值,比如说"B2"

为了清楚起见,我正在寻找这样的东西:

鉴于my_table

name   |   work
------------------------
bob    |  fireman
carl   |  teacher
alice  |  policeman

我的查询

ALTER TABLE my_table 
ADD COLUMN description varchar(100) 
DEFAULT "B2"
COMMAND_I_D_WISH_TO_KNOW "A1";

my_table更改为

name   |   work       | description
-------------------------------------
bob    |  fireman     | "A1"
carl   |  teacher     | "A1"
alice  |  policeman   | "A1"

这样如果之后我运行查询

INSERT INTO my_table(name, work)
VALUES karen, developer;

my_tables变成

name   |   work       | description
-------------------------------------
bob    |  fireman     | "A1"
carl   |  teacher     | "A1"
alice  |  policeman   | "A1"
karen  |  developer   | "B2"

参考最新的文档,可以使用两条语句完成此操作。

  1. 添加具有旧默认值的列

ALTER TABLE my_table ADD COLUMN description varchar(100) DEFAULT 'A1';

  1. 修改列以使用不同的默认值

ALTER TABLE my_table ALTER COLUMN description SET DEFAULT 'B2'

下面包含了一个完整的可重现样本:

CREATE TABLE my_table (
  "name" VARCHAR(5),
  "work" VARCHAR(9)
);

INSERT INTO my_table
  ("name", "work")
VALUES
  ('bob', 'fireman'),
  ('carl', 'teacher'),
  ('alice', 'policeman');

查询#1

select * from my_table;
姓名 工作
鲍勃 消防队员
卡尔 老师
爱丽丝 警察

查询#2

ALTER TABLE my_table 
ADD COLUMN description varchar(100) 
DEFAULT 'A1';

没有要显示的结果。


查询 #3

select * from my_table;
姓名 工作 描述
鲍勃 消防队员 A1
卡尔 老师 A1
爱丽丝 警察 A1

查询 #4

ALTER TABLE my_table 
ALTER COLUMN description SET DEFAULT 'B2';

没有要显示的结果。


查询 #5

INSERT INTO my_table("name", "work")
VALUES ('karen', 'developer');

没有要显示的结果。


查询 #6

select * from my_table;
姓名 工作 描述
鲍勃 消防队员 A1
卡尔 老师 A1
爱丽丝 警察 A1
卡伦 开发商 B2

查看 DB Fiddle 上的工作演示

让我知道这是否适合您。

是的,您可以通过在一个 ALTER 中使用两个操作来做到这一点。

ALTER TABLE my_table 
  ADD COLUMN description varchar(100) DEFAULT 'A1', 
  ALTER COLUMN description SET DEFAULT 'B2';

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM