Политика безопасности строк и разделов в PostgreSQL
В таблице PostgreSQL 10.6 включена политика безопасности строк, например id
, Таблица имеет несколько разделов на основе id
,
Перед выполнением запроса выбора значение для поля было установлено с помощью SET
заявление.
Но когда выполняется запрос на выборку, из плана объяснения я вижу, что PostgreSQL должен сканировать все разделы, чтобы найти правильный раздел, соответствующий значению, установленному с помощью SET
заявление.
Тогда как если id
был передан в WHERE
пункт, он выбрал правильный раздел, не просматривая их все.
Есть ли способ заставить политику безопасности строк выбрать правильный раздел, аналогичный предложению where?
1 ответ
Если ваша политика зависит от устанавливаемого параметра, вы, вероятно, используете current_setting()
чтобы получить это.
Поскольку значение не известно при анализе запроса, PostgreSQL v10 не может применить отсечение разделов.
В зависимости от вашего запроса может помочь обновление до версии v11, поскольку в эту версию добавлена поддержка сокращения разделов во время выполнения запроса.