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"

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/150386.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI绘画运行webui.sh报错如何解决

项目场景: Python AI 绘画,配置环境启动时报错 问题描述 Stable Diffusion web UI 配置时,运行./webui.sh报错 Could not find a version that satisfies the requirement torch2.0.1 (from versions: 1.0.0, 1.0.1, 1.0.1.post2, 1.1.0,…

JS模块引入方式使用 importScripts 替代 import

sw.js文件如果放在public文件夹中运行报错,如提示 sw.js:2 Uncaught SyntaxError: Cannot use import statement outside a module 错误的话.// 使用 importScripts 替代 import// 使用 importScripts 替代 import importScripts(https://storage.googleapis.com/workbox-cdn/r…

进程管理(四)

管程概念及实现要旨 管程引入了条件变量condition。 wait操作,把当前进程挂到条件变量对应的阻塞队列上去,signal把条件队列上的对手进程唤醒。 注意:条件变量的signal操作和信号量的signal是有区别的。条件变量的signal可能啥都不干,如果有阻塞的进程唤醒,没有啥事都不做…

从零开始的C++(十八)

avl树中insert的模拟实现 avl树特点: 1.是搜索二叉树 2.每个结点的左右子树高度差的绝对值不超过2 inser模拟实现: // 右单旋void RotateR(Node* pParent){Node* parent pParent;Node* pr parent->_pRight;Node* prl pr->_pLeft;//记录父节点…

红海营销时代,内容占位的出海品牌更有机会营销占位

#01 品牌出海:内容占位就是品牌营销占位 红海营销时代,内容信息充斥着用户周边。无论线上还是线下,生活工作、休闲娱乐等不同场景内,广告信息均无孔不入。对于用户来说,能记住的品牌或者商品往往寥寥无几。 占位营销…

全网好评!12个网络工程师必备工具!

你们好,我的网工朋友。 今天来一期久违的工具推荐。工欲善其事必先利其器,好的工具势必会让网工们如虎添翼。 快速掌握正确的工具,意味着你可以轻松地完成复杂的工作。 但市面上的软件太多了,到底选用哪个工具,这还…

【最新Tomcat】IntelliJ IDEA通用配置Tomcat教程(超详细)

前言 IntelliJ IDEA是一个强大的集成开发环境,能够大大简化Java应用程序的开发和部署过程。而Tomcat作为一个流行的Java Web服务器,其与IntelliJ IDEA的整合能够提供便捷的开发环境,让开发人员更专注于代码的创作与优化。 在配置IntelliJ IDE…

linux在非联网、无网络环境下,使用yumdownload、reportrack方法安装rpm包

文章目录 前言1、下载yum-utils​​2、yumdownloader3、repotrack4、安装5、yumdownloader和repotrack的区别总结 前言 当开发者在联网环境下使用Linux时,可以轻松地通过yum或apt-get安装软件。然而,在公司和企业中,由于安全原因&#xff0c…

执行npm的时候报权限问题的解决方案

我们在执行npm操作的过程中,会出现以下权限问题,解决方案: 管理员身份 运行cmd 切换目录到要执行命令的文件下 再进行npm操作即可

java17 linux 环境配置

linux版本 :centos 8 1.能联网的情况下: wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz 2.mkdir /usr/local/java tar zxvf jdk-17_linux-x64_bin.tar.gz -C /usr/local/java 3./etc/profile增加: export JAVA_HOME/usr/local/java/jdk-17.…

社交媒体驱动的独立站流量增长:YouTube引流技巧

随着互联网的不断发展,视频内容在网上变得越来越受欢迎。YouTube作为世界上最大的视频分享平台之一,成为了吸引流量和观众的理想场所。对于跨境卖家来说,利用YouTube来增加独立站流量是一种有效的策略,可以增加知名度、吸引潜在客…

IDEA创建SpringBoot的多模块项目教程

最近在写一个多模块的SpringBoot项目,基于过程总了一些总结,故把SpringBoot多个模块的项目创建记录下来。 首先,先建立一个父工程: (1)在IDEA工具栏选择File->New->Project (2&#xff0…

hypermesh学习总结(一)

1、hypermesh导入导出 2、hypermesh如何使用拓扑命令,连接多个几何体为一个? 3、hypermesh模式选择 分别有显示动力学模式explicit,标准模式Standard3D(静力学及模态等) 4、检查网格单元质量 5、基本平移旋转显示视角操作 6、更改网格划分最小…

二-内存模型及所有权和引用、借用

1. 内存模型1 内存模型,heap和stack的区别,GC方面和go的区别 基本同go一样,分为堆内存、栈内存。栈内存函数退出时会自动释放,大小有限,一般是比较“小”的变量存到栈上。 比较“大”的或者大小动态变化的会分配到堆上…

vue3 ref和reactive使用watch属性的方法和区别

在Vue 3中,您可以使用watch函数和watch选项来监视ref和reactive创建的响应式数据的变化。下面是它们的使用方法和区别: 使用方法: 使用ref和watch: import { ref, watch } from vue;const count ref(0);watch(count, (newVal,…

【算法挨揍日记】day28——413. 等差数列划分、978. 最长湍流子数组

413. 等差数列划分 413. 等差数列划分 题目描述: 如果一个数列 至少有三个元素 ,并且任意两个相邻元素之差相同,则称该数列为等差数列。 例如,[1,3,5,7,9]、[7,7,7,7] 和 [3,-1,-5,-9] 都是等差数列。 给你一个整数数组 nums…

【数据结构】邻接表与邻接矩阵的转换

一.基本思想 1.邻接矩阵转换为邻接表: 先设置一个空的邻接表,然后查找邻接矩阵的值不为零元素,找到后在邻接表的单链表对应位置加入表边节点。 2.邻接表转换为邻接矩阵: 在邻接表上顺序取出每个表边结点,将邻接矩阵…

【基础架构】part-1 高可用策略和知识点总结

​ 系统应该保持高可用性,以确保用户能够始终访问和使用系统。这可以通过设计冗余和容错机制来实现,如负载均衡、故障转移、备份和恢复策略等。 1.1、引入冗余 通过冗余架构设计,如使用多个服务器节点、多个数据中心或云区域,确…

gRPC博客【建设进度0%】

学习资料来源:https://grpc.io/

鸿蒙系统调研适配

写在前面: 以下内容基于我个人翻阅的官方资料以及自己的理解写的,可能存在认知和理解上的偏差,有些地方并不一定是对的,请谨慎对待,注意甄别! 一、鸿蒙OS是什么? 华为推出的多端统一平台&…