postgresql视图的一些问题

在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"

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值