PostgreSQL – 是否可以阻止或拒绝需要所有分区的查询?

Bar*_*ley 6 postgresql partitioning postgresql-13

我们计划在 RDS 上的 PostgreSQL 13.4 中使用列表/范围分区来对约 5 亿行的数据集进行分区。我们的读取访问模式应该只需要每个查询访问非常少量的分区。我们希望防止需要访问每个分区的读取查询,以便该策略可以随着数据量的增长而很好地发挥作用。是否可以在数据库层强制执行任何检查或防护,以拒绝/阻止/失败需要包含每个分区的查询计划的查询?

本质上,我希望这体现为确保子句中有足够的过滤,WHERE以便查询规划器知道它不需要路由到每个分区。我们可以检查来自业务逻辑的查询示例的查询计划,但如果能够自动执行它就更好了。理想情况下,如果开销不是太高,我们可以在生产中强制执行,但在较低的环境中执行此操作将是积极的一步。对于如何实现这一点,有什么选择或建议吗?提前谢谢了。

Lau*_*lbe 3

没有办法做到这一点。

我能想到的最好的方法是在数据库会话中设置参数,statement_timeout以便运行时间过长的语句失败并出现错误。