是否有postgres命令列出/删除所有物化视图?

use*_*989 20 database postgresql ddl materialized-views

我在我的代码中创建了多个视图,每次运行代码时,我都想删除到目前为止生成的所有物化视图.是否有任何命令会列出Postgres的所有物化视图或删除所有这些视图?

Erw*_*ter 42

显示所有:

SELECT oid::regclass::text
FROM   pg_class
WHERE  relkind = 'm';
Run Code Online (Sandbox Code Playgroud)

名称是自动双引号和模式修饰,其中根据您当前的需要search_path,从铸造regclasstext.

在系统目录中,pg_class物化视图标记为relkind = 'm'.
手册:

m = materialized view
Run Code Online (Sandbox Code Playgroud)

删除所有,您可以使用此查询生成所需的SQL脚本:

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

返回:

DROP MATERIALIZED VIEW mv1, some_schema_not_in_search_path.mv2, ...
Run Code Online (Sandbox Code Playgroud)

一个DROP MATERIALIZED VIEW陈述可以处理多个物化视图.CASCADE如果您有嵌套视图,则可能需要在末尾添加.

在执行之前检查生成的DDL脚本以确保它.您确定要从数据库中的所有模式中删除所有 MV吗?你有这样做所需的特权吗?(目前在新标准安装中没有物化视图.)