Skip site navigation (1) Skip section navigation (2)

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 (view raw or flat)
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



pgsql-fr-generale by date

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

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group