[英]Adding a column to existing PostgreSQL table with constraint and default value
[英]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"
参考最新的文档,可以使用两条语句完成此操作。
ALTER TABLE my_table ADD COLUMN description varchar(100) DEFAULT 'A1';
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 |
让我知道这是否适合您。
是的,您可以通过在一个 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.