如何在不改变PostgreSQL中的类型的情况下向列表添加列?

时间:2016-12-27 09:05:46

标签: postgresql

我正在使用PostgreSQL 9.5,我有一个TYPE,它描述了一组列:

CREATE TYPE datastore.record AS
   (recordid bigint,
    ...
    tags text[]);

我在这个TYPE上创建了许多表:

CREATE TABLE datastore.events
OF datastore.record;

现在我想在不更新TYPE的情况下向依赖此TYPE的表中添加一列。我认为这是不可能的,因此我想知道是否有办法从这个TYPE取消绑定我的表而不丢失任何数据或将表复制到临时表中?

2 个答案:

答案 0 :(得分:6)

为此目的,有一个特殊选项not of。每the documentation

  

NOT OF - 此表单将类型表与其类型分开。

所以:

alter table my_table not of;
alter table my_table add new_column integer;

答案 1 :(得分:1)

如果你不想破坏关系:

--drop table if exists t2;
--drop table if exists t1;
--drop type if exists tp_foo;

create type tp_foo as (i int, x int);

create table t1 of tp_foo;
create table t2 (y text) inherits(t1);

alter type tp_foo add attribute z date cascade;

select * from t2;