I got the following error (v8.1.4):
PANIC: ERRORDATA_STACK_SIZE exceeded
There was a discussion about this same error on the list 3 days ago.
However, it looks like I'm having a different problem.
I have an ON INSERT rule that executes 3 functions similar to the
following function:
CREATE OR REPLACE FUNCTION get_text_id(TEXT) RETURNS INT
VOLATILE LANGUAGE plpgsql AS
$get_text_id$
DECLARE
text_id INT;
BEGIN
LOOP
SELECT INTO text_id id FROM textid WHERE name=$1;
IF FOUND THEN
RETURN text_id;
END IF;
BEGIN
INSERT INTO textid(name) VALUES($1);
RETURN CURRVAL('textid_id_seq');
EXCEPTION WHEN unique_violation THEN
END;
END LOOP;
END;
$get_text_id$;
And I received the error when I inserted about 2M records. I assume it's
this function. Would this be expected to cause that problem? Is there an
easier way to do what I need? How can I try to be safe from this problem
in the future (at least so it doesn't kill other active connections)?
I have another simpler function which I don't think would be the
problem:
CREATE OR REPLACE FUNCTION value(TEXT) RETURNS INT
STABLE LANGUAGE plpgsql AS
$$
DECLARE
value INT;
BEGIN
SELECT INTO value my_value FROM my_table
WHERE name = $1;
IF FOUND THEN
RETURN value;
ELSE
RAISE EXCEPTION 'Invalid name';
END IF;
END;
$$;
Also, I am inserting the records from a temporary table that was created
in the same transaction, if that makes any difference.
Regards,
Jeff Davis