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

#1 20/10/2010 15:30:01

titte64
Membre

Utilisation de variable globale dans une clause where

Bonjour à tout le monde.

Je m'excuse par avance si ce sujet a déjà été traité, mais mes recherches ont été infructueuses.

Voilà mon soucis :

J'ai une variable globale qui contient une suite de mots séparés par des virgules
SET variable.globale = '''test1'',''test2'',''test3''';

Je souhaiterais utiliser cette variable dans une requête de la façon suivante:
SELECT * FROM maTable WHERE attribut IN (current_setting('variable_globale'));

Le problème, c'est que current_setting('variable_globale') me retourne un texte, or il me faudrait une liste de chaîne de caractères.

Avez-vous déjà rencontré ce cas d'utilisation, et si oui, comment l'avez-vous résolu.

Je sais que depuis postgreSQL 8.3 on peut utiliser la fonction regexp_split_to_table, mais mon programme tourne également sur des 8.2, donc je ne peux pas utiliser cette fonction.

Merci d'avance.

Titte

Hors ligne

#2 20/10/2010 15:43:37

Marc Cousin
Membre

Re : Utilisation de variable globale dans une clause where

La notation variable.globale ne marchera pas dans PostgreSQL 8.2 (il faut custom_variable_classes). Ça résout déjà le problème de ce point de vue smile

Ensuite, non, jamais rencontré ce contexte, il est un peu étrange. Je pense qu'il vaudrait mieux que vous exposiez ce que vous voulez finalement faire, plutôt que de se focaliser sur le début de solution technique sur lequel vous êtes parti. Avec un peu de chance, on pourra trouver une solution plus simple, ou plus appropriée.

Merci donc pour commencer d'expliquer ce que vous essayez de résoudre problème, sans faire d'hypothèse sur la méthode de résolution, j'espère qu'on aura une solution simple à vous proposer smile


Marc.

Hors ligne

#3 20/10/2010 16:38:16

titte64
Membre

Re : Utilisation de variable globale dans une clause where

Bonjour Marc,

Je te remercie pour avoir pris le temps de lire et répondre à ma question.

Pendant que je lisais ta réponse, j'ai été frappé d'une idée de solution qui m'a permis de contourner la solution que j'envisageais, comme tu me le conseillais.

Donc mon problème est résolu.

En revanche pour ton information, j'utilise la notation variable.globale en 8.2 sans aucun problème. smile

Titte

Hors ligne

#4 20/10/2010 16:43:51

Marc Cousin
Membre

Re : Utilisation de variable globale dans une clause where

J'ai cette erreur :
ERROR:  unrecognized configuration parameter "variable.globale"

Quand je le fais sur une 8.2.17.

On parle bien de la même chose ? Un SET dans une session psql ?

Pas un \set ?


Marc.

Hors ligne

#5 20/10/2010 17:04:58

titte64
Membre

Re : Utilisation de variable globale dans une clause where

C'est tout à fait logique, tu essaies de 'setter' une variable 'variable.globale', qui n'existe pas.

Il faut d'abord définir 'variable' comme étant une custom_variable_classes, et ensuite tu peux faire :

SET  variable.globale = 'test';

Titte

Hors ligne

#6 20/10/2010 17:22:55

Marc Cousin
Membre

Re : Utilisation de variable globale dans une clause where

Oui, tout à fait d'accord avec toi. Jene sais pas pourquoi, j'aurais juré que le custom_variable_classes n'existait pas en 8.2… Alors qu'il est apparu en 8.1. On s'y perd, avec toutes ces versions smile


Marc.

Hors ligne

#7 20/10/2010 17:35:29

titte64
Membre

Re : Utilisation de variable globale dans une clause where

M'en parle pas.

En ce moment, je tente de m'en sortir avec des serveurs en 8.2, 8.3 et 8.4.

Vivement les upgrades de versions.

Bonne soirée.

Titte

Hors ligne

Pied de page des forums