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 08/06/2007, 19h29   #1
Invité régulier
 
Inscription : mars 2007
Messages : 10
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 10
Points : 5
Points : 5
Par défaut vues personnalisées sous postgresql

Bonjour,

J'aimerais bien savoir s'il y a possibilté de créer des vues personnalisées sous postgresql?
ie: en fonction de la valeur d'un attribut au niveau d'une table, il faut choisir la bonne table avec laquelle il faut faire la jointure pour en tirer les autres champs

merci d'avance.
Dev_ps est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/06/2007, 15h01   #2
jnore
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
Citation:
J'aimerais bien savoir s'il y a possibilté de créer des vues personnalisées sous postgresql?
Bien sûr qu'il est possible de stocker des vues, ex:

Code :
1
2
3
4
5
6
 
CREATE OR REPLACE VIEW "public"."essai_vue" 
AS
SELECT champ1,champ2
FROM TABLE
WHERE champ1='parametre'
Qui plus est les vues sont parfaitement gérées par le pilote ODBC de Postgresql, dans le cas bien sûr où ça t'intéresse!

Par contre:
Citation:
en fonction de la valeur d'un attribut au niveau d'une table, il faut choisir la bonne table avec laquelle il faut faire la jointure pour en tirer les autres champs
Je n'ai pas bien compris !
  Envoyer un message privé Réponse avec citation 00
Vieux 11/06/2007, 11h25   #3
Membre actif
 
Avatar de budtucker
 
Développeur multimédia
Inscription : avril 2007
Messages : 175
Détails du profil
Informations professionnelles :
Activité : Développeur multimédia

Informations forums :
Inscription : avril 2007
Messages : 175
Points : 174
Points : 174
Une vue, n'est qu'une requête SQL permettant de relier des données de plusieurs tables et dont l'utilisation peut être très fréquentes sans avoir à se retaper et se trainer la requête SQL dans le code. Ou encore si on souhaite prévenir un éventuel changement de la structure d'une base de données et que l'on ne souhaite pas changer pour autant toute l'application. Dans ce cas, on ne changera que la requête qui est présente dans la vue.

Si tu souhaites obtenir d'une vue des données différentes en fonction d'un "paramètre" (comme on le ferait pour une procédure), alors ce n'est pas possible. Cependant, avec un peu de "bidouille" tu pourrais éventuellement changer le résultat de ta vue en changeant par exemple une occurence dans une table de ta base de données (cf. l'exemple ci dessus). Dans ce cas, toutes les utilisations de la vue seront affectées. En gros, si tu souhaites que la vue change en fonction d'une date, alors c'est possible. Par contre, si tu souhaites que la vue change en fonction de l'utilisateur, ce n'est donc pas possible (à moins d'utiliser une fonction et pas une vue). Que l'on me corrige si je fais erreur.

A+
budtucker est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/06/2007, 21h41   #4
Invité régulier
 
Inscription : mars 2007
Messages : 10
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 10
Points : 5
Points : 5
Ok merci pour vos réponses.
En fait ce que je voulais c'est de créer une vue de ce style :

create view foobar as
select date_id,A_table_id,something1
,case when something2=x then A1_table.A11 else A2_table.A21 end as foo
,case when something2=x then A1_table.A12 else A2_table.A22 end as bar
from (... etc., etc. ...)

donc mon problème est résolu

vous avez parlé de la possibilté que la vue change en fonction d'une date merci de m'éclaircir ce point
Dev_ps est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/06/2007, 11h04   #5
Membre éclairé
 
Avatar de icer
 
Inscription : janvier 2006
Messages : 332
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 332
Points : 308
Points : 308
Citation:
Par contre, si tu souhaites que la vue change en fonction de l'utilisateur, ce n'est donc pas possible (à moins d'utiliser une fonction et pas une vue). Que l'on me corrige si je fais erreur.
Correction alors.

Il y a des mécanismes qu'on peut mettre en place pour gérer ça.

Tout dépend de ce qu'on souhaite faire comme 'changement de vues':
- Si on veux simplement filtrer les lignes qui concernent l'utilisateur courant on peut ajouter une condition dans WHERE sur la variable USER : par exemple
Code :
CREATE VIEW mes_articles AS SELECT * FROM articles WHERE auteur = USER;
- Si on veux afficher différentes colonnes en fonctions de l'utilisateur on peut passer par les shémas, comment ? En créant un shéma qui a le même non que l'utilisateur et en créant la vue dans ce shéma. Mais cette solution implique qu'il faudrait créer des vues pour toutes les tables pour chaque utilisateurs...

D'ailleurs je suis en train de chercher une solution à un problème similaire :
Définir le shéma par défaut en fonction du rôle de l'utilisateur.

Les discussions concernant cette solution :
http://www.developpez.net/forums/sho...d.php?t=347094
http://www.developpez.net/forums/sho...d.php?t=356292
icer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/06/2007, 11h17   #6
Invité régulier
 
Inscription : mars 2007
Messages : 10
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 10
Points : 5
Points : 5
Ok merci pour les réponses
Dev_ps est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/06/2007, 11h22   #7
Membre actif
 
Avatar de budtucker
 
Développeur multimédia
Inscription : avril 2007
Messages : 175
Détails du profil
Informations professionnelles :
Activité : Développeur multimédia

Informations forums :
Inscription : avril 2007
Messages : 175
Points : 174
Points : 174
Citation:
Envoyé par icer
Correction alors....
Merci pour cette correction !!!
budtucker est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h38.


 
 
 
 
Partenaires

Hébergement Web