pgsql: Fix misapplication of pgstat_count_truncate to wrong relation.
От | Tom Lane |
---|---|
Тема | pgsql: Fix misapplication of pgstat_count_truncate to wrong relation. |
Дата | |
Msg-id | E1gVJfm-0001nw-LE@gemulon.postgresql.org обсуждение исходный текст |
Список | pgsql-committers |
Fix misapplication of pgstat_count_truncate to wrong relation. The stanza of ExecuteTruncate[Guts] that truncates a target table's toast relation re-used the loop local variable "rel" to reference the toast rel. This was safe enough when written, but commit d42358efb added code below that that supposed "rel" still pointed to the parent table. Therefore, the stats counter update was applied to the wrong relcache entry (the toast rel not the user rel); and if we were unlucky and that relcache entry had been flushed during reindex_relation, very bad things could ensue. (I'm surprised that CLOBBER_CACHE_ALWAYS testing hasn't found this. I'm even more surprised that the problem wasn't detected during the development of d42358efb; it must not have been tested in any case with a toast table, as the incorrect stats counts are very obvious.) To fix, replace use of "rel" in that code branch with a more local variable. Adjust test cases added by d42358efb so that some of them use tables with toast tables. Per bug #15540 from Pan Bian. Back-patch to 9.5 where d42358efb came in. Discussion: https://postgr.es/m/15540-01078812338195c0@postgresql.org Branch ------ REL9_5_STABLE Details ------- https://git.postgresql.org/pg/commitdiff/4d5cfb91156d1cc8ede245b8b363468efedf1975 Modified Files -------------- src/backend/commands/tablecmds.c | 15 +++++++++------ src/test/regress/expected/stats.out | 4 ++-- src/test/regress/sql/stats.sql | 4 ++-- 3 files changed, 13 insertions(+), 10 deletions(-)
В списке pgsql-committers по дате отправления: