我有一个大小为10GB的表,表上有一个示例化视图(没有连接等)的大小也是10gb。我在表上使用pg_repack,它的大小减少到660mb。但在并发刷新实体化视图后,垫子视图的大小仍然是10gb。当我在该表上创建相同的新垫子视图时,它的大小设置为610mb。除了删除和重新创建之外,是否还有其他方法可以清除实体化视图?每次都应提供实体化视图
31moq8wy1#
可以使用以下命令清除示例化视图
REFRESH MATERIALIZED VIEW mv WITH NO DATA;
但这没有多大意义。您的实体化视图膨胀了。这是因为REFRESH MATERIALIZED VIEW CONCURRENTLY实际上并没有替换,而是更新了现有数据。有两种方法可以消除膨胀:1.
REFRESH MATERIALIZED VIEW CONCURRENTLY
REFRESH MATERIALIZED VIEW mv;
不使用CONCURRENTLY刷新实体化视图将丢弃旧的膨胀表。1.
CONCURRENTLY
VACUUM (FULL) mv;
型这两种方法都使示例化视图在语句运行时不可访问,但无法避免这种情况。
1条答案
按热度按时间31moq8wy1#
可以使用以下命令清除示例化视图
但这没有多大意义。您的实体化视图膨胀了。这是因为
REFRESH MATERIALIZED VIEW CONCURRENTLY
实际上并没有替换,而是更新了现有数据。有两种方法可以消除膨胀:1.
不使用
CONCURRENTLY
刷新实体化视图将丢弃旧的膨胀表。1.
型
这两种方法都使示例化视图在语句运行时不可访问,但无法避免这种情况。