如何检查 AWS Redshift 上的某些过程或视图是否正在使用 table

How to check if a table is in use by some procedure or view on AWS Redshift

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

我在网上找到这个代码,不记得在哪里所以很抱歉我不能相信...

我建议将其保存为视图,这样您就可以随时运行轻松地进行此操作。

如果您有使用要删除的某些 table 的视图,则可以在视图末尾使用 WITH NO SCHEMA BINDING。这样 table 将能够被删除,即使有一个视图正在使用它。

代码:

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';