I found the problem, and it is all my fault. I was calling the insert function with the wrong combination of parameters, so naturally it didn't find the item. It is working fine now, although I do think I needed to mark the function as VOLATILE, which I think helped.
> I moved the code in the function inline into the code, and I still cannot > find the newly inserted id the next time through the loop.
I suppose you use DBD::Pg, whose current default isolation transaction level is ``Serializable''
Don't know if it applies, but the Postgresql's documentation says this :
SERIALIZABLE
All statements of the current transaction can only see rows committed before the first query or data-modification statement was executed in this transaction. If a pattern of reads and writes among concurrent serializable transactions would create a situation which could not have occurred for any serial (one-at-a-time) execution of those transactions, one of them will be rolled back with a serialization_failure SQLSTATE. -- Regards, Vincent Veyron
http://libremen.com/ Legal case, contract and insurance claim management software