Search Postgresql Archives

bad function lets postgres crash

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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                                   ]

Attachment: signature.asc
Description: OpenPGP digital signature


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux