Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 Re : Migration » Garder INTEGER comme type boolean » 22/12/2011 12:37:59
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 ?
#2 Re : Migration » Garder INTEGER comme type boolean » 22/12/2011 11:50:46
@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 ?
#3 Re : Migration » Garder INTEGER comme type boolean » 21/12/2011 18:51:54
:'( 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 ...
#4 Migration » Garder INTEGER comme type boolean » 21/12/2011 16:12:25
- ofthestreet
- Réponses : 15
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