Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 5e29378

Browse files
author
Alexander Korotkov
committed
Fix handling of variable-length tuples in in_memory FDW
Fix two bugs related to variable-length tuples: 1) It wasn't taken into account that when tuple was going to be replaced, after page compaction it might go away. 2) Whe deleted tuple is replaced, number of vacated bytes was mistakenly decreased by size of new tuple instead of old tuple.
1 parent 0fde833 commit 5e29378

File tree

6 files changed

+272
-5
lines changed

6 files changed

+272
-5
lines changed

contrib/in_memory/btree.c

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -286,6 +286,27 @@ insert_to_leaf(BTreeStack *stack,
286286
{
287287
compact_page(desc, p, &state);
288288
offset = btree_page_binary_search(desc, p, tuple, BTreeTuple);
289+
290+
/*
291+
* If we were going to replace the tuple, then we should check
292+
* it's not gone after compaction.
293+
*/
294+
if (replace)
295+
{
296+
Assert(PAGE_IS_LEAF(p)); /* We place tuples only on leaf pages */
297+
298+
if (offset < header->itemsCount)
299+
{
300+
Pointer curTuple = BTREE_PAGE_GET_ITEM(p, offset) +
301+
OLeafTupleHeaderSize;
302+
if (desc->cmp(desc, tuple, BTreeTuple, curTuple, BTreeTuple))
303+
replace = false;
304+
}
305+
else
306+
{
307+
replace = false;
308+
}
309+
}
289310
}
290311

291312
state = modify_page(p, state);
@@ -299,12 +320,14 @@ insert_to_leaf(BTreeStack *stack,
299320
}
300321
else
301322
{
323+
int old_item_size = BTREE_PAGE_GET_ITEM_SIZE(p, offset);
324+
302325
/*
303326
* We should be able to undo this action without memory
304327
* allocation. Thus we shouldn't cut space occupied by this
305328
* page item.
306329
*/
307-
if (tuplen + tupheaderlen > BTREE_PAGE_GET_ITEM_SIZE(p, offset))
330+
if (tuplen + tupheaderlen > old_item_size)
308331
resize_page_item(p, offset, tuplen + tupheaderlen);
309332

310333
if (level == 0)
@@ -324,8 +347,8 @@ insert_to_leaf(BTreeStack *stack,
324347
* tuple.
325348
*/
326349
if (prev->deleted)
327-
header->nVacatedBytes -= BTREE_PAGE_GET_ITEM_SIZE(p, offset)
328-
+ sizeof(OffsetNumber);
350+
header->nVacatedBytes -= (old_item_size
351+
+ sizeof(OffsetNumber));
329352
}
330353
}
331354
}

contrib/in_memory/btree_page.c

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -302,6 +302,7 @@ page_fits_item(Page p, OffsetNumber offset, LocationIndex size, bool replace)
302302
{
303303
LocationIndex free_space;
304304
BTreePageHeader *header = (BTreePageHeader *) p;
305+
LocationIndex vacated_bytes = header->nVacatedBytes;
305306

306307
Assert(size == MAXALIGN(size));
307308

@@ -323,19 +324,30 @@ page_fits_item(Page p, OffsetNumber offset, LocationIndex size, bool replace)
323324
}
324325
else
325326
{
326-
LocationIndex oldsize;
327+
LocationIndex oldsize;
328+
OLeafTupleHeader *tupHdr;
327329

330+
Assert(PAGE_IS_LEAF(p));
328331
oldsize = BTREE_PAGE_GET_ITEM_SIZE(p, offset);
329332
Assert(oldsize == MAXALIGN(oldsize));
330333

331334
if (size <= oldsize)
332335
return PageFit;
333336

337+
/*
338+
* If replaced tuple will go away after page compaction, then
339+
* we should substract the size occupied by it from the size to
340+
* be freed by page compaction.
341+
*/
342+
tupHdr = (OLeafTupleHeader *) BTREE_PAGE_GET_ITEM(p, offset);
343+
if (tupHdr->deleted && TX_IS_CSN(tupHdr->tx))
344+
vacated_bytes -= oldsize - sizeof(OffsetNumber);
345+
334346
free_space = page_get_free_space(p);
335347

336348
if (free_space < size - oldsize)
337349
{
338-
if (free_space + header->nVacatedBytes < size - oldsize)
350+
if (free_space + vacated_bytes < size - oldsize)
339351
return PageNotFit;
340352
else
341353
return PageFitAfterCompaction;

contrib/in_memory/expected/in_memory.out

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5531,3 +5531,69 @@ SELECT * FROM test10 JOIN im_test13 USING(idi, idv);
55315531

55325532
set enable_nestloop=on;
55335533
set enable_hashjoin=on;
5534+
-- wrong nVacatedBytes bug
5535+
TRUNCATE im_test1;
5536+
INSERT INTO im_test1 VALUES (1, repeat('x', 200));
5537+
DELETE FROM im_test1 WHERE id = 1;
5538+
INSERT INTO im_test1 SELECT id, repeat('x', 250) FROM generate_series(1, 4) id;
5539+
SELECT * FROM im_test1;
5540+
id | val
5541+
----+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
5542+
1 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
5543+
2 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
5544+
3 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
5545+
4 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
5546+
(4 rows)
5547+
5548+
--- replace item when page itemsCount == 0 bug
5549+
-- exact recipe
5550+
TRUNCATE im_test1;
5551+
INSERT INTO im_test1 SELECT id, repeat('x', 200) FROM generate_series(1, 10) id;
5552+
DELETE FROM im_test1 WHERE id > 0;
5553+
INSERT INTO im_test1 SELECT id, repeat('x', 250) FROM generate_series(7, 7) id;
5554+
SELECT * FROM im_test1;
5555+
id | val
5556+
----+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
5557+
7 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
5558+
(1 row)
5559+
5560+
TRUNCATE im_test1;
5561+
INSERT INTO im_test1 SELECT id, repeat('x', 200) FROM generate_series(1, 100) id;
5562+
DELETE FROM im_test1 WHERE id > 0;
5563+
INSERT INTO im_test1 SELECT id, repeat('x', 250) FROM generate_series(1, 100) id;
5564+
SELECT count(*), sum(id) FROM im_test1;
5565+
count | sum
5566+
-------+------
5567+
100 | 5050
5568+
(1 row)
5569+
5570+
-- replace deleted item after compaction
5571+
TRUNCATE im_test1;
5572+
INSERT INTO im_test1 SELECT id, repeat('x', 200) FROM generate_series(1, 10) id;
5573+
DELETE FROM im_test1 WHERE id % 2 = 0;
5574+
INSERT INTO im_test1 SELECT id, repeat('x', 250) FROM generate_series(2, 10, 2) id;
5575+
SELECT * FROM im_test1;
5576+
id | val
5577+
----+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
5578+
1 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
5579+
2 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
5580+
3 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
5581+
4 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
5582+
5 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
5583+
6 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
5584+
7 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
5585+
8 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
5586+
9 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
5587+
10 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
5588+
(10 rows)
5589+
5590+
TRUNCATE im_test1;
5591+
INSERT INTO im_test1 SELECT id, repeat('x', 200) FROM generate_series(1, 100) id;
5592+
DELETE FROM im_test1 WHERE id % 2 = 0;
5593+
INSERT INTO im_test1 SELECT id, repeat('x', 250) FROM generate_series(2, 100, 2) id;
5594+
SELECT count(*), sum(id) FROM im_test1;
5595+
count | sum
5596+
-------+------
5597+
100 | 5050
5598+
(1 row)
5599+

contrib/in_memory/expected/in_memory_1.out

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5395,3 +5395,69 @@ SELECT * FROM test10 JOIN im_test13 USING(idi, idv);
53955395

53965396
set enable_nestloop=on;
53975397
set enable_hashjoin=on;
5398+
-- wrong nVacatedBytes bug
5399+
TRUNCATE im_test1;
5400+
INSERT INTO im_test1 VALUES (1, repeat('x', 200));
5401+
DELETE FROM im_test1 WHERE id = 1;
5402+
INSERT INTO im_test1 SELECT id, repeat('x', 250) FROM generate_series(1, 4) id;
5403+
SELECT * FROM im_test1;
5404+
id | val
5405+
----+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
5406+
1 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
5407+
2 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
5408+
3 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
5409+
4 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
5410+
(4 rows)
5411+
5412+
--- replace item when page itemsCount == 0 bug
5413+
-- exact recipe
5414+
TRUNCATE im_test1;
5415+
INSERT INTO im_test1 SELECT id, repeat('x', 200) FROM generate_series(1, 10) id;
5416+
DELETE FROM im_test1 WHERE id > 0;
5417+
INSERT INTO im_test1 SELECT id, repeat('x', 250) FROM generate_series(7, 7) id;
5418+
SELECT * FROM im_test1;
5419+
id | val
5420+
----+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
5421+
7 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
5422+
(1 row)
5423+
5424+
TRUNCATE im_test1;
5425+
INSERT INTO im_test1 SELECT id, repeat('x', 200) FROM generate_series(1, 100) id;
5426+
DELETE FROM im_test1 WHERE id > 0;
5427+
INSERT INTO im_test1 SELECT id, repeat('x', 250) FROM generate_series(1, 100) id;
5428+
SELECT count(*), sum(id) FROM im_test1;
5429+
count | sum
5430+
-------+------
5431+
100 | 5050
5432+
(1 row)
5433+
5434+
-- replace deleted item after compaction
5435+
TRUNCATE im_test1;
5436+
INSERT INTO im_test1 SELECT id, repeat('x', 200) FROM generate_series(1, 10) id;
5437+
DELETE FROM im_test1 WHERE id % 2 = 0;
5438+
INSERT INTO im_test1 SELECT id, repeat('x', 250) FROM generate_series(2, 10, 2) id;
5439+
SELECT * FROM im_test1;
5440+
id | val
5441+
----+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
5442+
1 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
5443+
2 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
5444+
3 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
5445+
4 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
5446+
5 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
5447+
6 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
5448+
7 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
5449+
8 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
5450+
9 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
5451+
10 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
5452+
(10 rows)
5453+
5454+
TRUNCATE im_test1;
5455+
INSERT INTO im_test1 SELECT id, repeat('x', 200) FROM generate_series(1, 100) id;
5456+
DELETE FROM im_test1 WHERE id % 2 = 0;
5457+
INSERT INTO im_test1 SELECT id, repeat('x', 250) FROM generate_series(2, 100, 2) id;
5458+
SELECT count(*), sum(id) FROM im_test1;
5459+
count | sum
5460+
-------+------
5461+
100 | 5050
5462+
(1 row)
5463+

0 commit comments

Comments
 (0)