Sql 视图对后期绑定视图的依赖关系-意外行为

Sql 视图对后期绑定视图的依赖关系-意外行为,sql,amazon-web-services,view,amazon-redshift,Sql,Amazon Web Services,View,Amazon Redshift,我对Amazon Redshift中后期绑定视图的以下行为感到困惑。 我有一个表test,一个从test读取的后期绑定视图test\u视图。我可以按预期删除表测试,而无需级联到测试视图 一旦我创建了一个“正常”视图test\u view\u 2来读取后期绑定test\u view,我就无法删除test表 “正常”视图似乎迫使后期绑定视图更改回“正常”视图,这不是我所期望的 有办法解决这个问题吗?我想: 能够刷新表,而无需级联到所有依赖视图 能够更好地定义进一步的下游视图,在运行时冒泡出模式错误

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

我有一个表
test
,一个从
test
读取的后期绑定视图
test\u视图
。我可以按预期
删除表测试
,而无需级联到
测试视图

一旦我创建了一个“正常”视图
test\u view\u 2
来读取后期绑定
test\u view
,我就无法删除
test

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

有办法解决这个问题吗?我想:

  • 能够刷新表,而无需级联到所有依赖视图
  • 能够更好地定义进一步的下游视图,在运行时冒泡出模式错误
复制:
“普通”视图的定义似乎没有引用后期绑定视图,而是一直跳到底层表

因此,这里发生的不是延迟绑定视图正在变成普通视图,而是普通视图最终位于表的顶部,尽管它是从延迟绑定视图中选择创建的:

dataeng=# \d+ test_view
                        View "public.test_view"
 Column | Type | Collation | Nullable | Default | Storage | Description
--------+------+-----------+----------+---------+---------+-------------
View definition:
create view test_view as select id from public.test with no schema binding;

dataeng=# \d+ test_view_2
                         View "public.test_view_2"
 Column |  Type   | Collation | Nullable | Default | Storage | Description
--------+---------+-----------+----------+---------+---------+-------------
 id     | integer |           |          |         | plain   |
View definition:
 SELECT test_view.id
   FROM ( SELECT test.id
           FROM test) test_view;

dataeng=#

“普通”视图的定义似乎没有引用后期绑定视图,而是一直跳到底层表

因此,这里发生的不是延迟绑定视图正在变成普通视图,而是普通视图最终位于表的顶部,尽管它是从延迟绑定视图中选择创建的:

dataeng=# \d+ test_view
                        View "public.test_view"
 Column | Type | Collation | Nullable | Default | Storage | Description
--------+------+-----------+----------+---------+---------+-------------
View definition:
create view test_view as select id from public.test with no schema binding;

dataeng=# \d+ test_view_2
                         View "public.test_view_2"
 Column |  Type   | Collation | Nullable | Default | Storage | Description
--------+---------+-----------+----------+---------+---------+-------------
 id     | integer |           |          |         | plain   |
View definition:
 SELECT test_view.id
   FROM ( SELECT test.id
           FROM test) test_view;

dataeng=#

这是我在逻辑上所期望的行为。创建一个“普通”视图,即未指定“无模式绑定”的视图,意味着该视图应该是模式绑定的。绑定到另一个视图(其本身可能不受模式绑定)将不符合此标准,因此该视图将绑定到基础表而不是任何中间视图。这是我在逻辑上所期望的行为。创建一个“普通”视图,即未指定“无模式绑定”的视图,意味着该视图应该是模式绑定的。绑定到另一个视图(该视图本身可能不是模式绑定的)将不符合此条件,因此该视图绑定到基础表,而不是任何中间视图。