Just to let everyone know how I've sorted my problem.  Firstly i've added 
one_time to the router, but I've also changed my psql select function to 
avoid a race condition and also ensure a consistant select.

my router has the line

  data    = ${lookup pgsql{select * from mailing_list_send('${quote_pgsql:
$local_part}','${quote_pgsql:$sender_address}','${quote_pgsql:
$h_subject:}','${quote_pgsql:$message_id}')}}

and in postgresql I have the following function.

create or replace function mailing_list_send(list text, sender text, subject 
text, messageId text) returns setof varchar as $$
DECLARE
  recordCount int4;
BEGIN
  select into recordCount count(ml_id) from mailing_list_log where ml_id = 
messageId;
  IF ( recordCount = 0) THEN
    insert into mailing_list_log (ml_name, ml_recipient, ml_sender, 
ml_subject, ml_id)
       select list, ml_recipient, sender, subject, messageId from 
mailing_list_recipients
         where ml_name = list and ml_disabled is null;
  END IF;
  return query select ml_recipient from mailing_list_log
       where ml_id = messageId;
  return;
END;
$$
    LANGUAGE plpgsql;

I've also added the 'one_time' statement to the router. I know it's belts and 
braces but it seems to do the job.
-- 
Gary Stainburn
Group I.T. Manager
Ringways Garages
http://www.ringways.co.uk 

-- 
## List details at https://lists.exim.org/mailman/listinfo/exim-users
## Exim details at http://www.exim.org/
## Please use the Wiki with this list - http://wiki.exim.org/

Reply via email to