Vous n'êtes pas identifié(e).
Pages : 1
Hi tom lane,
j'ai vu ta remarque (http://archives.postgresql.org/pgsql-ge … g00866.php) comme quoi c'est pas bien de modifier les tables internes de postgres, mais avec une conversion implicite à l'assignement faite par update de la table pg_cast, ca me permet d'utiliser false et true sur des integers :
-- http://docs.postgresql.fr/8.4/catalog-pg-cast.html
update pg_cast set castcontext = 'a' where oid in (
select c.oid
from pg_cast c
inner join pg_type src on src.oid = c.castsource
inner join pg_type tgt on tgt.oid = c.casttarget
where src.typname = 'bool' and tgt.typname = 'int4');
drop table Tutu;
create table Tutu (isNull_ INTEGER);
insert into Tutu Values(false);
Vais je au devant d'emmerde sans nom ?
@flo
Ceci pose de cout de portage de code.
Tu me diras si le code est bien foutu, ceci devrait être concentré dans certaines classes.
N'y a t il pas un setting de guru dans postgres qui permettrait de impliciter false à 0 et true à 1 ?
Comment fait postgres pour reconnaitre 'y', 'yes', 'true', 't', 1 comme boolean ?
Si il est capable de faire ces cast de façon implicite ... ne pourrait on pas lui dire .. heu non non Mr Postgres, false, c'est désormais l'entier 1 ?
:'( bouh bouh, va falloir modifier du code pour se connecter à postgresql malgré une compatibilité avec h2/sybase/oracle/sqlserver
NOTE : pour mysql, c'est une autre galère ... le sql c'est vraiment pas un standard ...
Pour des raisons de portabilité, j'aimerai conserver integer comme type primitif pour mes booléen.
Je me heurte à des problèmes de cast lors de false ou true. Le code suivant ne marche pas :
drop table Tutu;
create table Tutu (isNull_ INTEGER);
insert into Tutu Values(false);
ERREUR: la colonne "isnull_ " est de type integer mais l'expression est de type boolean
LIGNE 1 : insert into Tutu Values(false);
^
ASTUCE : Vous devez réécrire l'expression ou lui appliquer une transformation de type.
il me faut écrire :
drop table Tutu;
create table Tutu (isNull_ INTEGER);
insert into Tutu Values(cast(false as integer));
Cela m'oblige à modifier le code, ce que j'aimerai éviter.
J'ai essayé les cast lors de l'assignement, sans y arriver :
create cast (boolean as INTEGER) WITH FUNCTION int4(boolean) AS ASSIGNMENT
> ERREUR: la conversion du type boolean vers le type integer existe déjà
Comment faire pour que false et true soit systématiquement transformé en entier ?
Est il possible de changet le type boolean en entier ?
merci
Pages : 1