2014-04-15 17 views

risposta

32

Mostra tutti:

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

I nomi sono sfuggiti automaticamente e lo schema qualificato secondo la vostra corrente search_path, ove necessario, nel cast regclass-text.

Le viste materializzate nel catalogo di sistema pg_class sono identificate da relkind = 'm'.
Per documentation:

m = materialized view 

Per goccia tutto, è possibile generare lo script SQL necessario con questa query:

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

Returns:

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

Uno DROP MATERIALIZED VIEW dichiarazione può prendersi cura di più viste materializzate. Potrebbe essere necessario aggiungere CASCADE alla fine se si dispone di viste nidificate.

Controllare lo script DDL risultante per essere sicuri prima di eseguirlo. Sei sicuro di voler eliminare tutte le MV da tutti gli schemi nel db? (Attualmente non ci sono viste materializzate in un'installazione standard fresca.)

+0

Presumibilmente un errore di battitura sopra - a mio PG, il 3 ° messa in vendita di cui sopra dovrebbe iniziare: SELECT 'GOCCIA vista materializzata' ... –

+0

@MichaelTerry: Sì, mi aggiravo fuori tema alle viste. Grazie, risolto. –

+0

come nota a margine è possibile utilizzare il comando pg quick command \ dm per ottenere semplicemente un elenco di visualizzazioni dal cli client. – lbrindze

0

Questo sarebbe più facile se si vuole ottenere una lista completa con l'istruzione DROP di fronte a ogni vista:

SELECT 'DROP MATERIALIZED VIEW ' || relname || ';' 
FROM pg_class 
WHERE relkind = 'm'; 
0

Questa una risposta si basa sulla risposta da Erwin Brandstetter. La versione seguente aggiunge un nome schema specifico per recuperare solo le viste materializzate da uno schema definito. Anche Cascasde elimina le dipendenze dalle viste materializzate da quello schema. Stai attento con questo.

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>>' 
Problemi correlati