Monday, September 8, 2008

Re: [pgsql-fr-generale] Pas de contrainte référentielle vers un champ non-UNIQUE :-(

On Mon, 8 Sep 2008 16:56:35 +0200, Stephane Bortzmeyer <bortzmeyer@nic.fr>
wrote:

Bonjour,

> J'essaie de mettre une contrainte référentielle mais le champ visé n'a
> pas été déclaré comme UNIQUE :
>
> essais=> CREATE TABLE Foo(name TEXT NOT NULL);
> CREATE TABLE
> essais=> CREATE TABLE Bar(truc TEXT, machin TEXT REFERENCES Foo(name));
> ERROR: there is no unique constraint matching given keys for referenced
> table "foo"
>
> [Si Foo(name) est déclaré UNIQUE, cela passe.]
>
> Première question : pourquoi PostgreSQL 8.3 impose t-il cette
> contrainte supplémentaire qui ne me semble pas logique ?

Ce n'est pas Pg 8.3, c'est la définition même de l'intégrité
référentielle¹. C'est dans la doc de PostreSQL depuis au moins la
version 7.3, je ne suis pas remonté plus loin.

>
> Deuxième question : quel contournement utiliser à part abandonner la
> sécurité que me fournit REFERENCES ?
>

Des triggers ?

¹ : http://en.wikipedia.org/wiki/Foreign_key

--
Sébastien


--
Sent via pgsql-fr-generale mailing list (pgsql-fr-generale@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-fr-generale

No comments: