bad function lets postgres crash

Поиск
Список
Период
Сортировка
От Clemens Schwaighofer
Тема bad function lets postgres crash
Дата
Msg-id 468AEBA0.8070400@tequila.co.jp
обсуждение исходный текст
Ответы Re: bad function lets postgres crash  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-general
hi,

Although I do a lot with postgres, I am quite new to functions. So
yesterday I was playing around with a very simple one. Of course I did
something very stupid and created an "infinite loop" in the end.

My problem is, that this crashed one of my postgres server, but the
other just through an error with

"LOG:  autovacuum: processing database "adidas_myrunning"
ERROR:  stack depth limit exceeded
HINT:  Increase the configuration parameter "max_stack_depth".
CONTEXT:  SQL statement ..."

The one that crashed through out this:

"[2007-07-03 19:03:14 JST mtool@mailing_tool_live idle] LOG:  statement:
insert into mail_log (mailid, log_time_raw) values ('l617kuTu072790',
'Jul  2 17:31:33');
[2007-07-03 19:03:15 JST @ ] LOG:  server process (PID 10345) was
terminated by signal 11
[2007-07-03 19:03:15 JST @ ] LOG:  terminating any other active server
processes"

after that it restarted itself again.

The function I created was this:

CREATE OR REPLACE FUNCTION insert_mail_log() RETURNS "trigger"
  AS $$
  DECLARE
    myrec RECORD;
  BEGIN
    IF TG_OP = 'INSERT' THEN
        SELECT INTO myrec t.* FROM mail_log t WHERE t.log_time_raw =
NEW.log_time_raw AND t.mailid = NEW.mailid;
        IF NOT FOUND THEN
            INSERT INTO mail_log (ident, email, log_time_raw, log_time,
mail_host, dsn, status, relay, mailid, exported) VALUES (NEW.ident,
NEW.email, NEW.log_time_raw, NEW.log_time, NEW.mail_host, NEW.dsn,
NEW.status, NEW.relay, NEW.mailid, NEW.exported);
            RAISE EXCEPTION 'NOT FOUND INSERT';
            RETURN NEW;
        ELSE
            RAISE EXCEPTION 'FOUND UPDATE';
            RETURN NULL;
        END IF;
    END IF;
    RETURN NULL;
  END;
$$
  LANGUAGE plpgsql;

of course my logic flow was wrong, and an insert into the table where I
call this as an trigger is totaly stupid.

both servers are debian packages 8.1.9-1, but on the one that crashed I
increased the stack depth to 8192. Could it be that postgres ran out of
memory and terminated itself?

--
[ Clemens Schwaighofer                      -----=====:::::~ ]
[ TEQUILA\ Japan IT Group                                    ]
[                6-17-2 Ginza Chuo-ku, Tokyo 104-8167, JAPAN ]
[ Tel: +81-(0)3-3545-7703            Fax: +81-(0)3-3545-7343 ]
[ http://www.tequila.co.jp                                   ]

Вложения

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

Предыдущее
От: Raymond O'Donnell
Дата:
Сообщение: Mugs 'n stuff
Следующее
От: Tom Lane
Дата:
Сообщение: Re: bad function lets postgres crash