aboutsummaryrefslogtreecommitdiff
path: root/src/backend/executor/execProcnode.c
diff options
context:
space:
mode:
authorAlvaro Herrera <alvherre@alvh.no-ip.org>2015-10-27 18:17:55 -0300
committerAlvaro Herrera <alvherre@alvh.no-ip.org>2015-10-27 18:17:55 -0300
commitcf42abcc653817849398b62c321de654ea2b28cc (patch)
tree117d7bff6b6c9602bb2b1761b321a975dbd33db5 /src/backend/executor/execProcnode.c
parent68cc162e454a166a2a6ca992aeb759edcc56adc3 (diff)
downloadpostgresql-cf42abcc653817849398b62c321de654ea2b28cc.tar.gz
postgresql-cf42abcc653817849398b62c321de654ea2b28cc.zip
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.
Diffstat (limited to 'src/backend/executor/execProcnode.c')
0 files changed, 0 insertions, 0 deletions