PostgreSQL
La base de données la plus sophistiquée au monde.

Ouverture de session

Navigation

Contactez-nous

Administration du site :
"equipe chez postgresqlfr point org"

Contact presse :
"fr chez postgresql point org"

Contact association :
"bureau chez postgresqlfr point org"

Questions PostgreSQL :
 IRC :
  serveur irc.freenode.net
  canal #postgresqlfr

Recherche

Accéder aux archives

« Octobre 2008  
Lun Mar Mer Jeu Ven Sam Dim
  2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31  

Syndication

Flux XML

Sondage

Quelle est la version de PostgreSQL la plus répandue sur vos serveurs ?
8.3
10%
8.2
42%
8.1
40%
8.0
2%
7.4
6%
7.3 ou antérieure
0%
Nombre de votes: 48

Contrainte avec valeur absolu

Technique - Langages Procéduraux (PL) | Contrainte avec valeur absolu

Par benoitXV le 30/05/2008 - 18:25

Bonjour je cherche a crée une contrainte sur 2 champs.

Le 1er est la clef primaire de ma table, le second devra étre la valeur absolue d'un id_user (lui meme clé primaire d'une autre table).

J'ai essayé

ALTER TABLE ONLY table1
ADD CONSTRAINT ma_contrainte UNIQUE (id_table1, @(id_user));
&
ALTER TABLE ONLY table1
ADD CONSTRAINT ma_contrainte UNIQUE (id_table1, abs(id_user));

Mais cela ne fonctionne pas.

Merci pour toute info

Options d'affichage des commentaires

Sélectionnez la méthode d'affichage des commentaires que vous préférez, puis cliquez sur "Sauvegarder les paramètres" pour activer vos changements.

Bonjour, Pourquoi ne pas c

Jean-Paul Argudo/ = 2 Juin, 2008 - 09:53

Bonjour,

Pourquoi ne pas créer deux contraintes tout simplement?

Cordialement,
--
Jean-Paul ARGUDO
http://dalibo.com | http://dalibo.org


Clé primaire négative ?

SAS/ = 17 Juin, 2008 - 15:59

Bonjour,

Quel est le type d'id_user ?

Librement,
Stéphane Schildknecht
Dalibo
PostgreSQLFr


le type de l'id_user est seri

benoitXV/ = 24 Juin, 2008 - 16:02

le type de l'id_user est serial mais je peux en changer


j'ai un peu changer la struct

benoitXV/ = 24 Juin, 2008 - 16:07

j'ai un peu changer la structure de ma table. Je n'ai plus de clé primaire. Et je voudrais mettre une contrainte d'unicité sur 2 champs

le 1er text et le second valeur_absolue(id_user)

Je suis toujours bloqué sur ce même probleme.

Merci d'avance


Bonjour, On créé d'abo

Jean-Paul Argudo/ = 1 Juillet, 2008 - 09:31

Bonjour,

On créé d'abord le schéma:

test=# create table b (id serial primary key, data text);
INFO: CREATE TABLE créera des séquences implicites « b_id_seq » pour la colonne serial « b.id »
INFO: CREATE TABLE / PRIMARY KEY créera un index implicite « b_pkey » pour la table « b »
CREATE TABLE

test=# create table a (id serial primary key, b_id integer references b(id));
INFO: CREATE TABLE créera des séquences implicites « a_id_seq » pour la colonne serial « a.id »
INFO: CREATE TABLE / PRIMARY KEY créera un index implicite « a_pkey » pour la table « a »
CREATE TABLE

Je l'ai initialisé avec quelques valeurs ensuite...

Création de l'index unique (index implicite):

test=# alter table a add constraint unicite unique (id, b_id);
INFO: ALTER TABLE / ADD UNIQUE créera un index implicite « unicite » pour la table « a »
ALTER TABLE

test=# select * from a;
id | b_id
----+------
1 | 3
2 | 2
3 | 1
(3 lignes)

test=# insert into a (id, b_id) values (1,3);
ERREUR: la valeur d'une clé dupliquée rompt la contrainte unique « a_pkey »

Cela est normal: violation de la clé primaire. On la fait sauter:

test=# alter table a drop constraint a_pkey;
ALTER TABLE

test=# insert into a (id, b_id) values (1,3);
ERREUR: la valeur d'une clé dupliquée rompt la contrainte unique « unicite »

Cela répond à la question? Est-ce bien le comportement que vous vouliez?

Pour ce qui est de mettre une fonction dans une contrainte, je crois que ça n'est pas possible....

test=# alter TABLE a add constraint unicite_abs unique (id, abs(b_id));
ERREUR: erreur de syntaxe sur ou près de « ( »
LINE 1: ...r TABLE a add constraint unicite_abs unique (id, abs(b_id));
^

--
Jean-Paul ARGUDO
http://dalibo.com | http://dalibo.org


© PostgreSQLFr, tous droits rĂ©servĂ©s.
Site déclaré à la CNIL sous le numéro 1074678, conformément à la Loi en vigueur.