如何列出依赖于 Redshift 中特定表的表/视图?

sam*_*sam 2 sql amazon-redshift

在进行更改之前,我需要检查给定表的下游依赖关系。我将如何列出依赖于 Specific_table 的任何 Redshift 表或视图?

我试过:

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_class c_p
JOIN pg_depend d_p ON c_p.relfilenode = d_p.refobjid
JOIN pg_depend d_c ON d_p.objid = d_c.objid
JOIN pg_class c_c ON d_c.refobjid = c_c.relfilenode
LEFT JOIN pg_namespace n_p ON c_p.relnamespace = n_p.oid
LEFT JOIN pg_namespace n_c ON c_c.relnamespace = n_c.oid
WHERE d_c.deptype = 'i'::"char"
AND c_c.relkind = 'v'::"char"
and schemaname like 'actual_schema_name'
and name = 'actual_table_name';
Run Code Online (Sandbox Code Playgroud)

但这是来自一些基本的谷歌搜索,我真的不知道它是否接近。

Nat*_*ths 5

我建议从 AWS Redshift 团队的官方 Redshift Utils github 存储库实施管理视图,这将为您提供一堆有用的系统视图 - 包括计算依赖项所需的视图。

您至少需要以下视图:

  • admin.v_view_dependency
  • admin.v_constraint_dependency
  • admin.v_object_dependency

要查找“TableA”的所有依赖项,您可以查询admin.v_object_dependency例如

SELECT *
FROM admin.v_object_dependency
WHERE 
   src_schemaname = 'MySchema' AND
   src_objectname = 'TableA';
Run Code Online (Sandbox Code Playgroud)