CREATE OR REPLACE FUNCTION public.updatedata(userid_ integer)
RETURNS integer
AS $$
DECLARE
userdata_ integer;
BEGIN
LOOP
BEGIN
PERFORM 1 FROM public.footable f WHERE f.userid=userid_ LIMIT 1 FOR UPDATE ;
userdata_:=(SELECT f.userdata FROM public.footable f WHERE f.userid=userid_ );
UPDATE public.footable f SET userdata = userdata_ + 1 WHERE f.userid=userid_ ;
EXIT ;
EXCEPTION WHEN others THEN
END;
END LOOP;
RETURN userdata_ + 1;
EXCEPTION WHEN others THEN
END $$ language plpgsql;
Kann ich verhindern "lost update"
Problem für Benutzerdaten Spalte, wenn i "FOR UPDATE"
wie diese Sperre benutzen?FOR UPDATE Lock postgresql 9,6
Eigentlich wollte ich serializable isolation
in erster Linie verwenden, aber es stellt sich heraus, dass nur in serializable isolation
können einige Fehler nach COMMIT nachgewiesen werden (link)
toll .... danke .... – sommeguyy