postgresql中物化视图是否创建索引的反馈

Feedback on whether index was created on materialized views in postgresql

我为物化视图创建了一个唯一索引:

create unique index if not exists matview_key on
      matview (some_group_id, some_description);

不知道有没有创建
如何查看索引?

谢谢!

如评论所述,如果命令成功完成并且您没有收到错误消息,则索引已创建。可能的警告:当事务未提交时,没有人可以看到它(除了现在保留的唯一名称),它仍然可能被回滚。签入单独的交易以确保。

绝对确定:

SELECT pg_get_indexdef(oid)
FROM   pg_catalog.pg_class
WHERE  relname = 'matview_key'
AND    relkind = 'i'
-- AND    relnamespace = 'public'::regnamespace  -- optional, to make sure of the schema, too

这样您就可以查看给定名称的索引是否存在,以及它的确切定义以排除具有相同名称的不同索引。 Pure SQL,适用于任何客户端。 (物化视图的索引没有什么特别之处。)

同时筛选架构绝对确定。在您的情况下将是“默认”模式(a.k.a。“当前”模式),因为您没有在创建时指定。参见:

  • How does the search_path influence identifier resolution and the "current schema"

相关:

在 psql 中:

\di public.matview_key

只找到索引。同样,架构是可选的,可以缩小范围。

进度报告

如果创建索引需要很长时间,您可以在 pg_stat_progress_create_index 中查看自 Postgres 12 以来的进度:

SELECT * FROM pg_stat_progress_create_index
-- WHERE relid = 'public.matview'::regclass  -- optionally narrow down

验证索引创建的两种方法:

--In psql
\d matview

--Using SQL

select 
  * 
from 
   pg_indexes 
where 
   indexname = 'matview_key' 
and 
   tablename = 'matview';

有关 pg_indexes 的更多信息。

查看 pg_indexes 的另一种方法是 pg_matviews(仅适用于物化视图)

select *
from pg_matviews
where matviewname = 'my_matview_name';