Tworzę wiele widoków w moim kodzie i za każdym razem, gdy kod jest uruchamiany, chciałbym upuścić wszystkie zmaterializowane widoki wygenerowane do tej pory. Czy jest jakieś polecenie, które wyświetli wszystkie zmaterializowane widoki PostgreSQL lub zrzuci je wszystkie?Czy istnieje polecenie postgres do listy/upuszczenia wszystkich zmaterializowanych widoków?
Odpowiedz
Pokaż wszystkie:
SELECT oid::regclass::text
FROM pg_class
WHERE relkind = 'm';
Nazwy są automatycznie uciekł i schemat zakwalifikowanych według aktualnej search_path
razie potrzeby w obsadzie od regclass
do text
.
Materializowane widoki w katalogu systemowym pg_class
są identyfikowane przez relkind = 'm'
.
Per documentation:
m = materialized view
Aby spadek wszystkim, można wygenerować potrzebne skrypt SQL z tego zapytania:
SELECT 'DROP MATERIALIZED VIEW ' || string_agg(oid::regclass::text, ', ')
FROM pg_class
WHERE relkind = 'm';
Powroty:
DROP MATERIALIZED VIEW mv1, some_schema_not_in_search_path.mv2, ...
Jeden DROP MATERIALIZED VIEW
oświadczenie może dbać o wiele zmaterializowanych widoków. Może być konieczne dodanie na końcu CASCADE
, jeśli masz widoki zagnieżdżone.
Sprawdź wynikowy skrypt DDL, aby upewnić się przed jego wykonaniem. Czy jesteś pewien, że chcesz upuścić wszystkie MV z ze wszystkich schematów w db? (Obecnie nie istnieją zmaterializowane perspektywy w instalacji standardowej świeżego.)
Byłoby to łatwiejsze, jeśli chcesz uzyskać pełną listę ze stwierdzeniem spadku przed każdym zdaniem:
SELECT 'DROP MATERIALIZED VIEW ' || relname || ';'
FROM pg_class
WHERE relkind = 'm';
Ta odpowiedź opiera się na odpowiedzi z Erwin Brandstetter. Poniższa wersja dodaje określoną nazwę schematu, aby pobierać zmaterializowane widoki z określonego schematu. Cascasde również zmniejsza zależności od zmaterializowanych widoków z tego schematu. Ostrożnie z tym.
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>>'
Prawdopodobnie literówka wyżej - moim PG, 3. wykaz powyżej powinien rozpocząć się: SELECT „DROP widok zmaterializowany” ... –
@MichaelTerry: Tak, byłem wędrówki off temat poglądów. Dzięki, naprawione. –
tak jak na marginesie, możesz użyć polecenia pg quick \ dm, aby wyświetlić listę swoich widoków z klienta cli. – lbrindze