Re: a la recherche d'exemple de contrainte d'exclusion

From: Cédric Villemain <cedric(at)2ndquadrant(dot)com>
To: pgsql-fr-generale(at)postgresql(dot)org
Cc: "Marie-Claude QUIDOZ" <Marie-Claude(dot)QUIDOZ(at)cefe(dot)cnrs(dot)fr>
Subject: Re: a la recherche d'exemple de contrainte d'exclusion
Date: 2012-12-05 18:26:32
Message-ID: 201212051926.40458.cedric@2ndquadrant.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-fr-generale

Bonsoir,

> Ai l'impression d'avoir compris l'utilisation des contraintes de
> vérification (ai testé la possibilité d'utiliser des fonctions paramétrées
> dans le texte). Par contre, je n'ai pas tout compris sur les contraintes
> d'exclusivité. Est-ce que vous auriez des exemples d'utilisations
> concrètes de cette contrainte ?

quelques exemples:

# create table foo (
i int,
r int8range
);
# create extension btree_gist;

# équivalent UNIQUE
# alter table foo add exclude using gist (i with =);
# insert into foo (i) values (1),(1);
ERREUR: la valeur d'une clé en conflit rompt la contrainte d'exclusion «
foo_i_excl »
DÉTAIL : La clé (i)=(1) est en conflit avec la clé existante (i)=(1).
# alter table foo drop constraint foo_i_excl;

# UNIQUE int et array (idem pour range et réservation de salle, cf doc
postgres)
# alter table foo add exclude using gist (i with =, r with &&);
# insert into foo (i,r) values (1,'[0,10]'),(1,'[11,20]');
INSERT 0 2
# insert into foo (i,r) values (2,'[0,10]');
INSERT 0 1
# insert into foo (i,r) values (2,'[30,)');
INSERT 0 1
# insert into foo (i,r) values (2,'[5,15)');
ERREUR: la valeur d'une clé en conflit rompt la contrainte d'exclusion «
foo_i_r_excl »
DÉTAIL : La clé (i, r)=(2, [5,15)) est en conflit avec la clé existante (i,
r)=(2, [0,11)).

Il y a d'autres opérateurs utilisable (cf operateurs compatibles entre type et
index gist)

en gros: (i with =) -> répond vrai avec une autre ligne dans la table, alors
rupture de la contrainte. Idem pour les autres opérateurs.

J'espère que c'est plus clair avec ces quelques exemples (c'est en gros un
UNIQUE plus complexe, UNIQUE étant uniquement '=')

--
Cédric Villemain +33 (0)6 20 30 22 52
http://2ndQuadrant.fr/
PostgreSQL: Support 24x7 - Développement, Expertise et Formation

In response to

Browse pgsql-fr-generale by date

  From Date Subject
Next Message Dimitri Fontaine 2012-12-05 21:55:26 Re: PostgreSQL9.1 trigger avec arguments
Previous Message Sebastien Douche 2012-12-05 17:43:29 Re: Utilisation du SSD