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。如果我可以使用紅寶石,我可能會使用函數/塊/ lambda,就像
recreate_views 'v1', 'v2' do
alter table base alter column name type text
end
是這樣的可能嗎?那裏的公用事業公司是否有類似的做法?
'從pg_views選擇定義viewname表示= 'v1';'給你視圖定義 – dbenhur 2012-03-14 23:03:51