如何将 PostgreSQL 12 生成的列转换为普通列?
How to convert PostgreSQL 12 generated column to a normal column?
我在 PostgreSQL 12 中有一个生成列定义为
create table people (
id bigserial primary key,
a varchar,
b boolean generated always as (a is not null) stored
);
但现在我希望列 b
可设置,但我不想丢失列中已有的数据,我可以删除该列并重新创建它,但这会丢失当前数据。
提前致谢
您可以在一个事务中 运行 多个 ALTER TABLE
语句:
BEGIN;
ALTER TABLE people ADD b_new boolean;
UPDATE people SET b_new = b;
ALTER TABLE people DROP b;
ALTER TABLE people RENAME b_new TO b;
COMMIT;
- 改变 table 人添加列 temp_data 布尔值;
- 更新人物集temp_data=b --(将数据从b列复制到temp_data)
- 对“b”列做任何你想做的事。
- update people set b=temp_data --(移回数据)
- 改变 table 人删除列 temp_data --(可选)
我在 PostgreSQL 12 中有一个生成列定义为
create table people (
id bigserial primary key,
a varchar,
b boolean generated always as (a is not null) stored
);
但现在我希望列 b
可设置,但我不想丢失列中已有的数据,我可以删除该列并重新创建它,但这会丢失当前数据。
提前致谢
您可以在一个事务中 运行 多个 ALTER TABLE
语句:
BEGIN;
ALTER TABLE people ADD b_new boolean;
UPDATE people SET b_new = b;
ALTER TABLE people DROP b;
ALTER TABLE people RENAME b_new TO b;
COMMIT;
- 改变 table 人添加列 temp_data 布尔值;
- 更新人物集temp_data=b --(将数据从b列复制到temp_data)
- 对“b”列做任何你想做的事。
- update people set b=temp_data --(移回数据)
- 改变 table 人删除列 temp_data --(可选)