使用Postgres数据库。我有一个现有表,还有几个查询该表的现有视图。将该表称为“联系人”。
我更改了表,将名称更改为'contacts_backup'。然后,我创建了一个新表,该表的名称与以前的表具有“联系人”的名称相同]
现在看来,如果我查询现有视图,则仍从重命名的表contacts_backup中检索数据,而不是从新表“ contacts”中检索。
可以吗?如何更新视图以查询具有相同名称而不是重命名的contacts_backup的新表?
我的新表实际上是一个外国表,但是原理不应该相同吗?我期望现有的表可以查询新表,而不是旧的重命名表。
这是因为PostgreSQL不会将视图定义存储为SQL字符串,而是存储为已解析的查询树。
这些解析的查询树不包含所引用对象的名称,而仅包含其对象标识符(oid
),在重命名对象时不会更改。表列也是如此。这也适用于外国表。
[例如,使用pg_get_viewdef
检查视图定义时,解析树将呈现为文本,因此您将看到更改的名称。