Measurements for the reply to Nikolay, re-run 2026-11-04. Builds, all --enable-cassert --enable-debug, -O2: r18 18.6 (724edf9bde9) r19v5 REL_19_STABLE a8e54f3dad3 + v5-0001 + v5-0002 r19nik REL_19_STABLE a8e54f3dad3 + v5 + Nikolay's nocfbot patch mv5 master 73a28d2733a + v5-0001 + v5-0002 r19B REL_19_STABLE a8e54f3dad3 + v5 + every array mutable (as in 18); a measurement build only, not a proposal Upstream heads as fetched from git.postgresql.org on 2026-11-04. 1. repro-arrays.sql.txt: CREATE INDEX on json_array(v RETURNING jsonb), then extra_float_digits = 0 (bytea: bytea_output = escape). stale N/M: index scan finds N rows, seq scan M; ok N/M: they agree. 'domain-array' is d[] with d a domain over the type, '2d-array' a two-dimensional array, 'domain-over-array' a domain over type[]. case r18 r19v5 r19nik mv5 r19B float8/array rejected stale 0/1 rejected rejected rejected float8/domain-array rejected stale 0/1 rejected rejected rejected float8/2d-array rejected stale 0/1 rejected rejected rejected float8/domain-over-array rejected stale 0/1 rejected rejected rejected float8/scalar stale 0/1 stale 0/1 stale 0/1 rejected stale 0/1 float4/array rejected stale 0/1 rejected rejected rejected float4/domain-array rejected stale 0/1 rejected rejected rejected float4/2d-array rejected stale 0/1 rejected rejected rejected float4/domain-over-array rejected stale 0/1 rejected rejected rejected float4/scalar stale 0/1 stale 0/1 stale 0/1 rejected stale 0/1 bytea/array rejected stale 0/1 rejected rejected rejected bytea/domain-array rejected stale 0/1 rejected rejected rejected bytea/2d-array rejected stale 0/1 rejected rejected rejected bytea/domain-over-array rejected stale 0/1 rejected rejected rejected bytea/scalar stale 0/1 stale 0/1 stale 0/1 rejected stale 0/1 point/array rejected stale 0/1 rejected rejected rejected point/domain-array rejected stale 0/1 rejected rejected rejected point/2d-array rejected stale 0/1 rejected rejected rejected point/domain-over-array rejected stale 0/1 rejected rejected rejected point/scalar stale 0/1 stale 0/1 stale 0/1 rejected stale 0/1 box/array rejected stale 0/1 rejected rejected rejected box/domain-array rejected stale 0/1 rejected rejected rejected box/2d-array rejected stale 0/1 rejected rejected rejected box/domain-over-array rejected stale 0/1 rejected rejected rejected box/scalar stale 0/1 stale 0/1 stale 0/1 rejected stale 0/1 circle/array rejected stale 0/1 rejected rejected rejected circle/domain-array rejected stale 0/1 rejected rejected rejected circle/2d-array rejected stale 0/1 rejected rejected rejected circle/domain-over-array rejected stale 0/1 rejected rejected rejected circle/scalar stale 0/1 stale 0/1 stale 0/1 rejected stale 0/1 array cases (of 24): r18 0 stale, 24 rejected, 0 ok r19v5 24 stale, 0 rejected, 0 ok r19nik 0 stale, 24 rejected, 0 ok mv5 0 stale, 24 rejected, 0 ok r19B 0 stale, 24 rejected, 0 ok 2. The repro from the report, verbatim (nik-repro.sql): r18 CREATE INDEX rejected r19v5 index scan 0 (plan uses t_i: True), seq scan 1 r19nik CREATE INDEX rejected mv5 CREATE INDEX rejected 3. catalog.sql: built-in base types whose output function is IMMUTABLE on REL_19_STABLE and STABLE on master (12 of 70): box, bytea, circle, float4, float8, line, lseg, path, pg_brin_minmax_multi_summary (no array type), pg_mcv_list (no array type), point, polygon 4. gucprobe.sql.txt in the regression database (after make installcheck): the JSON text of every column of a built-in type, hashed with the defaults and under each setting. Types whose JSON changed: REL_19_STABLE + v5 (55 types sampled): box box_out IMMUTABLE extra_float_digits bytea byteaout IMMUTABLE bytea_output circle circle_out IMMUTABLE extra_float_digits double precision float8out IMMUTABLE extra_float_digits interval interval_out STABLE IntervalStyle line line_out IMMUTABLE extra_float_digits lseg lseg_out IMMUTABLE extra_float_digits money cash_out STABLE lc_monetary path path_out IMMUTABLE extra_float_digits point point_out IMMUTABLE extra_float_digits polygon poly_out IMMUTABLE extra_float_digits real float4out IMMUTABLE extra_float_digits timestamp with time zone timestamptz_out STABLE TimeZone (2702 columns, hashed with the defaults and under 14 settings; none missing) master + v5 (55 types sampled): box box_out STABLE extra_float_digits bytea byteaout STABLE bytea_output circle circle_out STABLE extra_float_digits double precision float8out STABLE extra_float_digits interval interval_out STABLE IntervalStyle line line_out STABLE extra_float_digits lseg lseg_out STABLE extra_float_digits money cash_out STABLE lc_monetary path path_out STABLE extra_float_digits point point_out STABLE extra_float_digits polygon poly_out STABLE extra_float_digits real float4out STABLE extra_float_digits timestamp with time zone timestamptz_out STABLE TimeZone (2704 columns, hashed with the defaults and under 14 settings; none missing) 5. blast.sql, CREATE INDEX on json_array(v RETURNING jsonb) for every built-in base, range and multirange type, their arrays, and a set of user-defined ones. Accepted / types tried: r18 58/330, r19v5 121/340, r19nik 110/340, mv5 97/342, r19B 63/340 accepted by r19v5, rejected by r19nik (11): box[], bytea[], circle[], double precision[], line[], lseg[], path[], point[], polygon[], real[], ub_dfloat8[] accepted by r19nik, rejected by r19v5 (0): (none) accepted by r18, rejected by r19nik (the same two as r19v5) (2): ub_enumc, ub_rangec accepted by r19nik, rejected by mv5 (13): box, bytea, circle, double precision, line, lseg, path, pg_brin_minmax_multi_summary, pg_mcv_list, point, polygon, real, ub_dfloat8 accepted by r19nik, rejected by r19B (47): "char"[], bigint[], bit varying[], bit[], boolean[], character varying[], character[], cid[], cidr[], gtsvector[], inet[], int2vector, int2vector[], int4multirange[], int4range[], int8multirange[], int8range[], integer[], json[], jsonb[], jsonpath[], macaddr8[], macaddr[], name[], numeric[], nummultirange[], numrange[], oid8[], oid[], oidvector, oidvector[], pg_lsn[], pg_snapshot[], refcursor[], smallint[], text[], tid[], time with time zone[], time without time zone[], tsquery[], tsvector[], txid_snapshot[], ub_dint[], uuid[], xid8[], xid[], xml[] accepted by r19B, rejected by r18 (types that exist in both) (6): int4multirange, int4range, int8multirange, int8range, nummultirange, numrange