Hi,
I am working on a plpgsql function that is not acting as I would hope.
I am working with the Postgres 9.3 beta load and would like to
solicit some feedback.
Looking at the outermost for loop of the function below, If I run this CTE query from the psql command line
I am returned what I expect for values for translator_id and the
Aggregating MIN functions. I restore the experimental data and now run the function.
In the context of this function I get a valid translator_id ,
But the MINed columns are NULL ????
The function later bombs on the insert statement as tid_seq and ws_grp_seq columns
Have a not null requirement.
Any thoughts ?
Thanks
Dave
The function basics are:
CREATE OR REPLACE FUNCTION admin.activate_translator_user (ws_id integer)
RETURNS void AS
$BODY$
DECLARE
drow admin.translator_member%ROWTYPE; -- deleted row holder
wsrow RECORD;
patt CHARACTER VARYING;
BEGIN
-- Remove current input ws_id subsection of the translator but grab some
-- sequenceing information from it.
FOR drow IN
WITH drows AS ( -- Runs as expected from psql command line
DELETE FROM admin.translator_member
WHERE tu_id = ws_id RETURNING *
)
SELECT translator_id, MIN(tid_seq)
AS tid_seq, MIN(ws_grp_seq) AS ws_grp_seq
FROM drows GROUP BY translator_id
LOOP
Raise notice ' TID_seq % WS_seq % TID % ', drow.tid_seq, drow.ws_grp_seq, drow.translator_id;
-- Replace the removed subsection of relevant translation sets.
FOR wsrow IN
SELECT * FROM admin.translator_user_mbr
WHERE tu_id = ws_id
ORDER BY obj_seq ASC
LOOP
-- On activation refresh the pattern content from the pattern
-- table if pattern_id is not zero.
IF wsrow.pattern_id IS NOT NULL AND wsrow.pattern_id != 0
THEN
SELECT pattern INTO patt FROM admin.pattern
WHERE pattern_id = wsrow.pattern_id;
ELSE
patt = 'NULL';
END IF;
INSERT INTO admin.translator_member (
"name", "tu_id", "translator_id",
"tid_seq", "ws_grp_seq", "obj_seq", …..
) VALUES (
NULL, wsrow."tu_id", drow."translator_id",
drow."tid_seq", drow."ws_grp_seq", wsrow."obj_seq",….. _);
END LOOP; -- wsrow
END LOOP; -- drow
END
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;