create table base (name character varying(255));
create view v1 as select *, now() from base;
create view v2 as select * from v1 where name = 'joe';
alter table base alter column name type text;
Выдает эту ошибку:
cannot alter type of a column used by a view or rule
DETAIL: rule _RETURN on view v1 depends on column "name"
Это немного раздражает, потому что теперь мне нужно воссоздать все представления, которые ссылаются на столбец base.name
.Это особенно раздражает, когда у меня есть представления, которые ссылаются на другие представления.
То, что я хотел бы сделать, это что-то вроде:
select recreate_views('v1', 'v2', 'alter table base alter column name type text');
И у функции есть определения вида дляv1 и v2, удалите их, запустите указанный код, затем воссоздайте v1 и v2.Если бы я мог использовать Ruby, я бы, вероятно, взял функцию / блок / лямбду, например
recreate_views 'v1', 'v2' do
alter table base alter column name type text
end
Возможно ли что-то подобное?Существуют ли какие-либо утилиты, которые делают что-то подобное?