share lock when only one user connected? - Mailing list pgsql-general

From Ivan Sergio Borgonovo
Subject share lock when only one user connected?
Date
Msg-id 20101028192815.14e991e4@dawn.webthatworks.it
Whole thread Raw
Responses Re: share lock when only one user connected?
Re: share lock when only one user connected?
List pgsql-general
I'm running this query when I'm the only user and this should be the
only thing running.

update catalog_items
  set Code=s.codice, CodeAlt=s.codicealt, BrandID=s.marca,
  Name=initcap(s.nome), Description=s.desc_l1,
  qty=coalesce(s.quantita, 0),
  ListPrice=coalesce(s.prezzoListino, 0) ,
  valIva=s.valIva, ivaInc=s.ivaInc,
  StatusID=coalesce(s.stato, 1) ,
  Weight=s.peso, dataInserimento=s.dataInserimento, daPub=s.daPub,
  BestSeller=s.bestSeller, posInMag=s.posInMag , ISBN=s.ISBN,
  dataPub=coalesce(s.dataPubblicazione, datapub),
  updated=now()
  from (
    select a.id, a.codice, a.codicealt,
    a.marca, a.nome, a.desc_l1, a.quantita, a.prezzoListino,
    a.valIva, a.ivaInc, a.stato, a.peso, a.dataInserimento, a.daPub,
    a.bestSeller, a.posInMag, a.ISBN, ip.dataPubblicazione
    from
      import.Articoli a
      left join import.ArticoliPropTipo_1 ip on a.id=ip.idArt
      where a.action=8
    ) as s
    where s.id=catalog_items.ItemID
;

And I get

DETAIL:  Process 7188 waits for ShareLock on transaction 110562621;
blocked by process 7244. Process 7244 waits for ShareLock on
transaction 110562544; blocked by process 7188.

On that table 2 triggers are defined:

create or replace function FT1IDX_catalog_items_update() returns
trigger as
$$
declare
    _Name varchar(64);
begin
  select into _Name Name from catalog_brands
   where BrandID=new.BrandID;
   new.FT1IDX:=
     GetFTIDX('pg_catalog.english', new.Code, new.CodeAlt, new.ISBN,
     new.Name, new.Authors, _Name);
  return new;
end;
$$ language plpgsql volatile;

create or replace function FT1IDX_catalog_brands_update() returns
trigger as
$$
begin
  if(TG_OP='DELETE') then
    update catalog_items set
      FT1IDX=
       GetFTIDX('pg_catalog.english', Code, CodeAlt, ISBN, Name, Authors, '')
        where BrandID=old.BrandID;
    return old;
  else
    if(coalesce(new.Name,'')<>coalesce(old.Name,'')) then
      update catalog_items set
        FT1IDX=
          GetFTIDX('pg_catalog.english', Code, CodeAlt, ISBN, Name, Authors, new.Name) where BrandID=new.BrandID;
    end if;
  end if;
return new;
end;
$$ language plpgsql volatile;

What could it be? how can I fix it?



--
Ivan Sergio Borgonovo
http://www.webthatworks.it


pgsql-general by date:

Previous
From: Ivan Sergio Borgonovo
Date:
Subject: Re: exceptionally large UPDATE
Next
From: "A.M."
Date:
Subject: Re: Should PQconsumeInput/PQisBusy be expensive to use?