PostgreSQL 10.6表在字段id
上启用了行安全策略。该表具有基于id
的多个分区。
在执行选择查询之前,使用SET
语句设置了该字段的值。
但是,当运行select查询时,我从解释计划中看到PostgreSQL必须扫描所有分区以找到与使用SET
语句设置的值相对应的正确分区。
如果在id
子句中传递了WHERE
,它将选择正确的分区,而不会扫描所有分区。
是否有一种使行安全策略选择类似于where子句的正确分区的方法?
答案 0 :(得分:2)
如果您的策略取决于所设置的参数,则可能使用current_setting()
来检索它。
由于解析查询时未知该值,因此PostgreSQL v10无法应用分区修剪。
根据您的查询,升级到v11可能会有所帮助,因为此版本增加了在查询执行时对分区修剪的支持。