amazon-web-services - 如何检查某个表是否正在被 AWS Redshift 上的某个程序或视图使用
问题描述
我正在使用 AWS Redshift。我在一个模式中有 100 多个表,其中一些表的数据每天都会刷新,而有些表则根本不刷新。我已经找出了数据未刷新的表。在删除它们之前,我想检查它们当前是否被同一模式或任何其他模式的任何函数/过程/视图使用。有什么办法可以在 Redshift 上检查一下吗?
解决方案
我在网上找到了这个代码,不记得在哪里,所以对不起,我不能相信......
我建议将其保存为视图,以便您始终可以轻松运行它。
如果您的视图使用了您想要删除的某些表,您可以在视图末尾使用“WITH NO SCHEMA BINDING”。这样,即使有视图使用该表,也可以删除该表。
编码:
SELECT DISTINCT
srcobj.oid AS src_oid
,srcnsp.nspname AS src_schemaname
,srcobj.relname AS src_objectname
,tgtobj.oid AS dependent_viewoid
,tgtnsp.nspname AS dependent_schemaname
,tgtobj.relname AS dependent_objectname
FROM
pg_catalog.pg_class AS srcobj
INNER JOIN
pg_catalog.pg_depend AS srcdep
ON srcobj.oid = srcdep.refobjid
INNER JOIN
pg_catalog.pg_depend AS tgtdep
ON srcdep.objid = tgtdep.objid
JOIN
pg_catalog.pg_class AS tgtobj
ON tgtdep.refobjid = tgtobj.oid
AND srcobj.oid <> tgtobj.oid
LEFT OUTER JOIN
pg_catalog.pg_namespace AS srcnsp
ON srcobj.relnamespace = srcnsp.oid
LEFT OUTER JOIN
pg_catalog.pg_namespace tgtnsp
ON tgtobj.relnamespace = tgtnsp.oid
WHERE tgtdep.deptype = 'i' --dependency_internal
AND tgtobj.relkind = 'v' --i=index, v=view, s=sequence
and src_schemaname <> 'pg_catalog' and src_schemaname <> 'information_schema';
推荐阅读
- node.js - KeystoneJS:keystone.list 不是函数
- spring - 非 200 状态码的 Spring-boot ResponseEntity 主体缺失
- java - 单例对象是否有资格进行垃圾收集?类中的静态字段如何被垃圾收集?
- android - 如何从它的resourceId 中获取.apk 图标路径?
- javascript - Vue中路由更改后如何重新渲染已安装的组件?
- java - Spring Cloud Stream RabbitMq - 从源代码设置属性
- java - 如何使用 Kotlin 反射获得 Java 类型的可空性?
- android - Android芯片限制多次进入
- azure - 可用性集容错域
- javascript - 从 innerHTML 获取输入类型文本的值