getting dead locks with 2 functions

From: "amir" <amir(at)binaryreef(dot)com>
To: <pgsql-general(at)postgresql(dot)org>
Subject: getting dead locks with 2 functions
Date: 2004-08-06 00:41:37
Message-ID: 200408052141.CDF46004@ms7.netsolmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: 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

Browse pgsql-general by date

  From Date Subject
Next Message Jim Wilson 2004-08-06 01:44:05 Commit Transaction Command
Previous Message Tom Lane 2004-08-06 00:03:04 Re: Sequence Question DOH!