web-dev-qa-db-ja.com

一意のインデックスを持たないPostgreSQLのマテリアライズドビューを一覧表示します

Postgresql 9.4では、一意のインデックスがある場合、 REFRESHマテリアライズドビューを同時に することができます。

このようなUNIQUEまたはPRIMARY KEYインデックスを持たないすべてのマテリアライズドビューを一覧表示するSQLクエリを探しています。

3
alfonx

ヒント:psqlの-Eフラグを使用して取得すると、どのようなクエリが発行されているかがわかります。その\dmメタコマンド、そしてそこから調整します。

これはラフでクリーンアップされたクエリではありませんが、うまくいくはずです...

WITH matviews_with_unqiue_keys AS (
  SELECT c.oid, c.relname, c2.relname AS idx_name
  FROM pg_catalog.pg_class c, pg_catalog.pg_class c2, pg_catalog.pg_index i
  LEFT JOIN pg_catalog.pg_constraint con ON (
    conrelid = i.indrelid AND conindid = i.indexrelid AND contype IN ('p','u'))
  WHERE
    c.relkind = 'm' AND
    c.oid = i.indrelid AND i.indexrelid = c2.oid AND indisunique
)

SELECT c.relname
FROM pg_class c
WHERE c.relkind = 'm'
EXCEPT
SELECT mwk.relname
FROM matviews_with_unique_keys as mwk;
3