Postgres View,更改表以更改表名后,视图仍然查询它?



Using Postgres database.我有一个现有表,以及几个查询该表的现有视图。 将表称为"联系人"。

我更改了表格,将名称更改为"contacts_backup"。然后,我创建了一个新表,其名称与旧表以前具有"联系人"的名称相同

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

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

我的新表其实是外表,但原理不应该是一样的吗?我期望现有表针对新表进行查询,而不是重命名的旧表。

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

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

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

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

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

最新更新