Sql 视图对后期绑定视图的依赖关系-意外行为
我对Amazon Redshift中后期绑定视图的以下行为感到困惑。 我有一个表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表 “正常”视图似乎迫使后期绑定视图更改回“正常”视图,这不是我所期望的 有办法解决这个问题吗?我想: 能够刷新表,而无需级联到所有依赖视图 能够更好地定义进一步的下游视图,在运行时冒泡出模式错误
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=#
这是我在逻辑上所期望的行为。创建一个“普通”视图,即未指定“无模式绑定”的视图,意味着该视图应该是模式绑定的。绑定到另一个视图(其本身可能不受模式绑定)将不符合此标准,因此该视图将绑定到基础表而不是任何中间视图。这是我在逻辑上所期望的行为。创建一个“普通”视图,即未指定“无模式绑定”的视图,意味着该视图应该是模式绑定的。绑定到另一个视图(该视图本身可能不是模式绑定的)将不符合此条件,因此该视图绑定到基础表,而不是任何中间视图。