Skip to content

Instantly share code, notes, and snippets.

@fitnr
Created November 12, 2021 19:06
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save fitnr/f0e8d23be3cc398893ed4794ac4d9f6f to your computer and use it in GitHub Desktop.
Save fitnr/f0e8d23be3cc398893ed4794ac4d9f6f to your computer and use it in GitHub Desktop.
recursively get dependent matviews
/*
* Arguments:
* :matview - schema-qualified name of materialized view
*/
WITH RECURSIVE vvv AS (
SELECT DISTINCT ON (objid, refobjid) v.oid::regclass AS view, 1 AS level
FROM pg_depend AS d
JOIN pg_rewrite AS r ON r.oid = d.objid
JOIN pg_class AS v ON v.oid = r.ev_class
JOIN pg_class as c ON c.oid = d.refobjid AND c.oid::regclass != v.oid::regclass
WHERE v.relkind = 'm' AND d.deptype = 'n'
AND d.classid = 'pg_rewrite'::regclass
AND d.refclassid = 'pg_class'::regclass
AND d.refobjid = :'matview'::regclass
UNION ALL
SELECT DISTINCT ON (objid, refobjid) v.oid::regclass AS view, vvv.level + 1
FROM vvv
JOIN pg_depend AS d ON vvv.view = d.refobjid
JOIN pg_rewrite AS r ON r.oid = d.objid
JOIN pg_class AS v ON v.oid = r.ev_class
JOIN pg_class as c ON c.oid = d.refobjid AND c.oid::regclass != v.oid::regclass
WHERE v.relkind = 'm' AND d.deptype = 'n'
AND d.classid = 'pg_rewrite'::regclass
AND d.refclassid = 'pg_class'::regclass
AND v.oid <> vvv.view
) SELECT * FROM vvv
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment