在 TEIID 中使用默认值会抛出 TeiidSQLException

问题描述

我收到以下错误:

Caused by: org.teiid.jdbc.TeiidSQLException: TEIID31100 Parsing error: Encountered "insert into \"form\".\"form_insertdefault_1\" [*]default[*] values"

我只需要用默认值填充表,手动插入工作正常。 INSERT INTO form.form_insertdefault_1 DEFAULT VALUES; 我使用 postgresql 数据库和 JOOQ (InsertQuery.setDefaultValues()) 进行数据库映射。

解决方法

TEIID 不是 jOOQ 中支持的方言,而且我认为 PostgreSQL 方言不会让你走得太远,因为很多 PostgreSQL 东西是多么具体。我会尝试使用 H2 或 HSQLDB 方言。

在任何情况下,如果您想在不受支持的方言上运行 jOOQ,您必须自己进行很多模拟,例如这个模拟。您可以为每列列出 DEFAULT VALUES(使用 DSL.default_())表达式,而不是只有极少数 RDBMS 本身支持的 DEFAULT。无论如何,这就是 jOOQ 对大多数方言所做的。例如

insert into form.form_insertdefault_1 (col1,col2,col3)
values (default,default,default);

甚至,只列出一列:

insert into form.form_insertdefault_1 (col1)
values (default);

或者,如果 DEFAULT 也不受支持,请选择一个没有附加到其定义的 DEFAULT 表达式的任意可空列,并插入 NULL,在那里:

insert into form.form_insertdefault_1 (nullable_non_defaulted_column)
values (null);

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...