Re: Pas de contrainte référentielle vers un champ non-UNIQUE :-(

From: Sébastien Lardière <sebastien(at)lardiere(dot)net>
To: pgsql-fr-generale(at)postgresql(dot)org
Subject: Re: Pas de contrainte référentielle vers un champ non-UNIQUE :-(
Date: 2008-09-08 15:44:25
Message-ID: 2492851b58e01539d76ef4364a554493@80.247.230.89
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-fr-generale


On Mon, 8 Sep 2008 16:56:35 +0200, Stephane Bortzmeyer <bortzmeyer(at)nic(dot)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

In response to

Browse pgsql-fr-generale by date

  From Date Subject
Next Message BPascal 2008-09-09 08:22:19 procédure stockée
Previous Message Guillaume Lelarge 2008-09-08 15:42:25 Re: [pgsql-fr-generale] Pas de contrainte référentielle vers un champ non-UNIQUE :-(