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 25/01/2008, 09h30   #1
Membre du Club
 
Avatar de cybercandyman
 
Développeur informatique
Inscription : janvier 2005
Messages : 55
Détails du profil
Informations personnelles :
Âge : 32
Localisation : France, Aube (Champagne Ardenne)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : janvier 2005
Messages : 55
Points : 42
Points : 42
Par défaut Expression réguliére ok sur un serveur, pas sur l'autre

Bonjour,

Comme l'indique le titre, j'ai un petit probléme avec une expression réguliére dans une requête qui marche pourtant par ailleurs.
La requete est ok sur une version 8.1 et ok sur une version 7.4. Je n'ai pas encore eu le numéro de version du serveur sur lequel ça plante.

voici l'erreur :
Code :
1
2
Warning: pg_query(): Query failed: ERROR:  operator does not exist: bytea ~* "unknown" HINT: No operator matches the given  name and argument type(s). You may need to add explicit type casts. 
et voici ma requete :
Code :
1
2
 
SELECT value FROM extensions_progs WHERE idchamp=9999  AND  value ~* '.*d\'achat.*'
Je vois pas de quoi ca pourrait venir, quelqu'un aurait une piste svp ?
cybercandyman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2008, 09h53   #2
Membre émérite
 
Avatar de hpalpha
 
Inscription : mars 2002
Messages : 770
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 770
Points : 833
Points : 833
bonjour,

verifie le type de ta colonne value, il semble que ce soit bytea, si c'est bon, recrée l'operateur manquant.
hpalpha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2008, 10h20   #3
Membre du Club
 
Avatar de cybercandyman
 
Développeur informatique
Inscription : janvier 2005
Messages : 55
Détails du profil
Informations personnelles :
Âge : 32
Localisation : France, Aube (Champagne Ardenne)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : janvier 2005
Messages : 55
Points : 42
Points : 42
merci hpalpha pour ta réponse.
Il s'agit d'un champ text, voici la structure de la table
Code :
1
2
3
4
5
6
7
8
 
CREATE TABLE extensions_progs
(
  idchamp int4 NOT NULL,
  idprog varchar(30) NOT NULL,
  value text,
  CONSTRAINT pk_ep PRIMARY KEY (idprog, idchamp)
)
L'opérateur est censé existé par défaut non ?
Est-ce que j'ai la possibilité de testé son existence avec pgadmin et dans le cas ou il n'exite pas, comment je fais pour le créer ?

merci encore

EDIT :
Je viens de voir un node sous pgadmin nommé "opérateurs".
Sous la version 7.4 je n'ai rien dedans et la requête passe comme une lettre.
Sous la version 8.1 j'ai des opérateurs (qui correspondent au module fulltext),mais pas de tilde wilcard et la requete passe aussi
cybercandyman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2008, 10h54   #4
Membre du Club
 
Avatar de cybercandyman
 
Développeur informatique
Inscription : janvier 2005
Messages : 55
Détails du profil
Informations personnelles :
Âge : 32
Localisation : France, Aube (Champagne Ardenne)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : janvier 2005
Messages : 55
Points : 42
Points : 42
je viens donc d'avoir des infos croustillantes...grâce à toi hpalpha,
la personne me dit que c un type bytea alors que ce devrait etre un type text.
Je ne sais pas par quelle magie ca a pue arrivé mais l'erreur vient de là ...

merci beaucoup !!!
cybercandyman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2008, 11h57   #5
Membre émérite
 
Avatar de hpalpha
 
Inscription : mars 2002
Messages : 770
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 770
Points : 833
Points : 833
De rien cybercandyman, sinon juste pour infos, les operateurs sont dans le catalogue systeme.
hpalpha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2008, 12h22   #6
Membre du Club
 
Avatar de cybercandyman
 
Développeur informatique
Inscription : janvier 2005
Messages : 55
Détails du profil
Informations personnelles :
Âge : 32
Localisation : France, Aube (Champagne Ardenne)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : janvier 2005
Messages : 55
Points : 42
Points : 42
Merci pour l'info.
Comme il n'ya pas de conversion de bytea vers text voici comment j'ai procédé pour qui tomberai un jour sur ce topic :

Code :
1
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
 
-- Création du champ text
ALTER TABLE extensions_progs 
    ADD COLUMN value_tmp text;
 
-- création opérateur de conversion --
CREATE OR REPLACE FUNCTION bytea2text(bytea) returns text AS
$$
SELECT ENCODE($1, 'escape');
$$
LANGUAGE sql strict;
 
CREATE cast (bytea AS text)
WITH FUNCTION bytea2text(bytea)
AS implicit;
-- end code --
 
-- Mise à jour des valeurs de value to value_tmp
UPDATE extensions_progs SET value_tmp = bytea2text(value);
 
-- Renommage column value, on conserve
ALTER TABLE extensions_progs 
    RENAME COLUMN value TO value_bak;
 
-- Renommage de la colonne temporaire en value
ALTER TABLE extensions_progs 
    RENAME COLUMN value_tmp TO value;
Voili voilà, bon week end !!!
cybercandyman 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 07h15.


 
 
 
 
Partenaires

Hébergement Web