首页 > 解决方案 > 如何检查某个表是否正在被 AWS Redshift 上的某个程序或视图使用

问题描述

我正在使用 AWS Redshift。我在一个模式中有 100 多个表,其中一些表的数据每天都会刷新,而有些表则根本不刷新。我已经找出了数据未刷新的表。在删除它们之前,我想检查它们当前是否被同一模式或任何其他模式的任何函数/过程/视图使用。有什么办法可以在 Redshift 上检查一下吗?

标签: amazon-web-servicesamazon-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';

推荐阅读