getting dead locks with 2 functions
От | Amir Zicherman |
---|---|
Тема | getting dead locks with 2 functions |
Дата | |
Msg-id | 27a5b7d1040805154264640a23@mail.gmail.com обсуждение исходный текст |
Ответы |
Re: getting dead locks with 2 functions
|
Список | pgsql-general |
I have the following 2 functions and I'm getting deadlocks when I call them from multiple threads. The first, I'm not sure why because I'm doing a select for update. The second I'm doing an insert on, and I thought insert will automatically do a lock as it inserts: -------------FUNCTION 1: ------------- CREATE OR REPLACE FUNCTION public.select_pend_visitation_for_unvisited_links(int4) RETURNS SETOF record AS ' DECLARE urlrow RECORD; BEGIN FOR urlrow in EXECUTE \'SELECT * FROM "URL" WHERE visited=1::int2 LIMIT \' || $1::int4 || \'FOR UPDATE\' LOOP UPDATE "URL" SET visited=2 WHERE "URLID"::int8 = urlrow."URLID"::int8; RETURN NEXT urlrow; END LOOP; RETURN; END; ' LANGUAGE 'plpgsql' VOLATILE; -------------FUNCTION 2: ------------- CREATE OR REPLACE FUNCTION public.add_link_to_url_table(varchar, int8, int4, int2, bool, int2) RETURNS void AS ' INSERT INTO "URL" ("rootlessURLString","rootURLID","rootURLIDPartition","visited", "createdAt","updatedAt","isValid","URLType") VALUES ($1, $2, $3, $4, now(), now(), $5, $6 ); ' LANGUAGE 'sql' VOLATILE; Thanx for the help, amir
В списке pgsql-general по дате отправления: