Backend crash with user defined aggregate

Поиск
Список
Период
Сортировка
От Ron Mayer
Тема Backend crash with user defined aggregate
Дата
Msg-id Pine.LNX.4.58.0509231323390.1550@greenie.cheapcomplexdevices.com
обсуждение исходный текст
Ответы Re: Backend crash with user defined aggregate  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-general

I tried making an aggregate function that concatenates
any non-null strings it encounters, as shown below.

The function works fine on small tables; but when I run
it on one of my larger tables it seems to me that it
crashes the backend - though I don't see anything obvious
in the log.


According to 'top', the postmaster grows pretty quickly
so perhaps it ran out of memory?   The query I ran is
doing a group-by and no individual value in the group
by clause should have that big a result; so hypothetically
it seems it wouldn't need to put everything in memory
if it sorted them first.

Any workarounds or other clever ways of doing this
kind of aggregation?  I guess a stored procedure that
reads one group at a time?

   Thanks in advance,
   Ron

------------------------------------------------------------
--- The definition of my aggregte
------------------------------------------------------------
CREATE OR REPLACE FUNCTION nonull_append_strings (
        text, text )
RETURNS text AS '
SELECT CASE WHEN $1 IS NULL THEN $2
        WHEN $2 IS NULL THEN $1
        ELSE $1 || '' '' || $2
        END;
' LANGUAGE sql IMMUTABLE;

CREATE OPERATOR ||+ (
        LEFTARG = TEXT,
        RIGHTARG = TEXT,
        PROCEDURE = nonull_append_strings
);

create aggregate strcat_agg (
    sfunc = nonull_append_strings,
    basetype = text,
    stype = text
);



------------------------------------------------------------
--- Example using the function
------------------------------------------------------------
fli=#
fli=#   create table new_keywords as
        select ext_doc_id,strcat_agg(nam)||+strcat_agg(val)
        from facet_raw group by ext_doc_id;
FATAL:  terminating connection due to administrator command
CONTEXT:  SQL function "nonull_append_strings" statement 1
server closed the connection unexpectedly
        This probably means the server terminated abnormally
        before or while processing the request.
The connection to the server was lost. Attempting reset: Succeeded.
fli=#


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

Предыдущее
От: Bruce Momjian
Дата:
Сообщение: Re: Lines of code in PG 8.0 & 8.1?
Следующее
От: Robert Treat
Дата:
Сообщение: Re: How many insert + update should one transaction