2016-12-27 2 views
4

Я использую PostgreSQL 9.5, у меня есть тип, который discribes коллекции столбцов:Как добавить столбец в типизированную таблицу без изменения типа PostgreSQL?

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

я создал много таблиц reliying на этом TYPE:

CREATE TABLE datastore.events 
OF datastore.record; 

Теперь я хотел бы добавить столбец к таблице, которая полагается на этот ТИП без обновления ТИПА. Я думаю, что это невозможно, так что мне интересно, есть ли способ отключить мою таблицу из этого TYPE, не теряя данных или скопировав таблицу во временную таблицу?

ответ

5

Для этой цели есть специальный вариант not of. Per the documentation:

NOT OF - Эта форма отделяет типизированный стол от его типа.

Итак:

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

Спасибо, это сработало. Я не знал о НЕ Ключевого слова. Все мои отношения сохранены, – jlandercy

+0

Awesome. Я не знал о 'not of' –

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; 
+0

Спасибо, что поделились этим методом. Просто проверенный, это облегчит мое обслуживание. – jlandercy

Смежные вопросы