Est-il postgres commande pour lister/supprimer toutes les vues matérialisées?

je crée plusieurs vues dans mon code et chaque fois que le code est lancé, je voudrais laisser tomber toutes les vues matérialisées générées jusqu'à présent. Est-il une commande qui liste tous les vues matérialisées pour Postgres ou laisser tomber tous?

15
demandé sur Erwin Brandstetter 2014-04-15 23:42:35

3 réponses

tout Afficher:

SELECT oid::regclass::text
FROM   pg_class
WHERE  relkind = 'm';

les noms sont automatiquement doublés et qualifiés de schéma selon votresearch_path dans la distribution de regclasstext.

dans le catalogue système pg_class les vues matérialisées sont marqués avec relkind = 'm'.

manuel:

m = materialized view

goutte tout, vous pouvez générer le script SQL nécessaire avec ceci requête:

SELECT 'DROP MATERIALIZED VIEW ' || string_agg(oid::regclass::text, ', ') 
FROM   pg_class
WHERE  relkind = 'm';

Renvoie:

DROP MATERIALIZED VIEW mv1, some_schema_not_in_search_path.mv2, ...

DROP MATERIALIZED VIEW l'énoncé peut s'occuper de plusieurs vues matérialisées. Vous devrez peut-être ajouter CASCADE à la fin si vous avez vues imbriquées.

inspectez le script DDL résultant pour être sûr avant de l'exécuter. Êtes-vous sûr que vous voulez supprimer MVs de tous les schémas dans le db? Et avez-vous les privilèges requis pour le faire? (Actuellement, il n'existe pas de vues matérialisées dans un nouvelle installation standard.)

35
répondu Erwin Brandstetter 2018-04-19 14:57:49

ce serait plus facile si vous voulez obtenir une liste complète avec la déclaration de chute devant chaque vue:

SELECT 'DROP MATERIALIZED VIEW ' || relname || ';' 
FROM   pg_class
WHERE  relkind = 'm';
0
répondu durbin510 2017-12-06 01:41:14

Cette réponse est basée sur la réponse de Erwin Brandstetter. La version ci-dessous ajoute un nom de schéma spécifique pour récupérer uniquement les vues matérialisées à partir d'un schéma défini. La cascade supprime aussi les dépendances sur les vues matérialisées de ce schéma. Soyez prudent avec ça.

SELECT 'DROP MATERIALIZED VIEW <<schema_name>>.' || c.relname::text || ' CASCADE;' AS drop_statements
FROM pg_class c
INNER JOIN pg_namespace n ON n.oid = c.relnamespace
AND c.relkind = 'm'
AND n.nspname = '<<schema_name>>'
0
répondu Stefan 2017-12-13 09:24:06