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?
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 regclass
text
.
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.)
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';
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>>'