Insert-Problem mit jvx 2.5.1 und Postgres 9.5

Allgemeine Fragen zur Entwicklung von und mit JVx.

Insert-Problem mit jvx 2.5.1 und Postgres 9.5

Postby mzeller » Mon Sep 19, 2016 1:48 pm

Hallo,

ich entwickle mit jvx 2.5.1 und PostgreSQL 9.5

Ich bekomme folgende Exception:

Code: Select all
Caused by: javax.rad.persist.DataSourceException: Insert failed! - INSERT INTO billing (customer_id, subsidiary_id, customer_name, customer_address, customer_zip, customer_city, customer_vat_id, type, cost_centre, ordered_by) VALUES (?,?,?,?,?,?,?,?,?,?) RETURNING id
   at com.sibvisions.rad.persist.jdbc.PostgreSQLDBAccess.insertPostgres(PostgreSQLDBAccess.java:259)
   at com.sibvisions.rad.persist.jdbc.PostgreSQLDBAccess.insertDatabaseSpecific(PostgreSQLDBAccess.java:116)
   at com.sibvisions.rad.persist.jdbc.DBAccess.insert(DBAccess.java:1971)
   at com.sibvisions.rad.persist.jdbc.DBStorage.executeInsert(DBStorage.java:644)
   at com.sibvisions.rad.persist.AbstractStorage.insert(AbstractStorage.java:166)
....


mit dieser Rückmeldung von der Datenbank:

Code: Select all
PostgreSQL-42804: FEHLER: Spalte »type« hat Typ billing_type, aber der Ausdruck hat Typ character varying
  Hinweis: Sie müssen den Ausdruck umschreiben oder eine Typumwandlung vornehmen.
  Position: 189


So wie ich das sehe, müsste das das generierte Insert in diesem Fall mit einem Cast versehen werden oder nicht?

So wie in diesem Beispiel:
Code: Select all
INSERT INTO pet (pet_id, pet_type, name)
         VALUES (?, CAST(? AS animal_type), ?);

--or

INSERT INTO pet (pet_id, pet_type, name)
         VALUES (?, ?::animal_type, ?);


Ist dieses Problem noch nie aufgetreten oder hängt das mit der Datenbankversion zusammen?

Danke
Martin
mzeller
 
Posts: 22
Joined: Tue Apr 19, 2016 10:48 am
Location: Vienna

Re: Insert-Problem mit jvx 2.5.1 und Postgres 9.5

Postby Support@SIB » Mon Sep 19, 2016 2:04 pm

Wie sieht das create statement der Tabelle aus?
User avatar
Support@SIB
 
Posts: 198
Joined: Mon Sep 28, 2009 1:56 pm

Re: Insert-Problem mit jvx 2.5.1 und Postgres 9.5

Postby mzeller » Mon Sep 19, 2016 2:15 pm

Hallo,

ich habe herausgefunden, dass es mit Postgres 9.1 und dem Treiber mit der Version 9.1-901.jdbc4 funktioniert.

Das CREATE sieht so aus:

