首页 > 解决方案 > 在 PostgreSQL 中保存多个用于聚合的动态过滤器

问题描述

存储多个动态过滤器的最有效方法是什么,这些过滤器可以由用户在给定数据上创建,而我们是用于聚合数据的过滤器?

假设我有一个名为的表t_filter,它将存储给定数据的一些数据过滤器/查询t_data

用户可以完全动态地构建每个过滤器 ,并可以将其保存以创建某种仪表板(按 filter_name 保存的过滤器列表以及按条件过滤的数据的一些聚合函数)。

每个过滤器可以在. >=_ <=_ !=_ ==_ IS NOT NULL_IS NULLANDORBETWEENt_data

用户可以修改其过滤器:创建/更新/删除,其中的条目t_data可以通过导入增长或通过删除缩小,所以一切都是动态的。

我通过根据用户创建的过滤器创建动态 SQL 来解决这个问题,UNION ALL每个现有的动态 SQL 条目都在t_filter其中并从结果中创建一个物化视图(只是外键信息:filter_id属于哪个 data_id)。

此解决方案有效,但不是那么方便,因为我需要检查过滤器更改并重新生成物化视图以及t_data.

对于每个额外的过滤器条目,生成视图的时间会更长,因为需要执行额外的 SQL。

有没有更好的方法来解决这个问题?

标签: sqlpostgresqlfilteruniondynamic-sql

解决方案


推荐阅读