Re: Manipulating complex types as non-contiguous structures in-memory

Поиск
Список
Период
Сортировка
От Pavel Stehule
Тема Re: Manipulating complex types as non-contiguous structures in-memory
Дата
Msg-id CAFj8pRB-otCuSW4JMMAddwaEk9RnYuKjorjLdLtQM=QwzAs4mA@mail.gmail.com
обсуждение исходный текст
Ответ на Re: Manipulating complex types as non-contiguous structures in-memory  (Pavel Stehule <pavel.stehule@gmail.com>)
Ответы Re: Manipulating complex types as non-contiguous structures in-memory  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-hackers


2015-05-01 20:53 GMT+02:00 Pavel Stehule <pavel.stehule@gmail.com>:


2015-05-01 20:11 GMT+02:00 Tom Lane <tgl@sss.pgh.pa.us>:
Pavel Stehule <pavel.stehule@gmail.com> writes:
> I am looking on this patch, but it cannot be applied now.

> lxml2 -lssl -lcrypto -lrt -lcrypt -ldl -lm -o postgres
> utils/fmgrtab.o:(.rodata+0x2678): undefined reference to `array_append'
> utils/fmgrtab.o:(.rodata+0x2698): undefined reference to `array_prepend'

What are you trying to apply it to?  I see array_append() in
src/backend/utils/adt/array_userfuncs.c in HEAD.  Also, are
you checking the 1.1 version of the patch?

I tested old version. 1.1. looks well.

It is hard to believe how it is fast

I use buble sort for plpgsql benchmarking. Following variant is suboptimal (but it is perfect for this test)

CREATE OR REPLACE FUNCTION public.buble(a anyarray, OUT r anyarray)
 RETURNS anyarray
 LANGUAGE plpgsql
AS $function$
DECLARE
  aux r%type;
  sorted bool := false;
BEGIN
  r := a;
  WHILE NOT sorted
  LOOP
    sorted := true;
    FOR i IN array_lower(a,1) .. array_upper(a,1) - 1
    LOOP
      IF r[i] > r[i+1] THEN
        sorted := false;
        aux[1] := r[i];
        r[i] := r[i+1]; r[i+1] := aux[1];
      END IF;
    END LOOP;
  END LOOP;
END;
$function$

CREATE OR REPLACE FUNCTION public.array_generator(integer, anyelement, OUT r anyarray)
 RETURNS anyarray
 LANGUAGE plpgsql
AS $function$
BEGIN
  r := (SELECT ARRAY(SELECT random()*$2 FROM generate_series(1,$1)));
END;
$function$

Test for 3000 elements:

                   Original     Patch
Integer            55sec      8sec
Numeric        341sec      8sec

Quicksort is about 3x faster -- so a benefit of this patch is clear.

Regards

Pavel
 

Regards

Pavel
 

                        regards, tom lane


В списке pgsql-hackers по дате отправления:

Предыдущее
От: Pavel Stehule
Дата:
Сообщение: Re: Manipulating complex types as non-contiguous structures in-memory
Следующее
От: Tom Lane
Дата:
Сообщение: Re: Manipulating complex types as non-contiguous structures in-memory