PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#76 11/04/2011 11:55:36

chris0938
Membre

Re : requête récursive with

bonjour,
est ce que en faisant rpm -e et ensuite rpm -ivh cela pourrai résoudre le probléme?

Hors ligne

#77 11/04/2011 12:04:54

gleu
Administrateur

Re : requête récursive with

Non, ça ne suffira pas. Il vous faut voir avec quelqu'un qui peut manipuler le serveur avec vous.


Guillaume.

Hors ligne

#78 12/04/2011 10:56:21

chris0938
Membre

Re : requête récursive with

Bonjour,
je suis finalement arrive a lancer postgres.
Donc maintenant je peux utiliser les requête récursive. J'ai repris la requête du début du sujet. Elle tourne pendant ~5 et après j'ai ce message

 ERROR: write failed

.

Hors ligne

#79 13/04/2011 07:08:50

Marc Cousin
Membre

Re : requête récursive with

Je présume qu'il y a une erreur dans la récursion qui fait que la requête n'a aucune condition de sortie.


Marc.

Hors ligne

#80 14/04/2011 14:09:09

chris0938
Membre

Re : requête récursive with

effectivement j'avais pris la requête du début du sujet.
la requête suivante fonctionne:

WITH recursive enfant(idEnfant,nomEnfant,level) AS
(
     SELECT d.id,d.nom,1 
	 FROM domaine d WHERE d.id=BE509765  
   union ALL
     SELECT d.id,d.nom,e.level + 1     
	 FROM domaine d,enfant e 
	 where d.parent=e.idEnfant
	 )
SELECT * FROM enfant ORDER BY level;

.

merci pour votre et désolé d'avoir largement débordé sur l'installation.

Une dernière question tant que j'y suis. j'aimerai récupérer les ascendant d'un élément. Avec oracle, il y a SYS_CONNECT_BY_PATH qui est bien pratique. est ce qu'il y a un équivalant pour postgresql ou qui s'en rapproche?

Hors ligne

#81 15/04/2011 07:54:00

Marc Cousin
Membre

Re : requête récursive with

Vous avez un problème avec cette requête:

WITH recursive enfant(idEnfant,nomEnfant,level) AS
(
     SELECT d.id,d.nom,1
     FROM domaine d WHERE d.id=BE509765 
   union ALL
     SELECT d.id,d.nom,e.level + 1     
     FROM domaine d,enfant e
     where d.parent=e.idEnfant
     )
SELECT * FROM enfant ORDER BY level;

Que se passe t'il si vous avez une erreur dans la base, et une boucle ? Il est probablement utile de rajouter une colonne profondeur de récursion, et une condition de sortie si elle devient trop élever.

Pour faire le sys_connect_by_path avec la syntaxe with de postgresql, je pense que vous avez intérêt à stocker dans un tableau, pour chaque élément, tous les parents de l'élément (regardez le chapitre sur les fonctions de tableau: http://docs.postgresql.fr/9.0/arrays.html) et ensuite concaténez les éléments de ce tableau sous la forme qui vous plait (à mon avis avec array_to_string: http://docs.postgresql.fr/9.0/functions-array.html)


Marc.

Hors ligne

Pied de page des forums