Code: Select all
CREATE TABLE public.billing
(
  id integer NOT NULL DEFAULT nextval('billing_id_seq'::regclass),
  customer_id integer NOT NULL,
  subsidiary_id integer,
  customer_name text NOT NULL,
  customer_address text NOT NULL,
  customer_zip text NOT NULL,
  customer_city text NOT NULL,
  customer_vat_id text,
  date date NOT NULL DEFAULT now(),
  billing_state_id integer NOT NULL DEFAULT 1,
  type billing_type NOT NULL,
  billing_number text,
  sum_net_before_discount money,
  sum_net_discount money,
  sum_net_after_discount money,
  basis_tax_0 money,
  basis_tax_10 money,
  basis_tax_20 money,
  sum_tax_0 money,
  sum_tax_10 money,
  sum_tax_20 money,
  sum_gross money,
  discount percent2,
  "number" bigint,
  cost_centre text,
  ordered_by text,
  CONSTRAINT billing_pkey PRIMARY KEY (id),
  CONSTRAINT billing_billing_state_id_fkey FOREIGN KEY (billing_state_id)
      REFERENCES public.billing_state (id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION,
  CONSTRAINT billing_customer_id_fkey FOREIGN KEY (customer_id)
      REFERENCES public.customer (id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION,
  CONSTRAINT billing_subsidiary_id_fkey FOREIGN KEY (subsidiary_id)
      REFERENCES public.subsidiary (id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION,
  CONSTRAINT billing_billing_number_key UNIQUE (billing_number),
  CONSTRAINT billing_unique_type_number UNIQUE (type, number)
)
WITH (
  OIDS=FALSE
);


Gibt es eine Liste von unterstützten Postgres-Versionen und -Treibern?
(Ich würde nämlich gerne mit möglichst aktuellen Versionen arbeiten)

Danke
Martin
mzeller
 
Posts: 22
Joined: Tue Apr 19, 2016 10:48 am
Location: Vienna

Re: Insert-Problem mit jvx 2.5.1 und Postgres 9.5

Postby Support@SIB » Mon Sep 19, 2016 2:56 pm

Spezielle Datentypen werden von JVx nicht gesondert behandelt, zB billing_type

Wir empfehlen immer die aktuellen JDBC Treiber zu verwenden, haben aber keine Kompatibilitätsliste oder ähnliches. Das ist auch eher die Aufgabe der Hersteller.
User avatar
Support@SIB
 
Posts: 198
Joined: Mon Sep 28, 2009 1:56 pm

Re: Insert-Problem mit jvx 2.5.1 und Postgres 9.5

Postby Support@SIB » Mon Sep 19, 2016 2:59 pm

Wie wurde billing_type definiert?
User avatar
Support@SIB
 
Posts: 198
Joined: Mon Sep 28, 2009 1:56 pm

Re: Insert-Problem mit jvx 2.5.1 und Postgres 9.5

Postby mzeller » Mon Sep 19, 2016 3:14 pm

billing_type ist so definiert:

Code: Select all
CREATE TYPE public.billing_type AS ENUM
   ('Auftrag',
    'Lieferschein',
    'Rechnung',
    'Gutschrift');


Mit welcher Version DB + Treiber testet ihr eigentlich intern?
mzeller
 
Posts: 22
Joined: Tue Apr 19, 2016 10:48 am
Location: Vienna

Re: Insert-Problem mit jvx 2.5.1 und Postgres 9.5

Postby Support@SIB » Mon Sep 19, 2016 3:38 pm

Verschieden.

In JVx ist der JDBC Treiber mit Version: 9.0-801.jdbc3 zu finden.
Die DB Versionen sind 8.4.20, 9.3.10, 9.4.9 - Linux, Windows

Es gibt in JVx auch enum tests für PostgreSQL:

Code: Select all
CREATE TYPE mood AS ENUM ('sad', 'ok', 'happy');
CREATE TYPE yesno AS ENUM ('Y', 'N');

CREATE TABLE person (
   name text,
   current_mood mood,
   active yesno
);

Mit unseren DB Versionen bzw. dem eingesetzten JDBC Treiber sind alle JUnit Tests im grünen Bereich.
User avatar
Support@SIB
 
Posts: 198
Joined: Mon Sep 28, 2009 1:56 pm

Re: Insert-Problem mit jvx 2.5.1 und Postgres 9.5

Postby mzeller » Mon Sep 19, 2016 4:28 pm

Verstehe ich das richtig:
ihr verwendet die postgres db 9.4.9 auch mit dem Treiber 9.0-801.jdbc3 ?
mzeller
 
Posts: 22
Joined: Tue Apr 19, 2016 10:48 am
Location: Vienna

Re: Insert-Problem mit jvx 2.5.1 und Postgres 9.5

Postby mzeller » Tue Sep 20, 2016 4:21 pm

Also ich habe nun verschiedene Treiberversionen durchprobiert.
Der aktuellste Treiber, der für mich mit Postgres 9.5 funktioniert ist die Version:
9.2-1004-jdbc41
Alle anderen darüber nicht mehr. Hier passiert dann genau die Exception, die ich oben angeführt habe.
Kann das jemand bestätigen?
mzeller
 
Posts: 22
Joined: Tue Apr 19, 2016 10:48 am
Location: Vienna

Re: Insert-Problem mit jvx 2.5.1 und Postgres 9.5

Postby jvxdev » Tue Sep 20, 2016 5:04 pm

Hm... gibts vielleicht eine Kompatibilitäts Property? Bei Oracle gibts die immer wieder.
Sieht so aus als wäre der Umgang mit enums geändert/verbessert worden.
jvxdev
 
Posts: 19
Joined: Fri Mar 04, 2016 12:40 pm

Re: Insert-Problem mit jvx 2.5.1 und Postgres 9.5

Postby Development@SIB » Tue Sep 20, 2016 5:08 pm

Wir werden ganz einfach mit 9.5 und dem aktuellsten Treiber testen. Mal sehen woran das Problem liegt.
User avatar
Development@SIB
 
Posts: 310
Joined: Mon Sep 28, 2009 1:54 pm

Re: Insert-Problem mit jvx 2.5.1 und Postgres 9.5

Postby rjahn » Wed Sep 21, 2016 12:00 am

Mit PostgreSQL 9.5.4 und JDBC Treiber 9.0-801 funktionieren enums und alle JVx Testfälle ohne Probleme.
Mit dem aktuellsten JDBC Treiber 9.4.1211 ist der enum Support fehlerhaft.

Das liegt aber nicht an JVx sondern an einer Änderung im JDBC Treiber:

https://www.postgresql.org/message-id/C ... .gmail.com
https://github.com/pgjdbc/pgjdbc/issues/364

Der Hinweis das enums vermieden werden sollten, ist wohl nicht die Lösung. Wenn der Treiber wieder den erwarteten SQL Type liefert, funktionieren enums wieder ohne Probleme.
rjahn
 
Posts: 29
Joined: Sun Sep 13, 2009 1:54 pm


Return to Entwicklung