1

PostgreSQL 10.6 表在字段上启用了行安全策略,例如id. 该表有多个基于id.

在执行选择查询之前,该字段的值是使用SET语句设置的。

但是,当运行选择查询时,我可以从解释计划中看到,PostgreSQL必须在所有分区中扫描以找到与使用该SET语句设置的值相对应的正确分区。

而如果id在子句中传递了WHERE,它会选择正确的分区而不扫描所有分区。

有没有办法让行安全策略选择类似于 where 子句的正确分区?

4

1 回答 1

2

如果您的策略取决于正在设置的参数,您可能会使用current_setting()它来检索它。

由于在解析查询时该值是未知的,因此 PostgreSQL v10 无法应用分区修剪

根据您的查询,升级到 v11 可能会有所帮助,因为此版本在查询执行时添加了对分区修剪的支持。

于 2019-05-07T06:24:26.160 回答