web-dev-qa-db-fra.com

Liste des vues matérialisées dans PostgreSQL qui n'ont pas d'index unique

PostgreSQL 9.4 permet de Actualiser des vues matérialisées simultanément , s'ils ont un index unique.

Je cherche une requête SQL qui répertorie toutes les vues matérialisées qui n'ont pas d'index de clé uniques ou primaires.

3
alfonx

CONSEIL: Utilisez le drapeau de PSQL pour l'obtenir pour vous montrer comment les requêtes émettent-il de par exemple. son \dm méta-commande et s'ajuste de là.

Voici une requête rugueuse et non à tout nettoyée, mais cela devrait faire le tour ...

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
Josh Kupershmidt