Ergebnis 1 bis 4 von 4

Thema: Problem mit boolean

  1. #1
    postgre_neuling ist offline Neuer Benutzer
    Registriert seit
    24.09.2009
    Beiträge
    16

    Standard Problem mit boolean

    Hallo,

    ich habe derzeit folgendes Problem, würde mich freuen wenn jemand von euch helfen könnte.

    in unserer Firma wollen wir unser Softwareprojekt derzeit von MS SQL auf Postgres umstellen.

    Beim Zugriff via JDBC fiel uns auf, dass smallint Spalten nicht via get/setBoolean() angesprochen werden können. Hier meldet sich Postgre (mit Recht) zu Wort, dass die Spalten nicht von boolean in smallint gecastet werden können. ALso haben wir diese Spalten angepasst und den Datentyp sämtlicher betroffener Spalten auf boolean umgestellt. Leider haben wir jetzt das Problem beim umgekehrten weg: Das Speichern von boolean Werten schreibt in die Spalten z.b. die Werte "f" für false oder "t" für true. Was nun insofern ein problem ist, als das an sehr vielen Stellen in unserer Software per getInt() auf diese Spalten zugegriffen wird (ich weis, das ist ein Designfehler aber leider nunmal nicht mehr zu ändern). Wir bekommen dann eine Exception mit dem Fehlertext.
    Unzulässiger Wert für den Typ int : f.

    Meine Frage wäre dazu: Gibt es eine Möglichkeit, Postgre so zu konfigurieren, dass anstelle der Werte f und t einfach - wie bei anderen Datenbanken - 0 und 1 in die Spalten geschrieben wird? Das wäre für unser Vorhaben äußerst hilfreich, da sämtliche Anpassungen im Code sehr aufwändig und fehleranfällig wären.

    Gruß,
    postgre_neuling

  2. #2
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Nähe Dresden
    Beiträge
    5.330

    Standard

    Zitat Zitat von postgre_neuling Beitrag anzeigen
    Hallo,

    ich habe derzeit folgendes Problem, würde mich freuen wenn jemand von euch helfen könnte.

    in unserer Firma wollen wir unser Softwareprojekt derzeit von MS SQL auf Postgres umstellen.

    Beim Zugriff via JDBC fiel uns auf, dass smallint Spalten nicht via get/setBoolean() angesprochen werden können. Hier meldet sich Postgre (mit Recht) zu Wort, dass die Spalten nicht von boolean in smallint gecastet werden können. ALso haben wir diese Spalten angepasst und den Datentyp sämtlicher betroffener Spalten auf boolean umgestellt. Leider haben wir jetzt das Problem beim umgekehrten weg: Das Speichern von boolean Werten schreibt in die Spalten z.b. die Werte "f" für false oder "t" für true. Was nun insofern ein problem ist, als das an sehr vielen Stellen in unserer Software per getInt() auf diese Spalten zugegriffen wird (ich weis, das ist ein Designfehler aber leider nunmal nicht mehr zu ändern). Wir bekommen dann eine Exception mit dem Fehlertext.
    Unzulässiger Wert für den Typ int : f.

    Meine Frage wäre dazu: Gibt es eine Möglichkeit, Postgre so zu konfigurieren, dass anstelle der Werte f und t einfach - wie bei anderen Datenbanken - 0 und 1 in die Spalten geschrieben wird? Das wäre für unser Vorhaben äußerst hilfreich, da sämtliche Anpassungen im Code sehr aufwändig und fehleranfällig wären.

    Gruß,
    postgre_neuling
    Die saubere Lösung wäre, den Code aufzuräumen. Aber vielleicht geht auch ein CAST:

    Code:
    test=# create function text2int(text) returns int as $$begin if $1='t' then return 1; else return 0; end if; end;$$ language plpgsql;
    CREATE FUNCTION
    Zeit: 0,350 ms
    test=*# create cast (text as int) with function text2int(text) as IMPLICIT;
    CREATE CAST
    Zeit: 0,270 ms
    test=*# select 't'::text::int;
     int4
    ------
        1
    (1 Zeile)
    
    Zeit: 8,581 ms
    test=*# insert into foo (i) values ('t'::text::int);
    INSERT 0 1
    Zeit: 0,323 ms
    test=*#
    test=*# \d foo
         Tabelle »public.foo«
     Spalte |   Typ   | Attribute
    --------+---------+-----------
     i      | integer |
    
    test=*# select * from foo;
     i
    ---
     1
    (1 Zeile)
    Hmm, ich gebe zu, das ist mein erster CAST überhaupt, den ich gemacht habe. Vielleicht hilft es Dir als Anregung.

    Andreas
    --
    PostgreSQL Hosting
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    http://www.amazon.de/gp/registry/2APKFICAIYMWB
    https://www.xing.com/profile/Andreas_Kretschmer7

  3. #3
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.018

    Standard

    Also zuerst einmal: das heißt "PostgreSQL" oder kurz "Postgres". Das "Postgre" ist keine Abkürzung sondern schlicht falsch ;-)

    Und zu deinem Problem: ich habe da schon mal was geschrieben zu:

    BOOLEAN datatype with PHP-compatible output - ads' corner

    Als Belohnung (für mich) darfst du jetzt das Buch aus meiner Signatur bestellen, dort wird das nämlich alles schön erklärt ;-)




    /me geht jetzt wieder an den Strand und genießt Sonne
    Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören

    Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

    PostgreSQL Service & Support

  4. #4
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Nähe Dresden
    Beiträge
    5.330

    Standard

    Zitat Zitat von akretschmer Beitrag anzeigen
    Die saubere Lösung wäre, den Code aufzuräumen. Aber vielleicht geht auch ein CAST:

    [
    Ja, ich Dussel dachte nach dem abschicken auch schon an ads ;-)

    Andreas
    --
    PostgreSQL Hosting
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    http://www.amazon.de/gp/registry/2APKFICAIYMWB
    https://www.xing.com/profile/Andreas_Kretschmer7

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Links: Tobias Bauer - IT- und Funkdienstleistungen   -   Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen   -   Funkforum