between in 8.1.8 und 8.3.5

Hat sich in den o.g. Versionen irgendetwas am Verhalten einer Abfrage mit between geändert?

Folgendes funktioniert unter 8.1.8 (Linux) fehlerfrei:

SELECT * FROM fahrzeug WHERE (ez is not null) AND (fahrzeug."status" BETWEEN 1 AND 8) ORDER BY ez LIMIT 5

Datentyp von Status ist varchar(1)

Unter 8.3.5 (Windows) läuft diese Abfrage nicht mehr. Folgender Fehler wird generiert.

HINT:  Kein Operator stimmt mit dem angegebenen Namen und den Argumenttypen überein. Sie müssen möglicherweise ausdrückliche Typumwandlungen hinzufügen.

Wurde das vorher intern gecastet und jetzt nicht mehr? Denn BETWEEN ‘1’ AND ‘8’ tuts unter 8.3.5.

Die Abfrage wird von Ruby in Rails generiert, und läuft eben jetzt auf meinem Testsystem nicht mehr. Frage mich halt wo jetzt der Fehler passiert, bzw. warum es auf der Linux Version wie generiert läuft, aber auf einem aktuellen System nicht mehr.

Exakt.

Andreas

Ok. Das ist aber eine gemeine Falle. :wink: Dann hatte der “Designfehler” varchar(1) bisher eben keine Auswirkung und kann so wie es aussieht mit einer Änderung auf Integer behoben werden.

Wird so eine Änderung eigentlich still und leise eingeführt oder gibts das irgendwo zum nachlesen? In den Changelogs hab ich mal diesbezüglich nichts gesehen. Oder hab ichs überlesen?

http://www.postgresql.org/docs/8.3/static/release.html

Danke für die Bestätigung der Theorie.

Nein, Ja. Ja.
PostgreSQL: Documentation: Manuals: PostgreSQL 8.3: Release 8.3
E.7.2.1. General
Non-character data types are no longer automatically cast to TEXT (Peter, Tom)

Andreas

Ok. Wie immer Danke fürs Erleuchten. Weiss zwar jetzt nicht wieso ich das überlesen konnte. Aber wahrscheinlich schon vorher zuviel Input.

Danke nochmal.