I wonder if you set the transaction mode to "serializable" whether that would make a difference. In standard read-committed the way it works below seems to be what's expected (each transaction sees what was committed at the time is ran).
I tried running this in both windows at the same time (this is the inserttest() without the update statment at the beginning):
begin; set transaction ISOLATION LEVEL SERIALIZABLE; select inserttest(); commit; and I got this error: ERROR: could not serialize access due to concurrent update SQL state: 40001 Context: SQL statement "delete from testserial" PL/pgSQL function "inserttest" line 2 at SQL statement