加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Redshift drop有依赖关系的表

发布时间:2020-12-14 05:06:21 所属栏目:百科 来源:网络整理
导读:今天开发需要删除AWS Redshift的一个归档表,但是直接drop发生了如下报错,发现有其他对象依赖这个表,导致无法直接删除,但是报错没有直接显示是什么对象依赖它,可能是有视图,外键等约束 analyticsprod=# DROP TABLE IF EXISTS facts.auto_events_bk_2017
今天开发需要删除AWS Redshift的一个归档表,但是直接drop发生了如下报错,发现有其他对象依赖这个表,导致无法直接删除,但是报错没有直接显示是什么对象依赖它,可能是有视图,外键等约束

analyticsprod=# DROP TABLE IF EXISTS facts.auto_events_bk_20170223;

ERROR: ?cannot drop table auto_events_bk_20170223 because other objects depend on it

HINT: ?Use DROP ... CASCADE to drop the dependent objects too.


通过d+ auto_events_bk_20170223 查看表结构,发现并没有其他表的外键约束,所以排除;

然后通过dv+命令在schema:facts下查看视图,但是发现没有任何view存在,但是view可能存在其他schema或db,

那么问题来了,如何在整个数据库中找到与这个表有依赖的的view?


这里AWS Redshift已经给我们提供了一个好的方法,参考链接:https://docs.aws.amazon.com/redshift/latest/dg/r_DROP_TABLE.html


创建一个视图find_depend:

create?view?find_depend?as
select?distinct?c_p.oid?as?tbloid,n_p.nspname?as?schemaname,?c_p.relname?as?name,n_c.nspname?as?refbyschemaname,?c_c.relname?as?refbyname,c_c.oid?as?viewoid
from?pg_catalog.pg_class?c_p
join?pg_catalog.pg_depend?d_p
on?c_p.relfilenode?=?d_p.refobjid
join?pg_catalog.pg_depend?d_c
on?d_p.objid?=?d_c.objid
join?pg_catalog.pg_class?c_c
on?d_c.refobjid?=?c_c.relfilenode
left?outer?join?pg_namespace?n_p
on?c_p.relnamespace?=?n_p.oid
left?outer?join?pg_namespace?n_c
on?c_c.relnamespace?=?n_c.oid
where?d_c.deptype?=?'i'::"char"
and?c_c.relkind?=?'v'::"char";



查询视图找到与表auto_events_bk_20170223相关的view:


analyticsprod=#?select?*?from?facts.find_depend?where?schemaname='facts'?and?name?not?in?('find_depend')?order?by?name;
?tbloid?|?schemaname?|??????????name???????????|?refbyschemaname?|??refbyname??|?viewoid
--------+------------+-------------------------+-----------------+-------------+---------
?879566?|?facts??????|?auto_events_bk_20170223?|?public??????????|?map_routes2?|??965969
?879566?|?facts??????|?auto_events_bk_20170223?|?public??????????|?map_routes??|??966155
?879566?|?facts??????|?auto_events_bk_20170223?|?public??????????|?map_edges???|?1019697
(3?rows)

analyticsprod=#?set?search_path?to?public;

analyticsprod=#?dv
???????????????List?of?relations
?schema?|?????????name??????????|?type?|?owner
--------+-----------------------+------+-------
?public?|?map_edges?????????????|?view?|?fengw
?public?|?map_edges_group???????|?view?|?fengw
?public?|?map_route_edges_group?|?view?|?fengw
?public?|?map_routes????????????|?view?|?fengw
?public?|?map_routes2???????????|?view?|?fengw
?public?|?map_routes_group??????|?view?|?fengw
(6?rows)




最后如果判断这些相关的view没有用的话,可以通过命令drop table auto_events_bk_20170223 cascade删除表,包括视图一同删除。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读