美文网首页
Postgresql创建视图后修改基础表的问题

Postgresql创建视图后修改基础表的问题

作者: Hmcf | 来源:发表于2019-10-09 14:56 被阅读0次

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

基础表和视图
postgres=# create table cstech(age int, name varchar(10), class int); 
CREATE TABLE

# 这里我们采用select * 来选择所有字段
postgres=# create view cs_v as select * from cstech; 
CREATE VIEW

postgres=# insert into cstech values(22, 'lxcos', 1);
INSERT 0 1

# 可以发现使用select *获取到的字段其实在创建视图的时候内部已经转换成了对应的字段名称
postgres=# select * from cs_v; 
age | name | class 
-----+-------+-------
22 | lxcos | 1
(1 row)
添加字段的测试
postgres=# alter table cstech add column school text;
ALTER TABLE

postgres=# select * from cs_v;
 age | name  | class 
-----+-------+-------
  22 | lxcos |     1
(1 row)

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

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

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

修改字段名(视图引用的字段)
postgres=# alter table cstech rename class to class_info;
ALTER TABLE

postgres=# select * from cs_v;
 age | name  | class
-----+-------+-------
  22 | lxcos |     1
(1 row)

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

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

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

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

相关文章

  • Postgresql创建视图后修改基础表的问题

    在postgresql中,如果创建视图后,需要修改基础表,会出现一些问题。 基础表和视图 添加字段的测试 针对上面...

  • MySQL的视图

    MySQL的视图 创建基础表 视图的测试 视图的分类 单源表视图:视图的数据可以只取自一个基本表的部分行、列,这样...

  • DDL 数据库视图定义

    创建视图 根据表的查询结果创建视图 创建简单视图,由一张表的查询生成的视图 创建复杂视图,由多张表的查询或有函数时...

  • 视图

    创建视图: 对视图的操作 视图是一个虚表,当使用的时候才临时组装的,尽量避免修改视图中的数据,会影响原表它会将查询...

  • PostgreSQL 高级

    1. 视图 在 PostgreSQL 中, 视图(VIEW)是一个伪表。 它不是物理表,而是作为普通表选择查询 。...

  • 视图、存储过程、触发器

    视图:视图是一个虚拟表(临时的),并不是真实存在的,不可以通过视图对真实表进行修改 创建一个视图 存储过程deli...

  • PostgreSql基础语法

    基础语法 模式 POSTGRESQL 模式(SCHEMA)可以看着是一个表的集合。一个模式可以包含视图、索引、据类...

  • MySQL语法模板 SQL语句:视图

    创建视图 修改视图 删除视图

  • pg 视图 创建修改删除

    创建视图 修改视图 删除视图

  • SQL第6/n篇(更新中)视图

    视图 1.创建视图 2.修改视图 3.删除视图 4.查看视图结构 5.特点:视图就可以作为表,可以嵌套使用。 --...

网友评论

      本文标题:Postgresql创建视图后修改基础表的问题

      本文链接:https://www.haomeiwen.com/subject/sslgpctx.html