2017-05-09 20 views
0

私のチームはビューに基づいて構築されたビューを構築しているので、多くの場合、災害と多くの試行錯誤のレシピです。Redshiftでオブジェクトの依存関係リストを作成するには?

特定のschematableが与えられた正しい順序で再作成する必要のあるすべての依存オブジェクトを返すクエリが、自動化されてスクリプトで実行されるクエリです。私は、Redshift DROP TABLEドキュメントhttp://docs.aws.amazon.com/redshift/latest/dg/r_DROP_TABLE.htmlの依存関係クエリの修正版を使って作業しています。

ビューとその依存関係は戻っているようですが、通常の表は表示されません。私は私が近くにいるように感じ、私は何が欠けているのですか?

WITH dependencies AS (
    SELECT DISTINCT 
     cls1.oid  AS tbloid, 
     nsp1.nspname AS schemaname, 
     cls1.relname AS name, 
     nsp2.nspname AS refbyschemaname, 
     cls2.relname AS refbyname, 
     cls2.oid  AS viewoid 
    FROM pg_catalog.pg_class cls1 
     JOIN pg_catalog.pg_depend dep1 
     ON cls1.relfilenode = dep1.refobjid 
     JOIN pg_catalog.pg_depend dep2 
     ON dep1.objid = dep2.objid 
     JOIN pg_catalog.pg_class cls2 
     ON dep2.refobjid = cls2.relfilenode 
     LEFT OUTER JOIN pg_namespace nsp1 
     ON cls1.relnamespace = nsp1.oid 
     LEFT OUTER JOIN pg_namespace nsp2 
     ON cls2.relnamespace = nsp2.oid 
    WHERE dep2.deptype IN ('i' :: "CHAR", 'n' :: "CHAR") 
      AND cls2.relkind IN ('v' :: "CHAR", 'r' :: "CHAR") 
      AND nsp1.nspname NOT IN ('pg_catalog', 'information_schema') 
    ORDER BY 4, 5 
), 

    joined_to_views AS (
     SELECT 
     d.schemaname, 
     d.name, 
     d.refbyschemaname, 
     d.refbyname, 
     p.definition 
     FROM dependencies d 
     LEFT JOIN pg_views p 
      ON d.refbyschemaname = p.schemaname AND d.refbyname = p.viewname 
) 

SELECT * 
FROM joined_to_views 

答えて

3

これは機能しますか?私が悪いの仮定を行った場合

SELECT dependent_ns.nspname as dependent_schema 
, dependent_view.relname as dependent_view 
, source_ns.nspname as source_schema 
, source_table.relname as source_table 
, pg_attribute.attname as column_name 
FROM pg_depend 
JOIN pg_rewrite ON pg_depend.objid = pg_rewrite.oid 
JOIN pg_class as dependent_view ON pg_rewrite.ev_class = dependent_view.oid 
JOIN pg_class as source_table ON pg_depend.refobjid = source_table.oid 
JOIN pg_attribute ON pg_depend.refobjid = pg_attribute.attrelid 
    AND pg_depend.refobjsubid = pg_attribute.attnum 
JOIN pg_namespace dependent_ns ON dependent_ns.oid = dependent_view.relnamespace 
JOIN pg_namespace source_ns ON source_ns.oid = source_table.relnamespace 
WHERE 
source_ns.nspname = 'my_schema' 
AND source_table.relname = 'my_table' 
AND pg_attribute.attnum > 0 
AND pg_attribute.attname = 'my_column' 
ORDER BY 1,2; 


コメントと私は私の答えを再フォーカスますしてください。

関連する問題