Page 1 of 1

Insert-Problem mit jvx 2.5.1 und Postgres 9.5

PostPosted: Mon Sep 19, 2016 1:48 pm
by mzeller
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

Re: Insert-Problem mit jvx 2.5.1 und Postgres 9.5

PostPosted: Mon Sep 19, 2016 2:04 pm
by Support@SIB
Wie sieht das create statement der Tabelle aus?

Re: Insert-Problem mit jvx 2.5.1 und Postgres 9.5

PostPosted: Mon Sep 19, 2016 2:15 pm
by mzeller
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

Re: Insert-Problem mit jvx 2.5.1 und Postgres 9.5

PostPosted: Mon Sep 19, 2016 2:56 pm
by Support@SIB
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.

Re: Insert-Problem mit jvx 2.5.1 und Postgres 9.5

PostPosted: Mon Sep 19, 2016 2:59 pm
by Support@SIB
Wie wurde billing_type definiert?

Re: Insert-Problem mit jvx 2.5.1 und Postgres 9.5

PostPosted: Mon Sep 19, 2016 3:14 pm
by mzeller
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?

Re: Insert-Problem mit jvx 2.5.1 und Postgres 9.5

PostPosted: Mon Sep 19, 2016 3:38 pm
by Support@SIB
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.

Re: Insert-Problem mit jvx 2.5.1 und Postgres 9.5

PostPosted: Mon Sep 19, 2016 4:28 pm
by mzeller
Verstehe ich das richtig:
ihr verwendet die postgres db 9.4.9 auch mit dem Treiber 9.0-801.jdbc3 ?

Re: Insert-Problem mit jvx 2.5.1 und Postgres 9.5

PostPosted: Tue Sep 20, 2016 4:21 pm
by mzeller
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?

Re: Insert-Problem mit jvx 2.5.1 und Postgres 9.5

PostPosted: Tue Sep 20, 2016 5:04 pm
by jvxdev
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.

Re: Insert-Problem mit jvx 2.5.1 und Postgres 9.5

PostPosted: Tue Sep 20, 2016 5:08 pm
by Development@SIB
Wir werden ganz einfach mit 9.5 und dem aktuellsten Treiber testen. Mal sehen woran das Problem liegt.

Re: Insert-Problem mit jvx 2.5.1 und Postgres 9.5

PostPosted: Wed Sep 21, 2016 12:00 am
by rjahn
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.