[[toc]]
适用范围
MogDB5.0.+
问题概述
数据库中对象表上存在视图时,业务需要对表结构进行维护时报错:
ERROR: cannot alter type of a column used by a view or rule
DETAIL: rule _RETURN on view v_test_view_table_ddl depends on column "name"
此报错内容适于物所有版本MogDB。
解决方案
MogDB5.0.1始新增加特性
支持视图与其依赖项解耦,在其依赖项发生变更时视图可以通过触发条件自动编译。该特性通过新增的SIGHUP级别GUC参数view_independent控制启用,默认关闭。参数取值为true时,支持单独更新视图依赖项;取值为false时,行为保持前向兼容,即修改视图依赖项时报错。
-
当此特性启用时:
- 视图的依赖项可以单独进行修改,比如修改表、修改视图、修改函数等,无需强制删除视图;
- 支持查询视图时自动编译或者手动通过SQL语句(ALTER VIEW view_name COMPILE)编译视图。
实验验证
步骤 1 创建表
MogDB=# create table test_view_table_ddl (id int,name varchar(200));
CREATE TABLE
步骤 2 创建视图
MogDB=# create view v_test_view_table_ddl as select * from test_view_table_ddl;
CREATE VIEW
步骤 3 修改表结构
MogDB=# alter table test_view_table_ddl modify name varchar(300);
ERROR: cannot alter type of a column used by a view or rule
DETAIL: rule _RETURN on view v_test_view_table_ddl depends on column "name"
步骤 4 启动新特性
MogDB=# alter system set view_independent=on;
ALTER SYSTEM SET
步骤 5 修改表结构
MogDB=# alter table test_view_table_ddl modify name varchar(300);
WARNING: pgxc_maintenance_mode is not allowed in postgresql.conf. Set to default (false).
ALTER TABLE
步骤 6 验证表结构是否变更成功
可见字段name长度已经从200变更为300
MogDB=# \d test_view_table_ddl
Table "public.test_view_table_ddl"
Column | Type | Modifiers
--------+------------------------+-----------
id | integer |
name | character varying(300) |
参考文档
https://docs.mogdb.io/zh/mogdb/v5.0/5.0.1
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




