表中的更改会自动传播到视图(postgres 9.3.14)

时间:2017-01-23 19:49:45

标签: postgresql

我的视图取决于表foo。如果我将表foo重命名为bar,则视图会自动更新为依赖于表bar

Dag=> create table foo (id int);
CREATE TABLE
Dag=> create view foo_view as select id from foo;
CREATE VIEW
Dag=> \d+ foo_view
            View "public.foo_view"
Column |  Type   | Modifiers | Storage | Description
--------+---------+-----------+---------+-------------
id     | integer |           | plain   |
View definition:
SELECT foo.id
  FROM foo;

Dag=> alter table foo rename to bar;
ALTER TABLE
Dag=> \d+ foo_view
            View "public.foo_view"
Column |  Type   | Modifiers | Storage | Description
--------+---------+-----------+---------+-------------
id     | integer |           | plain   |
View definition:
SELECT bar.id
  FROM bar;

有没有办法禁用此行为?我的意图是通过填充临时表foo_stage来更新表foo。填充foo_stage后,我打算将foo换成foo_stage,如下所示:

alter table foo rename to foo_tmp;
alter table foo_stage rename to foo;
alter table foo_tmp rename to foo_stage;

这里的问题是,每次我更新它所依赖的表时,我都必须放弃我的视图并重新定义它。如果我有一堆元数据表每天都会多次更新并且可能每个都有几个依赖于它们的视图,那么这就变得很难管理。

谢谢!

0 个答案:

没有答案