为了提高对包含jsonb
列的相当大的表(5M+ 行)的查询性能,我想使用从这些列派生的数据创建物化视图。以下是问题的简化版本:
定义 CREATE TABLE my_table (id int8, content jsonb);
内容 编号 | 内容 -------------------------------------------------- -------------------------- 1 | {“客户”:“John Doe”,“项目”:{“产品”:“威士忌”,“数量”:3}} 2 | {“客户”:“John Doe”,“项目”:{“产品”:“威士忌”,“数量”:4}} 3 | {“客户”:“丹尼男孩”,“项目”:{“产品”:“啤酒”,“数量”:2}}
现在我想创建两个物化视图,一个将包含所有客户名称,另一个将包含每个product
.
所以最终结果应该是:
物化视图 1 / 客户名称 顾客姓名 ------------- 约翰·多伊 丹尼男孩 物化视图2/所有产品的数量 产品 | 数量 ------------------ 啤酒 | 2 威士忌 | 7
对于第一个物化视图,我尝试了以下操作:
创建物化视图 客户 AS 选择不同的 content->'customer' AS customer_name FROM my_table;
这很好用,但我在使用第二个物化视图时遇到了问题。
我应该如何以有效的方式汇总每种产品的数量?
您只需要
GROUP BY
产品来构建产品sum()
的数量。