postgresql 重建视图脚本

环境;

psql (9.3.6)
输入 "help" 来获取帮助信息.
root=# \d change_me
         资料表 "public.change_me"
   栏位    |         型别          | 修饰词 
-----------+-----------------------+--------
 too_short | character varying(50) | 
root=# ALTER TABLE change_me ALTER too_short TYPE VARCHAR(30);
错误:  不能使用视图或规则改变一个字段的类型
描述:  规则 _RETURN 在 视图 v_change_me 倚赖于字段 "too_short"

目的: 更改too_short类型为 VARCHAR(30) 从此处得出 视图 v_change_me 依赖此表.

一、 安装脚本:

前提: 已安装好psql客户端

#curl firxiao.com/sh/recreate_views.sh -o  recreate_views.sh|chmod +x recreate_views.sh

操作步骤如下:

二、  配置脚本:

编辑脚本 将以下内容更改为你自己 然后保存退出

###config
HOST="ip or hostname"
DB_NAME="dbname"
DB_USER="user"
DB_PASSWORD="password"
###

三、  查看帮助

#./recreate_views.sh 
Useage: recreate_views.sh: -b <view_name> #backup view and dependent objects  
Useage: recreate_views.sh: -d <view_name> #delete view and dependent objects   
Useage: recreate_views.sh: -c  "<sql>"    #exec custom sql command   
Useage: recreate_views.sh: -r <view_name> #restore view and dependent objects

四、 测试是否能正常连接

#./recreate_views.sh -c "\dt"
         List of relations
 Schema |   Name    | Type  | Owner 
--------+-----------+-------+-------
 public | change_me | table | root
(1 row)

五、 备份视图

#./recreate_views.sh -b  v_change_me
backup v_change_me to v_change_me_bak.sql
backup v_change_me_too to v_change_me_bak.sql

将自动将删除的视图及依赖备份到 视图名_bak.sql

六、删除视图

#./recreate_views.sh -d  v_change_me
注意:  递归删除 视图 v_change_me_too
DROP VIEW

更改表字段类型

#./recreate_views.sh -c "ALTER TABLE change_me ALTER too_short TYPE VARCHAR(30);"
ALTER TABLE

七、恢复已删视图

#./recreate_views.sh -r  v_change_me
SET
SET
SET
SET
SET
SET
SET
错误:  视图 "v_change_me" 不存在
SET
CREATE VIEW
SET
SET
SET
SET
SET
SET
SET
错误:  视图 "v_change_me_too" 不存在
SET
CREATE VIEW

八、查看表类型

./recreate_views.sh -c "\d v_change_me"
           View "public.v_change_me"
  Column   |         Type          | Modifiers 
-----------+-----------------------+-----------
 too_short | character varying(30) |

至此已完成了对表字段类型的更改

时间: 2024-11-10 13:41:45

postgresql 重建视图脚本的相关文章

PostgreSQL更新视图脚本的注意事项

项目最早是基于Oracle的,移植到PostgreSQL后,本着尽量少修改的原则,创建/更新视图的脚本也沿用了Oracle风格的CREATE OR REPLACE VIEW形式.但是每当要更新视图定义时,常常报"cannot change name of view column xxx to yyy"的错误,通常是在视图修改某字段名.中间增加字段.删除字段时发生. 究其原因,是PostgreSQL虽然支持CREATE OR REPLACE VIEW语义,却有着容易让人忽略的重要限制(O

Oracle 重建索引脚本

该指数是一个有力的武器,以提高数据库的查询性能. 没有索引,喜欢同样的标签库没有书籍,找书,他们想预订比登天还难.中,尤其是在批量的DML的情形下会产生对应的碎片.以及B树高度会发生对应变化.因此能够对这些变化较大的索引进行重构以提高性能.N久曾经Oracle建议我们定期重建那些高度为4.已删除的索引条目至少占有现有索引条目总数的20%的这些表上的索引.但Oracle如今强烈建议不要定期重建索引. 详细能够參考文章:Oracle 重建索引的必要性. 虽然如此重建索引还是有必要的.仅仅是不建议定期

PostgreSQL导出sql脚本文件

命令如下: pg_dump -h 127.0.0.1 -p 5432 -U postgres --inserts -t city -f D:\city.sql LGBS 少年,详细参数请看下图:

视图框架:Spring MVC 4.0(1)

目录 一.表单标签库 1.1.简介 1.2.常用属性 1.3.form标签与input标签 1.4.checkbox标签 1.5.radiobutton标签 1.6.password标签 1.7.select标签 1.8.option标签 1.9.options标签 1.10.textarea.errors标签 1.11.hidden标签 1.12.radiobuttons 单选列表与checkboxs复选列表 二.视图解析器 2.1.ViewResolver视图解析器 2.2.链式视图解析器

系统视图,系统表,系统存储过程的使用

获取数据库中用户表信息 1.获取特定库中所有用户表信息 select * from sys.tables select * from sys.objects  where type='U'  --用户表 第二条语句中当type='S'时是系统表 2.获取表的字段信息 select * from sys.columns where object_id=object_id('表名') select * from syscolumns where id=OBJECT_ID('表名' ) 3.获取当前库

开源数据库Postgresql的备份和恢复

最近工作上使用的数据库一直是Postgresql,这是一款开源的数据库,而且任何个人可以将该数据库用于商业用途.在使用Postgresql的时候,让我最明显的感觉就是这数据库做的真心好,虽然说数据库的安装包真的很小,但是性能和操作的便捷是一点也不输给其他商业的大型数据库,另外在命令行界面下对该数据库直接进行操作的感觉真的是很爽.在使用数据库的时候,我们作为小公司的数据库管理员有一项工作是不可能避免的,那就是数据的备份和恢复问题.PostgreSQL虽然各个方面的有点很多,但是在数据库备份这方面,

转---视图动画和坐标系介绍!

Core Animation基础 Core Animation利用了硬件加速和架构上的优化来实现快速渲染和实时动画.当视图的drawRect:方法首次被调用时,层会将描画的结果捕捉到一个位图中,并在随后的重画中尽可能使用这个缓存的位图,以避免调用开销很大的drawRect:方法.这个过程使Core Animation得以优化合成操作,取得期望的性能. Core Animation把和视图对象相关联的层存储在一个被称为层树的层次结构中.和视图一 样,层树中的每个层都只有一个父亲,但可以嵌入任意数量

Spring MVC 学习总结(四)——视图与综合示例

一.表单标签库 1.1.简介 从Spring2.0起就提供了一组全面的自动数据绑定标签来处理表单元素.生成的标签兼容HTML 4.01与XHTML 1.0.表单标签库中包含了可以用在JSP页面中渲染HTML元素的标签.表单标记库包含在spring-webmvc.jar中,库的描述符称为spring-form.tld,为了使用这些标签必须在jsp页面开头处声明这个tablib指令. <%@ taglib prefix="form" uri="http://www.spri

UIView如何管理它的子视图

UIView提供了很多建立和管理视图的方法. 1.添加视图 insertSubview:atIndex:   //放在子视图数组的具体索引位置 insertSubview:aboveSubview:   //某个子视图前面 insertSubview:aboveSubview:   //某个子视图前面 2.重新排序和删除子视图 [parentView exchangeSubviewAtIndex:i withSubviewAtIndex:j]//交换两个视图的位置 bringSubviewToF