微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何将 PostgreSQL 12 生成的列转换为普通列?

如何解决如何将 PostgreSQL 12 生成的列转换为普通列?

我在 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. alter table people add column temp_data boolean;
  2. update people set temp_data=b --(将数据从b列复制到temp_data)
  3. 对“b”列做任何你想做的事情。
  4. 更新人员设置 b=temp_data --(将数据移回)
  5. alter table people drop column temp_data --(可选)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。