Изменение типа столбца, используемого в других представлениях

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, я бы, вероятно, использовал функцию, принимающую функцию / block / lambda, как

recreate_views 'v1', 'v2' do
  alter table base alter column name type text
end

Возможно ли что-то подобное? Есть ли утилиты, которые делают что-то подобное?

Ответы на вопрос(2)

Ваш ответ на вопрос