Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL
PostgreSQL Forum PostgreSQL. Avant de poster -> F.A.Q PostGreSQL Tutoriels PostGreSQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/04/2006, 21h04   #1
Invité de passage
 
Inscription : mars 2003
Messages : 6
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 6
Points : 3
Points : 3
Par défaut Problème de contrainte sur une partie de date (l'année)

Bonjour,

Je suis face à un problème que je n'arrive pas a résoudre depuis quelques jours.
Ce problème les contraintes sous PostGreSQL.

Je m'explique, prenons l'exemple suivant :
une table "my_table" avec deux champs
- my_number de type numérique
- my_date de type date

Ce que je cherche à faire est de mettre une contrainte pour interdire d'avoir plus d'un couple
(my_number, année (my_date)).

J'ai essayé avec EXTRACT mais rien n'y fait ca marche pas.

voici plusieurs essais infructueux :

===============================================

CREATE TABLE my_table (
my_number NUMERIC(4),
my_date DATE,
PRIMARY KEY (my_number, EXTRACT (YEAR FROM my_date))
)

msg erreur
-------------
psql:tmp.sql:5: ERROR: syntax error at or near "(" au caractÞre 102
psql:tmp.sql:5: LIGNE 4 : PRIMARY KEY (my_number, EXTRACT (YEAR FROM my_date))

===============================================

CREATE TABLE my_table (
my_number NUMERIC(4),
my_date DATE,
UNIQUE (my_number, EXTRACT (YEAR FROM my_date))
)

msg erreur
-------------
psql:tmp2.sql:6: ERROR: syntax error at or near "(" au caractÞre 97
psql:tmp2.sql:6: LIGNE 4 : UNIQUE (my_number, EXTRACT (YEAR FROM my_date))

===============================================

CREATE TABLE my_table (
my_number NUMERIC(4),
my_date DATE,
UNIQUE (my_number, date_part('year', my_date))
)

msg erreur
-------------
psql:tmp3.sql:7: ERROR: syntax error at or near "(" au caractÞre 98
psql:tmp3.sql:7: LIGNE 4 : UNIQUE (my_number, date_part('year', my_date))

===============================================

A chaque fois c'est la fonction EXTRACT qui pose problème, ca fonctionne bien pour les select mais pas pour les contraintes et je n'ai pas trouvé d'équivalence.

Voila, si vous avez une idée elle est la bienvenue.

Merci d'avance

Shefla
shefla est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/04/2006, 21h21   #2
Membre chevronné
 
Avatar de Spoutnik
 
Homme
Inscription : octobre 2003
Messages : 668
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 32
Localisation : Etats-Unis

Informations forums :
Inscription : octobre 2003
Messages : 668
Points : 746
Points : 746
Hello,

Je pense que c'est juste impossible à faire.
En tous cas, je ne vois pas du tout comment il est possible de créer un index sur une valeur calculée.
Je pense que la seule solution est d'avoir une colonne de plus ...
__________________
Two beer or not two beer. (Shakesbeer)
Question technique par MP => poubelle!
Spoutnik est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/04/2006, 21h26   #3
Invité de passage
 
Inscription : mars 2003
Messages : 6
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 6
Points : 3
Points : 3
Merci de ta réponse Spoutnik

J'ai déja pensé à faire une colonne de plus
Pis ben c pas optimal
soit ya une colonne date et une année
et faut gérer la synchronisation des deux champs
soit on coupe la date en trois champs pis ben la il n'y a plus de controle de la date

enfin, je pense que si je ne trouve rien de mieux je vai conserver l'idée un champ date et un année.
shefla est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/04/2006, 21h50   #4
Invité de passage
 
Inscription : mars 2003
Messages : 6
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 6
Points : 3
Points : 3
Est-ce qu'il existe une fonction pour vérifier qu'une date est valide ?
Comme ca je fais trois champs et je met la vérification dans un check
shefla est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h10.


 
 
 
 
Partenaires

Hébergement Web