如何将 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;
  1. 改变 table 人添加列 temp_data 布尔值;
  2. 更新人物集temp_data=b --(将数据从b列复制到temp_data)
  3. 对“b”列做任何你想做的事。
  4. update people set b=temp_data --(移回数据)
  5. 改变 table 人删除列 temp_data --(可选)