gpt4 book ai didi

postgresql - Postgres View,alter table 更改表名后,View 还查询吗?

转载 作者:行者123 更新时间:2023-12-04 09:39:05 26 4
gpt4 key购买 nike

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

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

现在看来,如果我查询现有 View ,数据仍会从重命名的表contacts_backup 中检索,而不是从新表“联系人”中检索。

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

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

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

最佳答案

这是因为 PostgreSQL 不会将 View 定义存储为 SQL 字符串,而是存储为已解析的查询树。

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

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

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

关于postgresql - Postgres View,alter table 更改表名后,View 还查询吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62410923/

26 4 0