Em seg., 26 de fev. de 2024 às 02:28, Michael Paquier <mich...@paquier.xyz>
escreveu:

> On Thu, Feb 22, 2024 at 04:42:37PM -0300, Ranier Vilela wrote:
> > Can you share exactly script used to create a table?
>
> Stressing the internals of array_out() for the area of the patch is
> not that difficult, as we want to quote each element that's returned
> in output.
>
> The trick is to have the following to stress the second quoting loop a
> maximum:
> - a high number of rows.
> - a high number of items in the arrays.
> - a *minimum* number of characters in each element of the array, with
> characters that require quoting.
>
> The best test case I can think of to demonstrate the patch would be
> something like that (adjust rows and elts as you see fit):
> -- Number of rows
> \set rows 6
> -- Number of elements
> \set elts 4
> create table tab as
>   with data as (
>     select array_agg(a) as array
>       from (
>         select '{'::text
>           from generate_series(1, :elts) as int(a)) as index(a))
>   select data.array from data, generate_series(1,:rows);
>
> Then I get:
>        array
> -------------------
>  {"{","{","{","{"}
>  {"{","{","{","{"}
>  {"{","{","{","{"}
>  {"{","{","{","{"}
>  {"{","{","{","{"}
>  {"{","{","{","{"}
> (6 rows)
>
> With "\set rows 100000" and "\set elts 10000", giving 100MB of data
> with 100k rows with 10k elements each, I get for HEAD when data is in
> shared buffers:
> =# copy tab to '/dev/null';
> COPY 100000
> Time: 48620.927 ms (00:48.621)
> And with v3:
> =# copy tab to '/dev/null';
> COPY 100000
> Time: 47993.183 ms (00:47.993)
>
Thanks Michael, for the script.

It is easier to make comparisons, using the exact same script.

best regards,
Ranier Vilela

Reply via email to