Is there a postgres command to list/drop all materialized views?
我在我的代码中创建了多个视图,每次运行代码时,我都想删除到目前为止生成的所有物化视图。 是否有任何命令会列出Postgres的所有物化视图或删除所有这些视图?
显示所有:
1 2 3 | SELECT oid::regclass::text FROM pg_class WHERE relkind = 'm'; |
根据从
在系统目录
手册:
1 m = materialized VIEW
要删除所有,您可以使用此查询生成所需的SQL脚本:
1 2 3 | SELECT 'DROP MATERIALIZED VIEW ' || string_agg(oid::regclass::text, ', ') FROM pg_class WHERE relkind = 'm'; |
返回:
1 | DROP MATERIALIZED VIEW mv1, some_schema_not_in_search_path.mv2, ... |
一个
在执行之前检查生成的DDL脚本以确保它。您确定要从数据库中的所有模式中删除所有MV吗?您是否拥有所需的权限? (目前在新标准安装中没有物化视图。)
这个答案是基于Erwin Brandstetter的答案。下面的版本添加了特定的模式名称,仅从已定义的模式中检索实例化视图。 Cascasde还会从该模式中删除对物化视图的依赖性。小心一点。
1 2 3 4 5 | 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>>' |
如果要在每个视图前面获取包含DROP语句的完整列表,这将更容易:
1 2 3 | SELECT 'DROP MATERIALIZED VIEW ' || relname || ';' FROM pg_class WHERE relkind = 'm'; |