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"
相关:
- Create index if it does not exist
- How to check if a table exists in a given 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';
我为物化视图创建了一个唯一索引:
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"
相关:
- Create index if it does not exist
- How to check if a table exists in a given 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';