BUG #5900: Coredump on executing query - Mailing list pgsql-bugs

From Sergey Aleynikov
Subject BUG #5900: Coredump on executing query
Date
Msg-id 201102251211.p1PCB8Vo083286@wwwmaster.postgresql.org
Whole thread Raw
Responses Re: BUG #5900: Coredump on executing query  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-bugs
The following bug has been logged online:

Bug reference:      5900
Logged by:          Sergey Aleynikov
Email address:      sergey.aleynikov@gmail.com
PostgreSQL version: 8.4.1
Operating system:   FreeBSD 7.3-STABLE amd64
Description:        Coredump on executing query
Details:

I've a setup with 'auto_explain' enabled:

shared_preload_libraries = 'auto_explain'
custom_variable_classes = 'auto_explain'
auto_explain.log_min_duration = '3s'
auto_explain.log_nested_statements = true

Yesterday i've got a non-repeatable database server crash with following
messages in server log:

<start of normal query explain output>
Feb 24 17:44:25 sigeon postgres[91789]: [5-28]
         ->  Index Scan using ind_log_1573_reversed on logs_1573 logs
(cost=0.00..
Feb 24 17:44:25 sigeon postgres[91789]: [5-29]
               Index Cond: (opcode = 2302)
Feb 24 17:44:25 sigeon postgres[91789]: [5-30]                            ->
 Index Scan using "ind_users_modiifers_u+mod" on users_modifiers
(cost=0.00..4.15
Feb 24 17:44:25 sigeon postgres[91789]: [5-31]
   Index Cond: ((users_modifiers.uid = public.logs.uid) AND
(users_modifiers.modifi
Feb 24 17:44:25 sigeon postgres[91789]: [5-32]                      ->
Index Scan using pkey_usersinfo on users_info  (cost=0.00..4.20 rows=1
width=42)
Feb 24 17:44:25 sigeon postgres[91789]: [5-33]
Index Cond: (users_info.uid = users_modifiers.uid)
Feb 24 17:44:25 sigeon postgres[91789]: [5-34]
Filter: ((users_info.regdate >= $1) AND (users_info.regdate < $2))
Feb 24 17:44:25 sigeon postgres[91789]: [5-35] CONTEXT:  PL/pgSQL function
"get_register_leveled_stats" line 3 at RETURN QUERY
Feb 24 17:44:25 sigeon postgres[91789]: [5-36] STATEMENT:  SELECT * FROM
get_register_leveled_stats('02/24/11 00:00:00','02/25/11 00:00:00');
Feb 24 17:44:28 sigeon postgres[1166]: [5-1] LOG:  server process (PID
91789) was terminated by signal 11: Segmentation fault
Feb 24 17:44:28 sigeon postgres[1166]: [6-1] LOG:  terminating any other
active server processes
Feb 24 17:44:28 sigeon postgres[92550]: [7-1] FATAL:  the database system is
in recovery mode
Feb 24 17:44:28 sigeon postgres[1166]: [7-1] LOG:  archiver process (PID
1171) exited with exit code 1

Backtrace is:

(gdb) bt
#0  0x000000000060bf79 in quote_identifier ()
#1  0x00000000004ed45c in explain_outNode ()
#2  0x00000000004ee253 in ExplainPrintPlan ()
#3  0x000000080120112a in explain_ExecutorEnd () from
/usr/local/pgsql/lib/auto_explain.so
#4  0x00000000004fa3cf in PortalCleanup ()
#5  0x000000000067389a in PortalDrop ()
#6  0x00000000005bf2e9 in exec_simple_query ()
#7  0x00000000005bffd7 in PostgresMain ()
#8  0x0000000000599287 in ServerLoop ()
#9  0x0000000000599f7e in PostmasterMain ()
#10 0x000000000054ce64 in main ()

Since this is non-repeatable crash (this is common statistical query, run
tens times a day), i can't make a debug build of PG to show more info.
Executed query (get_register_leveled_stats) was following:

CREATE OR REPLACE FUNCTION get_register_leveled_stats(_from timestamp
without time zone, _to timestamp without time zone) RETURNS setof
f_grls_result AS
$BODY$
begin

return query
    select z.*, z.a + z.b + z.c + z.d + z.e from (
        select sum(other)::integer as a, sum(vk)::integer as b,
sum(vk_ref)::integer as c, sum(mailru)::integer as d, sum(od)::integer as e,
value::integer
            from (
                select     uid,
                    case when eid is null and mlid is null then 1 else 0 end as other,
                    case when eid is not null and net = 0 and referral is null then 1 else
0 end as vk,
                    case when eid is not null and net = 0  and referral is not null then 1
else 0 end as vk_ref,
                    case when eid is not null and net = 12  then 1 else 0 end as od,
                    case when mlid is not null then 1 else 0 end as mailru
                        from users_info
                    where regdate >= _from and regdate < _to
            ) z
            inner join users_modifiers on (users_modifiers.uid = z.uid)
            where     modifiyer = 808
                and origin = 239
            group by value
            order by value asc
    ) z
;

end
$BODY$
  LANGUAGE 'plpgsql' stable;

pgsql-bugs by date:

Previous
From: Jakub Ouhrabka
Date:
Subject: Corrupted index on 9.0.3 streaming hot standby
Next
From: Merlin Moncure
Date:
Subject: Re: Function trunc() behaves in unexpected manner with different data types