I am wondering If I am missing something obvious. If not, I have a suggestion for plpgsql.
Stored procedures can accept rows. Libpq can receive rows (PQResult). Wouldn't it be a great interface if PQResult was "bi-directional"? Create a result set on the client then call the database with a command. Perhaps... PQinsert(PQResult,"schema.table"); //iterate thru rows inserting PQupdate(PQResult,"schema.table"); //iterate thru rows updateing PQexec(connection,"scheme.function",PQResult) //iterate thru rows passing row as arg to stored procedure.