Hi,

the docu about the Read Committed Transaction Isolation Level pointed out: "... The point at issue here is whether or not within a single command we see an absolutely consistent view of the database.".

Because i dont want to use the Serializable Transaction Isolation Level or table locks if it not necessary i have one question:

Would the insert command with that subselect treated as one single command and can i so prevent a race condition between multiple function calls?

CREATE OR REPLACE FUNCTION "public"."count_parameter" (name, integer)
RETURNS "pg_catalog"."void" AS'
BEGIN

   INSERT INTO parameter (parameter_name, parameter_value)
       SELECT $1, $2 WHERE (
           SELECT COUNT(*) = 0 FROM parameter WHERE parameter_name = $1
   );
  IF NOT FOUND THEN
       UPDATE parameter SET parameter_value = parameter_value + $2
       WHERE parameter_name = $1;
  END IF;

  RETURN;

END;
'LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;

best regards,
thomas



---------------------------(end of broadcast)--------------------------- TIP 9: the planner will ignore your desire to choose an index scan if your joining column's datatypes do not match

Reply via email to