Redshift drop有依赖关系的表
今天开发需要删除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删除表,包括视图一同删除。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |