Skip to content

Commit 9083688

Browse files
author
Nikita Glukhov
committed
TMP: chunked arrays
1 parent da29fc6 commit 9083688

File tree

7 files changed

+1890
-91
lines changed

7 files changed

+1890
-91
lines changed

contrib/jsonb_toaster/expected/jsonb_toaster.out

Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -521,6 +521,34 @@ select id, js -> 100 from test_jsonxa_arr order by id;
521521
20 | 101
522522
(14 rows)
523523

524+
update test_jsonxa_arr set js = json_modify(js, set '$[LAST+1]' = '0') where id = 10;
525+
select pg_column_size(js) from test_jsonxa_arr where id = 10;
526+
pg_column_size
527+
----------------
528+
134
529+
(1 row)
530+
531+
update test_jsonxa_arr set js = json_modify(js, set '$[LAST+1]' = '0') where id = 10;
532+
select pg_column_size(js) from test_jsonxa_arr where id = 10;
533+
pg_column_size
534+
----------------
535+
150
536+
(1 row)
537+
538+
update test_jsonxa_arr set js = json_modify(js, set '$[LAST+1]' = '0') where id = 10;
539+
select pg_column_size(js) from test_jsonxa_arr where id = 10;
540+
pg_column_size
541+
----------------
542+
154
543+
(1 row)
544+
545+
update test_jsonxa_arr set js = json_modify(js, set '$[LAST+1]' = '0') where id = 10;
546+
select pg_column_size(js) from test_jsonxa_arr where id = 10;
547+
pg_column_size
548+
----------------
549+
158
550+
(1 row)
551+
524552
update test_jsonxa_arr set js = json_modify(js, set '$[0 to 3]' = '0');
525553
select id, json_query(js, '$[0 to 10]' with wrapper) from test_jsonxa_arr order by id;
526554
id | json_query
@@ -581,6 +609,26 @@ select id, json_query(js, '$[290 to 310]' with wrapper) from test_jsonxa_arr ord
581609
20 | ["0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 298, 299, 300, 301, 302, 303, 304, 305, 306, 307]
582610
(14 rows)
583611

612+
update test_jsonxa_arr set js = json_modify(js, set '$[100,500,1000]' = '0');
613+
select id, json_query(js, '$[95 to 105, 495 to 505, 995 to 1005]' with wrapper) from test_jsonxa_arr order by id;
614+
id | json_query
615+
----+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
616+
7 | ["0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", null, null, null, null, null, "0", null, null, null, null, null, null, null, null, null, null, "0"]
617+
8 | ["0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", null, null, null, null, null, "0", null, null, null, null, null, null, null, null, null, null, "0"]
618+
9 | ["0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 492, 493, 494, 495, 496, "0", 498, 499, 500, 501, 502, null, null, null, null, null, "0"]
619+
10 | ["0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 492, 493, 494, 495, 496, "0", 498, 499, 500, 501, 502, 992, 993, 994, 995, 996, "0", 998, 999, 1000, 1001, 1002]
620+
11 | ["0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 492, 493, 494, 495, 496, "0", 498, 499, 500, 501, 502, 992, 993, 994, 995, 996, "0", 998, 999, 1000, 1001, 1002]
621+
12 | ["0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 492, 493, 494, 495, 496, "0", 498, 499, 500, 501, 502, 992, 993, 994, 995, 996, "0", 998, 999, 1000, 1001, 1002]
622+
13 | ["0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 492, 493, 494, 495, 496, "0", 498, 499, 500, 501, 502, 992, 993, 994, 995, 996, "0", 998, 999, 1000, 1001, 1002]
623+
14 | ["0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 492, 493, 494, 495, 496, "0", 498, 499, 500, 501, 502, 992, 993, 994, 995, 996, "0", 998, 999, 1000, 1001, 1002]
624+
15 | ["0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 492, 493, 494, 495, 496, "0", 498, 499, 500, 501, 502, 992, 993, 994, 995, 996, "0", 998, 999, 1000, 1001, 1002]
625+
16 | ["0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 492, 493, 494, 495, 496, "0", 498, 499, 500, 501, 502, 992, 993, 994, 995, 996, "0", 998, 999, 1000, 1001, 1002]
626+
17 | ["0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 492, 493, 494, 495, 496, "0", 498, 499, 500, 501, 502, 992, 993, 994, 995, 996, "0", 998, 999, 1000, 1001, 1002]
627+
18 | ["0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 492, 493, 494, 495, 496, "0", 498, 499, 500, 501, 502, 992, 993, 994, 995, 996, "0", 998, 999, 1000, 1001, 1002]
628+
19 | ["0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 492, 493, 494, 495, 496, "0", 498, 499, 500, 501, 502, 992, 993, 994, 995, 996, "0", 998, 999, 1000, 1001, 1002]
629+
20 | ["0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 492, 493, 494, 495, 496, "0", 498, 499, 500, 501, 502, 992, 993, 994, 995, 996, "0", 998, 999, 1000, 1001, 1002]
630+
(14 rows)
631+
584632
update test_jsonxa_arr set js = json_modify(js, insert '$[1000003 to 1000005]' = '0');
585633
select id, json_query(js, '$[1000000 to 1000010]' with wrapper) from test_jsonxa_arr order by id;
586634
id | json_query
@@ -601,3 +649,97 @@ select id, json_query(js, '$[1000000 to 1000010]' with wrapper) from test_jsonxa
601649
20 | [999997, 999998, 999999, "0", 1000000, "0", 1000001, "0", 1000002, 1000003, 1000004]
602650
(14 rows)
603651

652+
truncate test_jsonxa_arr;
653+
insert into test_jsonxa_arr
654+
select i, (select jsonb_agg(j) from generate_series(1, (2 ^ i)::int) j)
655+
from generate_series(7, 20) i;
656+
update test_jsonxa_arr set js = json_modify(js, remove '$[0 to 10]');
657+
select id, json_query(js, '$[0 to 20]' with wrapper) from test_jsonxa_arr order by id;
658+
id | json_query
659+
----+--------------------------------------------------------------------------------------
660+
7 | [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32]
661+
8 | [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32]
662+
9 | [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32]
663+
10 | [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32]
664+
11 | [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32]
665+
12 | [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32]
666+
13 | [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32]
667+
14 | [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32]
668+
15 | [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32]
669+
16 | [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32]
670+
17 | [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32]
671+
18 | [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32]
672+
19 | [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32]
673+
20 | [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32]
674+
(14 rows)
675+
676+
update test_jsonxa_arr set js = json_modify(js, remove '$[20 to 200]');
677+
select id, json_query(js, '$[0 to 30]' with wrapper) from test_jsonxa_arr order by id;
678+
id | json_query
679+
----+-----------------------------------------------------------------------------------------------------------------------------------------
680+
7 | [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31]
681+
8 | [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223]
682+
9 | [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223]
683+
10 | [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223]
684+
11 | [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223]
685+
12 | [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223]
686+
13 | [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223]
687+
14 | [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223]
688+
15 | [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223]
689+
16 | [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223]
690+
17 | [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223]
691+
18 | [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223]
692+
19 | [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223]
693+
20 | [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223]
694+
(14 rows)
695+
696+
update test_jsonxa_arr set js = json_modify(js, remove '$[30 to 100000]');
697+
select id, json_query(js, '$[0 to 40]' with wrapper) from test_jsonxa_arr order by id;
698+
id | json_query
699+
----+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
700+
7 | [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31]
701+
8 | [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222]
702+
9 | [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222]
703+
10 | [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222]
704+
11 | [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222]
705+
12 | [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222]
706+
13 | [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222]
707+
14 | [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222]
708+
15 | [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222]
709+
16 | [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222]
710+
17 | [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 100194, 100195, 100196, 100197, 100198, 100199, 100200, 100201, 100202, 100203, 100204]
711+
18 | [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 100194, 100195, 100196, 100197, 100198, 100199, 100200, 100201, 100202, 100203, 100204]
712+
19 | [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 100194, 100195, 100196, 100197, 100198, 100199, 100200, 100201, 100202, 100203, 100204]
713+
20 | [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 100194, 100195, 100196, 100197, 100198, 100199, 100200, 100201, 100202, 100203, 100204]
714+
(14 rows)
715+
716+
-- test vacuum full
717+
truncate test_jsonxa_arr;
718+
insert into test_jsonxa_arr
719+
select i, (select jsonb_agg(j) from generate_series(1, (2 ^ i)::int) j)
720+
from generate_series(7, 20) i;
721+
update test_jsonxa_arr set js = json_modify(js, set '$[1, 101, 201, 301, 401, 501, 1001, 1501, 2001, 3001, 5001]' = '0');
722+
select format('vacuum full pg_toast.pg_toast_%s', 'test_jsonxa_arr'::regclass::oid)
723+
\gexec
724+
vacuum full pg_toast.pg_toast_16461
725+
WARNING: skipping "pg_toast_16461" --- VACUUM FULL is disabled by toaster
726+
vacuum full test_jsonxa_arr;
727+
select id, json_query(js, '$[0 to 2, 100 to 102, 200 to 202, 300 to 302, 400 to 402, 500 to 502, 1000 to 1002, 1500 to 1502, 2000 to 2002, 3000 to 3002, 5000 to 5002]' with wrapper) from test_jsonxa_arr order by id;
728+
id | json_query
729+
----+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
730+
7 | [1, "0", 3, 101, "0", 103, null, "0", null, null, "0", null, null, "0", null, null, "0", null, null, "0", null, null, "0", null, null, "0", null, null, "0", null, null, "0"]
731+
8 | [1, "0", 3, 101, "0", 103, 201, "0", 203, null, "0", null, null, "0", null, null, "0", null, null, "0", null, null, "0", null, null, "0", null, null, "0", null, null, "0"]
732+
9 | [1, "0", 3, 101, "0", 103, 201, "0", 203, 301, "0", 303, 401, "0", 403, 501, "0", 503, null, "0", null, null, "0", null, null, "0", null, null, "0", null, null, "0"]
733+
10 | [1, "0", 3, 101, "0", 103, 201, "0", 203, 301, "0", 303, 401, "0", 403, 501, "0", 503, 1001, "0", 1003, null, "0", null, null, "0", null, null, "0", null, null, "0"]
734+
11 | [1, "0", 3, 101, "0", 103, 201, "0", 203, 301, "0", 303, 401, "0", 403, 501, "0", 503, 1001, "0", 1003, 1501, "0", 1503, 2001, "0", 2003, null, "0", null, null, "0"]
735+
12 | [1, "0", 3, 101, "0", 103, 201, "0", 203, 301, "0", 303, 401, "0", 403, 501, "0", 503, 1001, "0", 1003, 1501, "0", 1503, 2001, "0", 2003, 3001, "0", 3003, null, "0"]
736+
13 | [1, "0", 3, 101, "0", 103, 201, "0", 203, 301, "0", 303, 401, "0", 403, 501, "0", 503, 1001, "0", 1003, 1501, "0", 1503, 2001, "0", 2003, 3001, "0", 3003, 5001, "0", 5003]
737+
14 | [1, "0", 3, 101, "0", 103, 201, "0", 203, 301, "0", 303, 401, "0", 403, 501, "0", 503, 1001, "0", 1003, 1501, "0", 1503, 2001, "0", 2003, 3001, "0", 3003, 5001, "0", 5003]
738+
15 | [1, "0", 3, 101, "0", 103, 201, "0", 203, 301, "0", 303, 401, "0", 403, 501, "0", 503, 1001, "0", 1003, 1501, "0", 1503, 2001, "0", 2003, 3001, "0", 3003, 5001, "0", 5003]
739+
16 | [1, "0", 3, 101, "0", 103, 201, "0", 203, 301, "0", 303, 401, "0", 403, 501, "0", 503, 1001, "0", 1003, 1501, "0", 1503, 2001, "0", 2003, 3001, "0", 3003, 5001, "0", 5003]
740+
17 | [1, "0", 3, 101, "0", 103, 201, "0", 203, 301, "0", 303, 401, "0", 403, 501, "0", 503, 1001, "0", 1003, 1501, "0", 1503, 2001, "0", 2003, 3001, "0", 3003, 5001, "0", 5003]
741+
18 | [1, "0", 3, 101, "0", 103, 201, "0", 203, 301, "0", 303, 401, "0", 403, 501, "0", 503, 1001, "0", 1003, 1501, "0", 1503, 2001, "0", 2003, 3001, "0", 3003, 5001, "0", 5003]
742+
19 | [1, "0", 3, 101, "0", 103, 201, "0", 203, 301, "0", 303, 401, "0", 403, 501, "0", 503, 1001, "0", 1003, 1501, "0", 1503, 2001, "0", 2003, 3001, "0", 3003, 5001, "0", 5003]
743+
20 | [1, "0", 3, 101, "0", 103, 201, "0", 203, 301, "0", 303, 401, "0", 403, 501, "0", 503, 1001, "0", 1003, 1501, "0", 1503, 2001, "0", 2003, 3001, "0", 3003, 5001, "0", 5003]
744+
(14 rows)
745+

0 commit comments

Comments
 (0)