首页
解决方案
技术服务
专业数据库维保服务 大数据维保服务
一体机
Oracle数据库一体机 PolarDB数据库一体机 瀚高数据库一体机 崖山数据库一体机 海扬数据库一体机 高斯数据库一体机 金仓数据库一体机
产品
CLup乘数云统一平台 CData高性能数据库云一体机 CPDA高性能双子星数据库机 CBackup数据库备份恢复云平台 CMiner: PostgreSQL中的CDC CSYun超融合虚拟机产品 ZQPool数据库连接池 ConshGuard数据保护产品 APCC: Greenplum管理平台
文档
文章
客户及伙伴
中启开源
关于我们
登录
×
修改密码

在postgresql中,如果创建视图后,需要修改基础表,会出现一些问题。

基础表和视图
  1. postgres=# create table cstech(age int, name varchar(10), class int);
  2. CREATE TABLE
  3. # 这里我们采用select * 来选择所有字段
  4. postgres=# create view cs_v as select * from cstech;
  5. CREATE VIEW
  6. postgres=# insert into cstech values(22, 'lxcos', 1);
  7. INSERT 0 1
  8. # 可以发现使用select *获取到的字段其实在创建视图的时候内部已经转换成了对应的字段名称
  9. postgres=# select * from cs_v;
  10. age | name | class
  11. -----+-------+-------
  12. 22 | lxcos | 1
  13. (1 row)
添加字段的测试
  1. postgres=# alter table cstech add column school text;
  2. ALTER TABLE
  3. postgres=# select * from cs_v;
  4. age | name | class
  5. -----+-------+-------
  6. 22 | lxcos | 1
  7. (1 row)

针对上面的select * 创建的视图获取到基础表的所有字段内容,我们做一个测试,不难发现在基础表上新增字段后,对已建的视图是没有影响的,新的字段内容并不会自动添加到视图上。

修改字段类型(视图引用的字段)
  1. postgres=# alter table cstech alter column class type text;
  2. ERROR: cannot alter type of a column used by a view or rule
  3. DETAIL: rule _RETURN on view cs_v depends on column "class"

对于被视图引用的字段,是不允许被修改类型的,如果需要修改类型,需要先删掉视图,修改后再重建视图。

修改字段名(视图引用的字段)
  1. postgres=# alter table cstech rename class to class_info;
  2. ALTER TABLE
  3. postgres=# select * from cs_v;
  4. age | name | class
  5. -----+-------+-------
  6. 22 | lxcos | 1
  7. (1 row)

可以看到修改基础表的字段名,对应视图的的字段名称没有自动同步过来,是没有生效的。

修改字段长度 (视图引用的字段)
  1. postgres=# alter table cstech alter column name type varchar(20);
  2. ERROR: cannot alter type of a column used by a view or rule
  3. DETAIL: rule _RETURN on view cs_v depends on column "name"

同样,被视图引用的字段,是不允许被修改字段长度的。

除了以上所提到的问题,还有其他的内容,欢迎遇到问题的pger前来补充。