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.
Die saubere Lösung wäre, den Code aufzuräumen. Aber vielleicht geht auch ein CAST:
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.