【问题标题】:How to ALTER a view in PostgreSQL如何在 PostgreSQL 中更改视图
【发布时间】:2010-08-29 04:54:35
【问题描述】:

如果视图具有依赖对象,PostgreSQL 不允许更改视图(即添加列、更改列顺序、添加条件等)。这真的很烦人,因为你必须编写一个脚本来:

  1. 删除所有依赖对象,
  2. 改变视图,
  3. 重新创建所有依赖对象。

我了解 postgreSQL 开发人员对于防止更改视图有非常合理的担忧。但是你们有任何脚本/镜头可以在一次运行中完成所有这些手动操作吗?

【问题讨论】:

    标签: sql database postgresql


    【解决方案1】:

    添加新列不是问题,更改数据类型或更改列的顺序,这就是您遇到问题的地方。

    1. 不要改变顺序,这不是 无论如何,这很重要,只需更改您的查询:

      从视图名称中选择 a、b;

      SELECT b, a FROM view_name;

    2. 当您必须更改数据类型时 列,你必须检查 依赖对象也是如此。这些可能 这个新的有问题 数据类型。只要得到定义 这个对象并在之后重新创建 变化。 information_schema 和 pg_catalog 帮助你。

    3. 在一次内完成所有更改 交易。

    【讨论】:

    • 当视图有依赖对象时,添加列是一个问题。试试这个;创建表一 ( 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 ...”语句之前,至少在很多情况下我解决了上述阻塞问题。

    【讨论】:

    • 谢谢。我做了相反的事情(删除了“下拉视图”,添加了“或替换”),效果很好。
    猜你喜欢
    • 2016-09-04
    • 1970-01-01
    • 2012-01-21
    • 2018-01-08
    • 2018-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-06
    相关资源
    最近更新 更多