Uzyskiwanie błędu podczas próby pobierania danych Meta Tabela.

Korzystanie z: Jooq 3.14.0, Post PostgesQL 12, sterownik PostgreSQL 42.2.10

Przykład:

@RestController
@ApiVersion("v2")
public class TypeResource {
    private final DSLContext ctx;

    @GetMapping(value = "/test")
    public void test(@RequestParam String table) {
        ctx.meta().getTables(table);
    }
}

Błąd (to nie jest cały błąd, ale reszta jest podobna):

17:16:44.808 [http-nio-8181-exec-5] [WARN ] org.jooq.impl.MetaImpl - Default value            : Could not load default value: '{}'::character varying[] for type: varchar ([Ljava.lang.String;)
org.jooq.exception.DataTypeException: Cannot convert from '{}'::character varying[] (class java.lang.String) to class [Ljava.lang.String;
    at org.jooq.tools.Convert$ConvertAll.fail(Convert.java:1303)
    at org.jooq.tools.Convert$ConvertAll.from(Convert.java:1192)
    at org.jooq.tools.Convert.convert0(Convert.java:392)
    at org.jooq.tools.Convert.convert(Convert.java:384)
    at org.jooq.tools.Convert.convert(Convert.java:458)
    at org.jooq.impl.AbstractDataType.convert(AbstractDataType.java:534)
    at org.jooq.impl.DefaultDataType.convert(DefaultDataType.java:86)
    at org.jooq.impl.DSL.val(DSL.java:24373)
    at org.jooq.impl.DSL.inline(DSL.java:23891)
    at org.jooq.impl.MetaImpl$MetaTable.init(MetaImpl.java:910)
    at org.jooq.impl.MetaImpl$MetaTable.<init>(MetaImpl.java:560)
    at org.jooq.impl.MetaImpl$MetaSchema.getTables(MetaImpl.java:421)
    at org.jooq.impl.MetaImpl.getTables0(MetaImpl.java:217)
    at org.jooq.impl.AbstractMeta$4.iterator(AbstractMeta.java:194)
    at org.jooq.impl.AbstractMeta.get(AbstractMeta.java:340)
    at org.jooq.impl.AbstractMeta.initTables(AbstractMeta.java:191)
    at org.jooq.impl.AbstractMeta.getTables(AbstractMeta.java:172)
    at org.jooq.impl.AbstractMeta.getTables(AbstractMeta.java:167)
17:16:44.843 [http-nio-8181-exec-5] [WARN ] org.jooq.impl.MetaImpl - Default value            : Could not load default value: '{{0,0}}'::numeric[] for type: numeric ([Ljava.math.BigDecimal;)
org.jooq.exception.DataTypeException: Cannot convert from '{{0,0}}'::numeric[] (class java.lang.String) to class [Ljava.math.BigDecimal;
    at org.jooq.tools.Convert$ConvertAll.fail(Convert.java:1303)
    at org.jooq.tools.Convert$ConvertAll.from(Convert.java:1192)
    at org.jooq.tools.Convert.convert0(Convert.java:392)
    at org.jooq.tools.Convert.convert(Convert.java:384)
    at org.jooq.tools.Convert.convert(Convert.java:458)
    at org.jooq.impl.AbstractDataType.convert(AbstractDataType.java:534)
    at org.jooq.impl.DefaultDataType.convert(DefaultDataType.java:86)
    at org.jooq.impl.DSL.val(DSL.java:24373)
    at org.jooq.impl.DSL.inline(DSL.java:23891)
    at org.jooq.impl.MetaImpl$MetaTable.init(MetaImpl.java:910)
    at org.jooq.impl.MetaImpl$MetaTable.<init>(MetaImpl.java:560)
    at org.jooq.impl.MetaImpl$MetaSchema.getTables(MetaImpl.java:421)
    at org.jooq.impl.MetaImpl.getTables0(MetaImpl.java:217)
    at org.jooq.impl.AbstractMeta$4.iterator(AbstractMeta.java:194)
    at org.jooq.impl.AbstractMeta.get(AbstractMeta.java:340)
    at org.jooq.impl.AbstractMeta.initTables(AbstractMeta.java:191)
    at org.jooq.impl.AbstractMeta.getTables(AbstractMeta.java:172)
    at org.jooq.impl.AbstractMeta.getTables(AbstractMeta.java:167)
    

Przykładowa tabela Utwórz skrypt:

CREATE TABLE public.user_role
(
    id bigint NOT NULL DEFAULT nextval('user_role_id_seq'::regclass),
    user_id bigint NOT NULL,
    role_id bigint NOT NULL,
    ts_created timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP,
    ts_updated timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP,
    updated_by_user character varying(256) COLLATE pg_catalog."default" NOT NULL DEFAULT 'n/a'::character varying,
    updated_by_process character varying(64) COLLATE pg_catalog."default" NOT NULL DEFAULT 'n/a'::character varying,
    CONSTRAINT user_role_pkey PRIMARY KEY (id),
    CONSTRAINT x_role_id_fk FOREIGN KEY (role_id)
        REFERENCES public.role (id) MATCH FULL
        ON UPDATE NO ACTION
        ON DELETE NO ACTION,
    CONSTRAINT x_user_id_fk FOREIGN KEY (user_id)
        REFERENCES public."user" (id) MATCH FULL
        ON UPDATE NO ACTION
        ON DELETE NO ACTION
)

TABLESPACE pg_default;

ALTER TABLE public.user_role
    OWNER to postgres;

CREATE UNIQUE INDEX x_role_user_id_role_id_uq
    ON public.user_role USING btree
    (user_id ASC NULLS LAST, role_id ASC NULLS LAST)
    TABLESPACE pg_default;

Początkowo moim celem było uzyskanie indeksów stołowych i to działa dobrze. Próbowałem zaktualizować Jooq z 3.13.1 do 3.14.0 i przetestowany z różnymi tabelami w bazie danych, ale bez szczęścia.

2
Ivaylo Hristov 27 październik 2020, 19:46

1 odpowiedź

Najlepsza odpowiedź

Jest to błąd, który zostanie naprawiony w Jooq 3.15 Via https://github.com/jooq/ Jooq / problemy / 8469. Jooq Obecnie zakłada, że opisy kolumn DatabaseMetaData wytwarzają wartości dla wyrażeń DEFAULT, zamiast wyrażeń.

Bug jest "kosmetyczny", ponieważ wpływa tylko na twoje dzienniki. Pole jest nadal prawidłowo produkowane (bez wyrażenia {x0}}). Możesz wyciszyć wiadomość w konfiguracji rejestratora, aż powyższy błąd zostanie naprawiony.

2
Lukas Eder 28 październik 2020, 14:46