Documentation PostgreSQL 15.15 » Annexes » Modules supplémentaires fournis » btree_gist

Précédent | Niveau supérieur | Suivant
F.8. btree_gin | Sommaire | F.10. citext

## F.9. btree_gist

`btree_gist` fournit des classes d'opérateur GiST qui codent un comportement équivalent à celui du B-tree pour les types de données `int2`, `int4`, `int8`, `float4`, `float8`, `numeric`, `timestamp with time zone`, `timestamp without time zone`, `time with time zone`, `time without time zone`, `date`, `interval`, `oid`, `money`, `char`, `varchar`, `text`, `bytea`, `bit`, `varbit`, `macaddr`, `macaddr8`, `inet`, `cidr`, `uuid`, `bool` et tous les types `enum`.

En règle générale, ces classes d'opérateur ne sont pas plus performantes que les méthodes d'indexage standard équivalentes du B-tree. Et il leur manque une fonctionnalité majeure : la possibilité d'assurer l'unicité. Néanmoins, elles fournissent d'autres fonctionnalités qui ne sont pas disponibles avec un index B-tree, comme décrit ci-dessous. De plus, ces classes d'opérateur sont utiles quand un index GiST multi-colonnes est nécessaire, quand certaines colonnes sont d'un type de données seulement indexable avec GiST. Enfin, ces classes d'opérateur sont utiles pour tester GiST et comme base de développement pour d'autres classes d'opérateur GiST.

En plus des opérateurs de recherche B-tree typiques, `btree_gist` fournit aussi un support pour `<>` (« non égale »). C'est utile en combinaison avec une contrainte d'exclusion, comme décrit ci-dessous.

De plus, pour les types de données disposant d'une métrique naturelle pour la distance, `btree_gist` définit un opérateur de distance, `<->`, et fournit un support par index GiST pour les recherches du type voisin-le-plus-proche en utilisant cet opérateur. Les opérateurs de distance sont fournis pour `int2`, `int4`, `int8`, `float4`, `float8`, `timestamp with time zone`, `timestamp without time zone`, `time without time zone`, `date`, `interval`, `oid` et `money`.

Ce module est considéré comme « trusted », ce qui signifie qu'il peut être installé par des utilisateurs simples (sans attribut `SUPERUSER`) et qui ont l'attribut `CREATE` sur la base de données courante.

### F.9.1. Exemple d'utilisation

Exemple simple d'utilisation de `btree_gist` au lieu d'un index `btree` :

    CREATE TABLE test (a int4);
    -- création de l'index
    CREATE INDEX testidx ON test USING GIST (a);
    -- requête
    SELECT * FROM test WHERE a < 10;
    -- recherche du plus proche voisin: trouver les dix entrées les plus
    -- proches de "42"
    SELECT *, a &lt;-&gt; 42 AS dist FROM test ORDER BY a &lt;-&gt; 42 LIMIT 10;

Utiliser une contrainte d'exclusion pour imposer qu'une cage dans un zoo ne contienne qu'un seul type d'animal :

    =&gt; CREATE TABLE zoo (
      cage   INTEGER,
      animal TEXT,
      EXCLUDE USING GIST (cage WITH =, animal WITH &lt;&gt;)
    );

    =&gt; INSERT INTO zoo VALUES(123, 'zebra');
    INSERT 0 1
    =&gt; INSERT INTO zoo VALUES(123, 'zebra');
    INSERT 0 1
    =&gt; INSERT INTO zoo VALUES(123, 'lion');
    ERROR:  conflicting key value violates exclusion constraint "zoo_cage_animal_excl"
    DETAIL:  Key (cage, animal)=(123, lion) conflicts with existing key (cage, animal)=(123, zebra).
    =&gt; INSERT INTO zoo VALUES(124, 'lion');
    INSERT 0 1

### F.9.2. Auteurs

Teodor Sigaev (`<teodor@stack.net>`), Oleg Bartunov (`<oleg@sai.msu.su>`), Janko Richter (`<jankorichter@yahoo.de>`) et Paul Jungwirth (`<pj@illuminatedcomputing.com>`). Voir le site sur GiST pour plus d'informations.