如何在 PostgreSQL 中更改视图
Posted
技术标签:
【中文标题】如何在 PostgreSQL 中更改视图【英文标题】:How to ALTER a view in PostgreSQL 【发布时间】:2010-08-29 04:54:35 【问题描述】:如果视图具有依赖对象,PostgreSQL 不允许更改视图(即添加列、更改列顺序、添加条件等)。这真的很烦人,因为你必须编写一个脚本来:
-
删除所有依赖对象,
改变视图,
重新创建所有依赖对象。
我了解 postgreSQL 开发人员对于防止更改视图有非常合理的担忧。但是你们有任何脚本/镜头可以在一次运行中完成所有这些手动操作吗?
【问题讨论】:
【参考方案1】:添加新列不是问题,更改数据类型或更改列的顺序,这就是您遇到问题的地方。
不要改变顺序,这不是 无论如何,这很重要,只需更改您的查询:
从视图名称中选择 a、b;
SELECT b, a FROM view_name;
当您必须更改数据类型时 列,你必须检查 依赖对象也是如此。这些可能 这个新的有问题 数据类型。只要得到定义 这个对象并在之后重新创建 变化。 information_schema 和 pg_catalog 帮助你。
在一次内完成所有更改 交易。【讨论】:
当视图有依赖对象时,添加列是一个问题。试试这个;创建表一 ( col_a INT, col_b VARCHAR(2), col_c DATE );创建或替换视图 vw_one AS SELECT col_a, col_b FROM one;创建或替换视图 vw_two AS SELECT col_a, col_b FROM vw_one;创建或替换视图 vw_one AS SELECT col_a, col_b, col_c FROM one;我错过了什么吗? 这里运行良好,9.0beta4。我的开发机器上没有旧版本,但它也应该在 8.4 中工作。您收到什么错误消息? 他们可能已经修复了 9.0 版。我在 postgreSQL 社区中看到了几个错误修复请求。这是我得到的错误。错误:无法更改视图 SQL 状态中的列数:42P16 你有什么版本?选择版本(); 来自 8.4 版本说明:允许 CREATE OR REPLACE VIEW 将列添加到视图的末尾 (Robert Haas)【参考方案2】:如果我放置一个附加的“drop view xyz; commit;”在“create or replace view xyz as ...”语句之前,至少在很多情况下我解决了上述阻塞问题。
【讨论】:
谢谢。我做了相反的事情(删除了“下拉视图”,添加了“或替换”),效果很好。以上是关于如何在 PostgreSQL 中更改视图的主要内容,如果未能解决你的问题,请参考以下文章