Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 23/06/2011 09:38:30
- sbouchard
- Membre
Type booléen - Surcharge d'opérateur
Bonjour,
Environnement :
PostgreSQL 9.0.4 sur WindowsServer2008
Client MS-Access 2007 lié à une base de données PostgreSQL
Le type booléen entre un client MS-Access (quelle que soit la version) et un serveur PostgreSQL pose problème.
MS-Access envoie à PostgreSQL -1 pour true et 0 pour false.
Lorsqu'une clause WHERE du client comporte une expression utilisant un champ de type booléen elle ne peut pas être évaluée par PostgreSQL.
Ce qui déclenche l’erreur suivante :
ERROR: operator does not exist: boolean = integer
Pour résoudre ce problème nous avons surchargé l'opérateur d'égalité afin qu'il accepte ce type d'argument en créant un opérateur, qui lui appelle une fonction personnalisée pour effectuer la comparaison
create function prospicio_dvlp_demo.integer2boolean (boolean, integer) returns boolean as '
begin
if $1 isnull then
return null;
end if;
if $1 is true then
if $2 <> 0 then
return true;
end if;
else
if $2 = 0 then
return true;
end if;
end if;
return false;
end;
' language 'plpgsql';
create operator prospicio_dvlp_demo.= (
leftarg = boolean,
rightarg = integer,
procedure = integer2boolean,
commutator = '=',
negator = '<>',
restrict = eqsel,
join = eqjoinsel
);
Le problème :
- L'opérateur et la fonction se trouvent dans un schéma nommé, autre que public.
- Le chemin de recherche des objets de base de données est le schéma de même nom que l'utilisateur connecté et pg_catalog.
- Les utilisateurs ne sont pas propriétaire du schéma contenant l'opérateur surchargé, donc, celui-ci n'est pas trouvé.
- Il n’est semble-t-il pas possible de donner des droits sur l’opérateur créé, malgré que cet opérateur soit un objet. De toute manière, cela ne résoudrait pas nécessairement le problème.
A votre avis y a-t-il moyen de faire en sorte que cet opérateur soit "trouvé" sans le mettre dans le schéma public de la base de données?
D'avance merci pour vos conseils.
Sylvie
Hors ligne
#2 24/06/2011 09:56:00
- gleu
- Administrateur
Re : Type booléen - Surcharge d'opérateur
Cela ne fonctionnera qu'avec un superutilisateur. Les utilisateurs standards sont protégés contre ça.
Guillaume.
Hors ligne
Pages : 1