簡體   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