视图对后期绑定视图的依赖性-意外行为

时间:2018-12-12 19:32:38

标签: sql amazon-web-services view amazon-redshift

我对Amazon Redshift中的后期绑定视图的以下行为感到困惑。

我有一个表test,这是一个从test_view读取的后期绑定视图test。我能够按预期进行drop table test,而无需级联到test_view

一旦创建了一个“普通”视图test_view_2以从后期绑定的test_view中读取,我将无法删除test表。

似乎“正常”视图迫使后期绑定视图变回“正常”视图,这不是我期望的。

有没有解决的办法?我想:

  • 能够刷新表格而无需级联所有从属视图
  • 具有使下游视图保持良好定义的能力,从而在运行时冒出架构错误。

要复制:

dataeng=# create table test (id integer);
CREATE TABLE
dataeng=# insert into test values (1), (2), (3);
INSERT 0 3
dataeng=# create view test_view as select id from public.test with no schema binding;
CREATE VIEW
dataeng=# select * from test_view;
 id
----
  3
  1
  2
(3 rows)

dataeng=# drop table test;
DROP TABLE
dataeng=# create table test (id integer);
CREATE TABLE
dataeng=# insert into test values (1), (2), (3);
INSERT 0 3
dataeng=# create view test_view_2 as select id from public.test_view;
CREATE VIEW
dataeng=# select * from test_view_2;
 id
----
  2
  1
  3
(3 rows)

dataeng=# drop table test;
ERROR:  cannot drop table test because other objects depend on it
HINT:  Use DROP ... CASCADE to drop the dependent objects too.
dataeng=#

1 个答案:

答案 0 :(得分:2)

“普通”视图的定义确实没有引用后期绑定视图,而是一直跳过到基础表。

所以这里发生的不是 ,后期绑定视图正在变成普通视图,而是尽管普通视图已经从表中选择了,但最终还是位于表格顶部后期绑定视图:

history_type