@@ -345,3 +345,259 @@ select id, js->'c'->0->>'a' from test_jsonbz_arr order by id;
345345 19 | eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
346346(20 rows)
347347
348+ create table test_jsonxa_arr (id int, js jsonb toaster jsonb_toaster);
349+ insert into test_jsonxa_arr
350+ select i, (select jsonb_agg(j) from generate_series(1, (2 ^ i)::int) j)
351+ from generate_series(7, 20) i;
352+ select id, pg_column_size(js) from test_jsonxa_arr order by id;
353+ id | pg_column_size
354+ ----+----------------
355+ 7 | 1544
356+ 8 | 894
357+ 9 | 1760
358+ 10 | 108
359+ 11 | 168
360+ 12 | 288
361+ 13 | 538
362+ 14 | 1168
363+ 15 | 111051
364+ 16 | 222124
365+ 17 | 444295
366+ 18 | 888615
367+ 19 | 1777262
368+ 20 | 3554747
369+ (14 rows)
370+
371+ select id, (select count(*) from jsonb_array_elements(js)) from test_jsonxa_arr order by id;
372+ id | count
373+ ----+---------
374+ 7 | 128
375+ 8 | 256
376+ 9 | 512
377+ 10 | 1024
378+ 11 | 2048
379+ 12 | 4096
380+ 13 | 8192
381+ 14 | 16384
382+ 15 | 32768
383+ 16 | 65536
384+ 17 | 131072
385+ 18 | 262144
386+ 19 | 524288
387+ 20 | 1048576
388+ (14 rows)
389+
390+ select id, js -> 100 from test_jsonxa_arr order by id;
391+ id | ?column?
392+ ----+----------
393+ 7 | 101
394+ 8 | 101
395+ 9 | 101
396+ 10 | 101
397+ 11 | 101
398+ 12 | 101
399+ 13 | 101
400+ 14 | 101
401+ 15 | 101
402+ 16 | 101
403+ 17 | 101
404+ 18 | 101
405+ 19 | 101
406+ 20 | 101
407+ (14 rows)
408+
409+ select id, js -> 200 from test_jsonxa_arr order by id;
410+ id | ?column?
411+ ----+----------
412+ 7 |
413+ 8 | 201
414+ 9 | 201
415+ 10 | 201
416+ 11 | 201
417+ 12 | 201
418+ 13 | 201
419+ 14 | 201
420+ 15 | 201
421+ 16 | 201
422+ 17 | 201
423+ 18 | 201
424+ 19 | 201
425+ 20 | 201
426+ (14 rows)
427+
428+ select id, js -> (jsonb_array_length(js) - 1) from test_jsonxa_arr order by id;
429+ id | ?column?
430+ ----+----------
431+ 7 | 128
432+ 8 | 256
433+ 9 | 512
434+ 10 | 1024
435+ 11 | 2048
436+ 12 | 4096
437+ 13 | 8192
438+ 14 | 16384
439+ 15 | 32768
440+ 16 | 65536
441+ 17 | 131072
442+ 18 | 262144
443+ 19 | 524288
444+ 20 | 1048576
445+ (14 rows)
446+
447+ select id, json_query(js, '$[0 to 10]' with wrapper) from test_jsonxa_arr order by id;
448+ id | json_query
449+ ----+-------------------------------------
450+ 7 | [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
451+ 8 | [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
452+ 9 | [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
453+ 10 | [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
454+ 11 | [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
455+ 12 | [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
456+ 13 | [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
457+ 14 | [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
458+ 15 | [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
459+ 16 | [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
460+ 17 | [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
461+ 18 | [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
462+ 19 | [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
463+ 20 | [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
464+ (14 rows)
465+
466+ update test_jsonxa_arr set js = jsonb_set(js, '{0}', '0');
467+ select id, (select count(*) from jsonb_array_elements(js)) from test_jsonxa_arr order by id;
468+ id | count
469+ ----+---------
470+ 7 | 128
471+ 8 | 256
472+ 9 | 512
473+ 10 | 1024
474+ 11 | 2048
475+ 12 | 4096
476+ 13 | 8192
477+ 14 | 16384
478+ 15 | 32768
479+ 16 | 65536
480+ 17 | 131072
481+ 18 | 262144
482+ 19 | 524288
483+ 20 | 1048576
484+ (14 rows)
485+
486+ select id, js -> 0 from test_jsonxa_arr order by id;
487+ id | ?column?
488+ ----+----------
489+ 7 | 0
490+ 8 | 0
491+ 9 | 0
492+ 10 | 0
493+ 11 | 0
494+ 12 | 0
495+ 13 | 0
496+ 14 | 0
497+ 15 | 0
498+ 16 | 0
499+ 17 | 0
500+ 18 | 0
501+ 19 | 0
502+ 20 | 0
503+ (14 rows)
504+
505+ select id, js -> 100 from test_jsonxa_arr order by id;
506+ id | ?column?
507+ ----+----------
508+ 7 | 101
509+ 8 | 101
510+ 9 | 101
511+ 10 | 101
512+ 11 | 101
513+ 12 | 101
514+ 13 | 101
515+ 14 | 101
516+ 15 | 101
517+ 16 | 101
518+ 17 | 101
519+ 18 | 101
520+ 19 | 101
521+ 20 | 101
522+ (14 rows)
523+
524+ update test_jsonxa_arr set js = json_modify(js, set '$[0 to 3]' = '0');
525+ select id, json_query(js, '$[0 to 10]' with wrapper) from test_jsonxa_arr order by id;
526+ id | json_query
527+ ----+---------------------------------------------
528+ 7 | ["0", "0", "0", "0", 5, 6, 7, 8, 9, 10, 11]
529+ 8 | ["0", "0", "0", "0", 5, 6, 7, 8, 9, 10, 11]
530+ 9 | ["0", "0", "0", "0", 5, 6, 7, 8, 9, 10, 11]
531+ 10 | ["0", "0", "0", "0", 5, 6, 7, 8, 9, 10, 11]
532+ 11 | ["0", "0", "0", "0", 5, 6, 7, 8, 9, 10, 11]
533+ 12 | ["0", "0", "0", "0", 5, 6, 7, 8, 9, 10, 11]
534+ 13 | ["0", "0", "0", "0", 5, 6, 7, 8, 9, 10, 11]
535+ 14 | ["0", "0", "0", "0", 5, 6, 7, 8, 9, 10, 11]
536+ 15 | ["0", "0", "0", "0", 5, 6, 7, 8, 9, 10, 11]
537+ 16 | ["0", "0", "0", "0", 5, 6, 7, 8, 9, 10, 11]
538+ 17 | ["0", "0", "0", "0", 5, 6, 7, 8, 9, 10, 11]
539+ 18 | ["0", "0", "0", "0", 5, 6, 7, 8, 9, 10, 11]
540+ 19 | ["0", "0", "0", "0", 5, 6, 7, 8, 9, 10, 11]
541+ 20 | ["0", "0", "0", "0", 5, 6, 7, 8, 9, 10, 11]
542+ (14 rows)
543+
544+ update test_jsonxa_arr set js = json_modify(js, insert '$[200 to 203]' = '0');
545+ select id, json_query(js, '$[200 to 210]' with wrapper) from test_jsonxa_arr order by id;
546+ id | json_query
547+ ----+---------------------------------------------------------
548+ 7 | ["0", "0", "0", "0"]
549+ 8 | ["0", 201, "0", 202, "0", 203, "0", 204, 205, 206, 207]
550+ 9 | ["0", 201, "0", 202, "0", 203, "0", 204, 205, 206, 207]
551+ 10 | ["0", 201, "0", 202, "0", 203, "0", 204, 205, 206, 207]
552+ 11 | ["0", 201, "0", 202, "0", 203, "0", 204, 205, 206, 207]
553+ 12 | ["0", 201, "0", 202, "0", 203, "0", 204, 205, 206, 207]
554+ 13 | ["0", 201, "0", 202, "0", 203, "0", 204, 205, 206, 207]
555+ 14 | ["0", 201, "0", 202, "0", 203, "0", 204, 205, 206, 207]
556+ 15 | ["0", 201, "0", 202, "0", 203, "0", 204, 205, 206, 207]
557+ 16 | ["0", 201, "0", 202, "0", 203, "0", 204, 205, 206, 207]
558+ 17 | ["0", 201, "0", 202, "0", 203, "0", 204, 205, 206, 207]
559+ 18 | ["0", 201, "0", 202, "0", 203, "0", 204, 205, 206, 207]
560+ 19 | ["0", 201, "0", 202, "0", 203, "0", 204, 205, 206, 207]
561+ 20 | ["0", 201, "0", 202, "0", 203, "0", 204, 205, 206, 207]
562+ (14 rows)
563+
564+ update test_jsonxa_arr set js = json_modify(js, set '$[0 to 300]' = '0');
565+ select id, json_query(js, '$[290 to 310]' with wrapper) from test_jsonxa_arr order by id;
566+ id | json_query
567+ ----+-----------------------------------------------------------------------------------------------------------
568+ 7 | ["0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0"]
569+ 8 | ["0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0"]
570+ 9 | ["0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 298, 299, 300, 301, 302, 303, 304, 305, 306, 307]
571+ 10 | ["0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 298, 299, 300, 301, 302, 303, 304, 305, 306, 307]
572+ 11 | ["0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 298, 299, 300, 301, 302, 303, 304, 305, 306, 307]
573+ 12 | ["0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 298, 299, 300, 301, 302, 303, 304, 305, 306, 307]
574+ 13 | ["0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 298, 299, 300, 301, 302, 303, 304, 305, 306, 307]
575+ 14 | ["0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 298, 299, 300, 301, 302, 303, 304, 305, 306, 307]
576+ 15 | ["0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 298, 299, 300, 301, 302, 303, 304, 305, 306, 307]
577+ 16 | ["0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 298, 299, 300, 301, 302, 303, 304, 305, 306, 307]
578+ 17 | ["0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 298, 299, 300, 301, 302, 303, 304, 305, 306, 307]
579+ 18 | ["0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 298, 299, 300, 301, 302, 303, 304, 305, 306, 307]
580+ 19 | ["0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 298, 299, 300, 301, 302, 303, 304, 305, 306, 307]
581+ 20 | ["0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", 298, 299, 300, 301, 302, 303, 304, 305, 306, 307]
582+ (14 rows)
583+
584+ update test_jsonxa_arr set js = json_modify(js, insert '$[1000003 to 1000005]' = '0');
585+ select id, json_query(js, '$[1000000 to 1000010]' with wrapper) from test_jsonxa_arr order by id;
586+ id | json_query
587+ ----+--------------------------------------------------------------------------------------
588+ 7 | [null, null, null, "0", "0", "0"]
589+ 8 | [null, null, null, "0", "0", "0"]
590+ 9 | [null, null, null, "0", "0", "0"]
591+ 10 | [null, null, null, "0", "0", "0"]
592+ 11 | [null, null, null, "0", "0", "0"]
593+ 12 | [null, null, null, "0", "0", "0"]
594+ 13 | [null, null, null, "0", "0", "0"]
595+ 14 | [null, null, null, "0", "0", "0"]
596+ 15 | [null, null, null, "0", "0", "0"]
597+ 16 | [null, null, null, "0", "0", "0"]
598+ 17 | [null, null, null, "0", "0", "0"]
599+ 18 | [null, null, null, "0", "0", "0"]
600+ 19 | [null, null, null, "0", "0", "0"]
601+ 20 | [999997, 999998, 999999, "0", 1000000, "0", 1000001, "0", 1000002, 1000003, 1000004]
602+ (14 rows)
603+
0 commit comments