【问题标题】:Postgres View, after alter table to change table name, View still queries it?Postgres View,alter table 更改表名后,View 还在查询吗?
【发布时间】:2020-06-16 14:29:48
【问题描述】:

使用 Postgres 数据库。我有一个现有的表,以及几个查询该表的现有视图。 称表为“联系人”。

我更改了表格,将名称更改为“contacts_backup”。然后,我创建了一个新表,其名称与旧表中的“联系人”相同

现在看来,如果我查询现有视图,数据仍然是从重命名的表contacts_backup 中检索的,而不是从新表'contacts' 中检索的。

可以吗?如何更新视图以查询同名的新表,而不是重命名的contacts_backup?

我的新表其实是一张外表,但原理不应该是一样的吧?我期待现有表查询新表,而不是旧的重命名表。

更新现有视图以从新表中查询的有效方法是什么?

【问题讨论】:

    标签: postgresql view


    【解决方案1】:

    这是因为 PostgreSQL 不将视图定义存储为 SQL 字符串,而是作为解析后的查询树。

    这些解析后的查询树不包含引用对象的名称,而只包含它们的对象标识符 (oid),当您重命名对象时它不会改变。 表格列也是如此。这也适用于外部表。

    当您检查视图定义时,例如使用pg_get_viewdef,解析树将呈现为文本,因此您将看到更改后的名称。

    如果要更改视图所引用的表,唯一的解决方案是DROP 视图和CREATE 再次,或者您可以使用CREATE OR REPLACE VIEW

    【讨论】:

    • 有没有一种简单的方法来更新它们,或者我只需要将它们全部删除,更新它们的查询,然后重新创建?
    • 您可以使用CREATE OR REPLACE VIEW,查看我的更新答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-17
    • 2011-03-15
    相关资源
    最近更新 更多