- 支持试读
临时表
本章将讨论 PostgreSQL 的临时表。 - 支持试读
物化视图
本章将讨论 PostgreSQL 的物化视图。它可以用来缓存复杂且昂贵的查询结果,并允许你定期刷新此结果。 递归查询
本章我们将讨论使用CTE来构建 PostgreSQL 递归查询。递归视图
本章我们将讨论 PostgreSQL 的递归视图。窗口函数
本章我们将讨论窗口函数,包括:`CUME_DIST`、`DENSE_RANK`、`FIRST_VALUE`、`LAG`、`LAST_VALUE`、`LEAD`、`NTILE`、`NTH_VALUE`、`PERCENT_RANK`、`RANK` 和 `ROW_NUMBER`等。JSON 和 JSONB 类型
PostgreSQL 原生支持 JSON 数据类型,提供了诸多操作 JSON 的运算符和函数。同时还可以给 JSON 数据创建索引。除了 JSON类型,PostgreSQL 还提供了更先进的 JSONB 数据类型。- 支持试读
UUID
PostgreSQL 支持 UUID 类型。 数组
本章将讨论数组。数组在 PostgreSQL 扮演重要的角色。HSTORE
PostgreSQL 的 hstore 类型,用于存储键值对。PostgreSQL 集群
本章我们将以一主两从的架构讨论 PostgreSQL 的集群。我们将通过本地虚拟机(IPV4)和线上多台 VPS (IPV6)分别进行演示。使用自定义类型实现 PostgreSQL 无符号整数并与 Rust 集成
本章我们将通过 PostgreSQL 的自定义类型来实现无符号整型。同时,还会将其与 sqlx 进行映射,并使用 axum 开发一个简单的 RESTful API 来使用它们。
物化视图
- 351
- 2023-07-31 23:00:40
本章将讨论 PostgreSQL 的物化视图。它可以用来缓存复杂且昂贵的查询结果,并允许你定期刷新此结果。
和普通视图不一样,物化视图允许将查询结果存储在物理磁盘上,并定期更新数据。
PostgreSQL 进视图的概念进行了扩展,允许视图物理存储数据,这就是物化视图。
物化视图可以用来缓存复杂且昂贵的查询结果,并允许你定期刷新此结果。它在许多需要快速数据访问的情况下很有用,因此它通常用于数据仓库和商业智能应用程序。
CREATE MATERIALIZED VIEW 视图名
AS
查询
WITH [NO] DATA;
WITH DATA
:在创建时将数据加载到视图中。WITH NO DATA
:在创建时不将数据加载到视图中。此种情况下,在将数据加载到视图之前,无法从视图中查询数据。
刷新物化视图的数据
要将数据加载到物化视图中,请使用 REFRESH MATERIALIZED VIEW
语句:
REFRESH MATERIALIZED VIEW [CONCURRENTLY] 视图名;
删除物化视图
DROP MATERIALIZED VIEW 视图名;
示例
以下语句创建一个名为 rental_by_category
的物化视图:
CREATE MATERIALIZED VIEW rental_by_category
AS
SELECT c.name AS category,
sum(p.amount) AS total_sales
FROM (((((payment p
JOIN rental r ON ((p.rental_id = r.rental_id)))
JOIN inventory i ON ((r.inventory_id = i.inventory_id)))
JOIN film f ON ((i.film_id = f.film_id)))
JOIN film_category fc ON ((f.film_id = fc.film_id)))
JOIN category c ON ((fc.category_id = c.category_id)))
GROUP BY c.name
ORDER BY sum(p.amount) DESC
WITH NO DATA;
由于我们使用的是 WITH NO DATA
选项,所以该视图创建完之后,你无法从中查询数据。此时需要将数据加载到该视图中:
此时,再查询数据,就能得到预期的结果:
SELECT * FROM rental_by_category;
如果在刷新数据的时候,要使用 CONCURRENTLY
选项,那么需要为这个视图创建一个 UNIQUE
索引,比如:
现在可以放心地使用 CONCURRENTLY
选项刷新数据了:
REFRESH MATERIALIZED VIEW CONCURRENTLY rental_by_category;