如何检查 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';
我正在使用 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';