On Fri, May 9, 2025 at 7:43 PM Aleksander Alekseev <aleksan...@timescale.com> wrote:
> Hi Stepan, > > > Sorry for the noise — I'm resending the patch because I noticed a > compiler warning related to mixed declarations and code, which I’ve now > fixed. > > > > Apologies for the oversight in the previous submission. > > Thanks for the patch. > > As Kirill pointed out above, it would be nice if you could prove that > your implementation is actually faster. I think something like a > simple micro-benchmark will do. > > -- > Best regards, > Aleksander Alekseev > Hi, Thanks for the feedback. I’ve done a simple micro-benchmark using PL/pgSQL with a large escaped input string (\\123 repeated 100,000 times), converted to bytea in a loop: DO $$ DECLARE start_time TIMESTAMP; end_time TIMESTAMP; i INTEGER; dummy BYTEA; input TEXT := repeat(E'\\123', 100000); elapsed_ms DOUBLE PRECISION; BEGIN start_time := clock_timestamp(); FOR i IN 1..1000 LOOP dummy := input::bytea; END LOOP; end_time := clock_timestamp(); elapsed_ms := EXTRACT(EPOCH FROM end_time - start_time) * 1000; RAISE NOTICE 'Average time per call: % ms', elapsed_ms / 1000; END $$; Here are the results from NOTICE output: *Without patch:* NOTICE: Average time per call: 0.49176600000000004 ms NOTICE: Average time per call: 0.47658999999999996 ms *With patch:* NOTICE: Average time per call: 0.468231 ms NOTICE: Average time per call: 0.463909 ms The gain is small but consistent. Let me know if a more rigorous benchmark would be useful. Best regards, Stepan Neretin