【发布时间】:2012-03-31 11:16:13
【问题描述】:
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,我可能会让函数采用函数/块/lambda,比如
recreate_views 'v1', 'v2' do
alter table base alter column name type text
end
这样的事情可能吗?有没有做类似事情的实用程序?
【问题讨论】:
-
select definition from pg_views where viewname ='v1';为您提供视图定义
标签: postgresql views