Verrouillage index textuel

From: "Jerome VILLAFRUELA" <Jerome(dot)VILLAFRUELA(at)yoni(dot)fr>
To: <pgsql-fr-generale(at)postgresql(dot)org>
Subject: Verrouillage index textuel
Date: 2005-06-29 14:14:11
Message-ID: ED4F87518BA2B540873CC502D43068D5414E4D@srvexch.seyssinet.rfi.local
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-fr-generale

Bonjour à tous,

J'ai une base dans laquelle j'ai installé le moteur de recherche textuel Tsearch2. Lors de la mise à jour de lignes d'une table dans laquelle figure une colonne indexée textuellement je ne comprends pas pourquoi l'index textuel est verrouillé exclusivement (AccessExclusiveLock) alors que la requête de mise à jour ne porte pas sur la colonne indexée.

Vous pouvez constater le problème en créant une base selon les instructions : http://www.sai.msu.su/~megera/postgres/gist/tsearch/V2/docs/tsearch-V2-intro.html (arrêtez vous avant la création du trigger) :

Table «public.tblmessages»
Colonne | Type | Modificateurs
------------+------------------------+---------------
intindex | integer |
strtopic | character varying(100) |
strmessage | text |
idxfti | tsvector |
Index :
«idxfti_idx» gist (idxfti)

Créez ensuite la fonction :

create or replace function majtbl() returns boolean as '
declare
i integer := 0;
rec record;
begin
LOOP
i:=i+1;
RAISE NOTICE '' Tour % '',i;
FOR rec IN select * from tblmessages order by intindex LOOP
update tblmessages set intindex=intindex+100
where intindex=rec.intindex;
END LOOP;
exit when i=100;
END LOOP;

return true;
end;
' language 'plpgsql';

Pendant l'exécution de la fonction, affichez les verrous :

select c.relname, l.* from pg_class c, pg_locks l where c.relfilenode = l.relation;
relname | relation | database | transaction | pid | mode | granted
-------------+----------+----------+-------------+-------+---------------------+---------
tblmessages | 2207243 | 2207052 | | 10914 | AccessShareLock | t
tblmessages | 2207243 | 2207052 | | 10914 | RowExclusiveLock | t
idxfti_idx | 2207258 | 2207052 | | 10914 | AccessExclusiveLock | t
pg_locks | 16759 | 2207052 | | 10936 | AccessShareLock | t
pg_class | 1259 | 2207052 | | 10936 | AccessShareLock | t

L'index idxfti_idx est verrouillé alors que l'update ne porte pas sur la colonne idxfti.

Est il possible d'éviter le verrouillage de l'index ?

--
Jérôme Villafruela
RFI Informatique
ZI Percevalière - 7410
38174 SEYSSINET-PARISET

Browse pgsql-fr-generale by date

  From Date Subject
Next Message Anthony Stéphan 2005-07-07 15:33:39 PL-PGSQL : Procédure stockée simple
Previous Message Francois Suter 2005-06-29 12:42:27 Re: pg_dump avec .pgpass