我对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=#
答案 0 :(得分:2)
“普通”视图的定义确实没有不引用后期绑定视图,而是一直跳过到基础表。
所以这里发生的不是 ,后期绑定视图正在变成普通视图,而是尽管普通视图已经从表中选择了,但最终还是位于表格顶部后期绑定视图:
history_type