如何在 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 中更改视图的主要内容,如果未能解决你的问题,请参考以下文章

云小课|教你如何使用RDS for PostgreSQL插件

春季启动中的postgresql错误

Postgresql 用户管理

通知:中国PostgreSQL认证培训

postgreSQL

使用 sqlalchemy 连接到本地 postgresql