pgsql: Fix BRIN free space computations
От | Alvaro Herrera |
---|---|
Тема | pgsql: Fix BRIN free space computations |
Дата | |
Msg-id | E1ZrBeL-00056h-3r@gemulon.postgresql.org обсуждение исходный текст |
Список | pgsql-committers |
Fix BRIN free space computations A bug in the original free space computation made it possible to return a page which wasn't actually able to fit the item. Since the insertion code isn't prepared to deal with PageAddItem failing, a PANIC resulted ("failed to add BRIN tuple [to new page]"). Add a macro to encapsulate the correct computation, and use it in brin_getinsertbuffer's callers before calling that routine, to raise an early error. I became aware of the possiblity of a problem in this area while working on ccc4c074994d734. There's no archived discussion about it, but it's easy to reproduce a problem in the unpatched code with something like CREATE TABLE t (a text); CREATE INDEX ti ON t USING brin (a) WITH (pages_per_range=1); for length in `seq 8000 8196` do psql -f - <<EOF TRUNCATE TABLE t; INSERT INTO t VALUES ('z'), (repeat('a', $length)); EOF done Backpatch to 9.5, where BRIN was introduced. Branch ------ master Details ------- http://git.postgresql.org/pg/commitdiff/21a4e4a4c9fe417e2462b6f90f6b0e49e32ceba6 Modified Files -------------- src/backend/access/brin/brin_pageops.c | 63 ++++++++++++++++++++++---------- 1 file changed, 43 insertions(+), 20 deletions(-)
В списке pgsql-committers по дате отправления: