pgsql: Avoid a couple of zero-divide scenarios in the planner.

Поиск
Список
Период
Сортировка
От Tom Lane
Тема pgsql: Avoid a couple of zero-divide scenarios in the planner.
Дата
Msg-id E1ajqgI-00037k-1A@gemulon.postgresql.org
обсуждение исходный текст
Список pgsql-committers
Avoid a couple of zero-divide scenarios in the planner.

cost_subplan() supposed that the given subplan must have plan_rows > 0,
which as far as I can tell was true until recent refactoring of the
code in createplan.c; but now that code allows the Result for a provably
empty subquery to have plan_rows = 0.  Rather than undo that change,
put in a clamp to prevent zero divide.

get_cheapest_fractional_path() likewise supposed that best_path->rows > 0.
This assumption has been wrong for longer.  It's actually harmless given
IEEE float math, because a positive value divided by zero gives +Infinity
and compare_fractional_path_costs() will do the right thing with that.
Still, best not to assume that.

final_cost_nestloop() also seems to have some risks in this area, so
borrow the clamping logic already present in the mergejoin cost functions.

Lastly, remove unnecessary clamp_row_est() in planner.c's calls to
get_number_of_groups().  The only thing that function does with path_rows
is pass it to estimate_num_groups() which already has an internal clamp,
so we don't need the extra call; and if we did, the callers are arguably
the wrong place for it anyway.

First two items reported by Piotr Stefaniak, the others are products
of my nosing around for similar problems.  No back-patch since there's
no evidence that problems arise in the back branches.

Branch
------
master

Details
-------
http://git.postgresql.org/pg/commitdiff/76281aa9647e6a5dfc646514554d0f519e3b8a58

Modified Files
--------------
src/backend/optimizer/path/costsize.c | 17 ++++++++++++-----
src/backend/optimizer/plan/planner.c  | 12 +++++-------
2 files changed, 17 insertions(+), 12 deletions(-)


В списке pgsql-committers по дате отправления:

Предыдущее
От: Tom Lane
Дата:
Сообщение: pgsql: Update time zone data files to tzdata release 2016c.
Следующее
От: Tom Lane
Дата:
Сообщение: pgsql: Modernize zic's test for valid timezone abbreviations.