GBase 8s
适配迁移
问答

gbase8s-gorm适配问题:成功连接后,出现大量表字段找不到问题

发表于2025-12-16 17:48:43185次浏览29个评论

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。

【GBase版本】:363

【操作系统】: centos7.6

【CPU】:4核

【问题描述】*: 已经通过配置环境变量、包下载成功使用gorm链接访问到了数据库层,但是进行sql语句的查询等操作时,提示的是相关的字段不存在

目前我们存在 gorm结构体的相关字段对应到数据库表字段要求全部是大写字段,类似于这样的(这里我只是一个简单的类比):
type DsConferConferinfo struct {

Id int64 `gorm:"column:ID;primaryKey" json:"id"` //主键

ConferId string `gorm:"column:CONFER_ID;size:255" json:"confer_id"` //会议ID

Elogo string `gorm:"column:ELOGO;size:255" json:"elogo"` //服务器logo

RoomId string `gorm:"column:ROOM_ID;size:255" json:"room_id"` //房间ID

Url string `gorm:"column:URL;size:255" json:"url"` //会议链接

Type string `gorm:"column:TYPE;size:255" json:"type"` //会议类型 即时会议、预约会议、直播会议

Status string `gorm:"column:STATUS;size:255" json:"status"` //会议状态 over、doing

}

在进行相关的gbase8s数据库表创建时,使用的建表sql语句如下(期望表内是全大写的表字段名称,但是实际运行创建后,全部都是小写的):
CREATE TABLE ds_confer_conferinfo (

ID SERIAL PRIMARY KEY,

CONFER_ID VARCHAR(255) NOT NULL,

ELOGO VARCHAR(255) NOT NULL,

ROOM_ID VARCHAR(255) NOT NULL,

URL VARCHAR(255) DEFAULT '' NOT NULL,

TYPE VARCHAR(255) NOT NULL,

STATUS VARCHAR(255) NOT NULL

);

我有尝试去给 字段名称加双引号,但是提示语法错误

 

期望的是 建表后的表内字段都是纯大写的,需要如何编写建表sql语句? 或者需要做哪些数据库的设置呢?

 

因为经过gorm转化后,统一使用的sql语句是类似这样的:
UPDATE "ds_confer_conferinfo" SET "STATUS"='over',"END_DATE"=1765876067077 WHERE "ELOGO" = 'bxy' AND "FIRE_DATE" <= 1765876067077 AND "STATUS" != 'over' AND "IP_PORT" = '151.1.1.1'

其对应到数据库目前的字段值是不适配的,提示:
 gorm@v1.30.0/callbacks.go:134   SQL执行出错: UPDATE "ds_confer_conferinfo" SET "STATUS"='over',"END_DATE"=1765876067077 WHERE "ELOGO" = 'bxy' AND "FIRE_DATE" <= 1765876067077 AND "STATUS" != 'over' AND "IP_PORT" = ‘151.1.1.1’ | 影响行数: 0 | 耗时: 139.981297ms | 错误: ERROR: -217:  IX000 : Column (STATUS) not found in any table in the query (or SLV is undefined).  

目前希望解决的问题是:
如何编写sql语句(或者如何设置当前的某个数据库),可以使得数据库内的表字段名称都完全是大写,而不是还是小写,导致与gorm的无法匹配

 

期待您的答复,因为没有看到相关的数据库配置文档来说明这个问题:如何编写相关sql语句,可以使得建表后的表字段名称都是大写的,需要大小写完全敏感

评论

登录后才可以发表评论
用户头像
路路路发表于 7个月前
稍等技术回复
用户头像
琳大大发表于 7个月前
双引号内严格区分大小写,需要与数据库大小写保持一致。
卜锦元发表于 7个月前
@琳大大:是的,我明白这点,所以我有使用双引号来实现数据库建表的字段大写内容,但是出现了语法错误,我的建表sql如下:
CREATE TABLE "DS_CONFER_CONFERINFO" (
"ID" SERIAL PRIMARY KEY,
"CONFER_ID" VARCHAR(255) NOT NULL,
"ELOGO" VARCHAR(255) NOT NULL,
"ROOM_ID" VARCHAR(255) NOT NULL,
"URL" VARCHAR(255) DEFAULT '' NOT NULL,
"TYPE" VARCHAR(255) NOT NULL,
"STATUS" VARCHAR(255) NOT NULL
);
但是还是出现了语法错误:
org.jkiss.dbeaver.model.sql.DBSQLException: SQL 错误 [42000]: 发生语法错误。
at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCStatementImpl.executeStatement(JDBCStatementImpl.java:130)
at org.jkiss.dbeaver.ui.editors.sql.execute.SQLQueryJob.executeStatement(SQLQueryJob.java:631)
at org.jkiss.dbeaver.ui.editors.sql.execute.SQLQueryJob.lambda$2(SQLQueryJob.java:522)
at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:192)
at org.jkiss.dbeaver.ui.editors.sql.execute.SQLQueryJob.executeSingleQuery(SQLQueryJob.java:541)
at org.jkiss.dbeaver.ui.editors.sql.execute.SQLQueryJob.extractData(SQLQueryJob.java:1007)
at org.jkiss.dbeaver.ui.editors.sql.SQLEditor$QueryResultsContainer.readData(SQLEditor.java:4271)
at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.lambda$0(ResultSetJobDataRead.java:128)
at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:192)
at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.run(ResultSetJobDataRead.java:126)
at org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer$ResultSetDataPumpJob.run(ResultSetViewer.java:5166)
at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)
Caused by: java.sql.SQLException: 发生语法错误。
at com.gbasedbt.util.IfxErrMsg.getSQLException(IfxErrMsg.java:409)
at com.gbasedbt.jdbc.IfxSqli.a(IfxSqli.java:3577)
at com.gbasedbt.jdbc.IfxSqli.D(IfxSqli.java:3857)
at com.gbasedbt.jdbc.IfxSqli.dispatchMsg(IfxSqli.java:2747)
at com.gbasedbt.jdbc.IfxSqli.receiveMessage(IfxSqli.java:2672)
at com.gbasedbt.jdbc.IfxSqli.executeExecute(IfxSqli.java:2575)
at com.gbasedbt.jdbc.IfxSqli.executeExecute(IfxSqli.java:2555)
at com.gbasedbt.jdbc.IfxResultSet.b(IfxResultSet.java:374)
at com.gbasedbt.jdbc.IfxStatement.a(IfxStatement.java:1412)
at com.gbasedbt.jdbc.IfxStatement.executeImpl(IfxStatement.java:1384)
at com.gbasedbt.jdbc.IfxStatement.c(IfxStatement.java:1003)
at com.gbasedbt.jdbc.IfxStatement.execute(IfxStatement.java:921)
at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCStatementImpl.execute(JDBCStatementImpl.java:344)
at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCStatementImpl.executeStatement(JDBCStatementImpl.java:128)
... 12 more
Caused by: java.sql.SQLException
at com.gbasedbt.util.IfxErrMsg.getSQLException(IfxErrMsg.java:409)
at com.gbasedbt.jdbc.IfxSqli.D(IfxSqli.java:3862)
... 23 more
我的gorm打印出来的sql语句已经是严格按照双引号内严格区分大小写,但是数据库没有办法创建大写的字段名称的表相关内容。
这是gorm打印的严格区分大小写的sql语句:
UPDATE "ds_confer_conferinfo" SET "STATUS"='over',"END_DATE"=1765876067077 WHERE "ELOGO" = 'bxy' AND "FIRE_DATE" <= 1765876067077 AND "STATUS" != 'over' AND "IP_PORT" = '151.1.1.1'

目前问题是 建表sql 无法创建大写的字段名称,不知道是我编写sql语法和格式的问题,还是什么,希望您可以解答:

用户头像
琳大大发表于 7个月前
@卜锦元:在客户端工具,需要加DELIMIDENT参数后再加双引号创建表;在server端需要设置环境变量:export DELIMIDENT=1后,再进行建表
最佳回答
卜锦元发表于 7个月前
@琳大大:好的,我试试,
1、您这两个回答是必须同时满足?还是满足其一就可以了?
用户头像
琳大大发表于 7个月前
@卜锦元:需要看您是在哪块建表,就按哪个操作就行。主要就是要加上这个参数建表带双引号才不报语法错误
卜锦元发表于 7个月前
@琳大大:我下载了官网的客户端链接工具,进行了下面截图内的sql运行,设置了DELIMIDENT参数,但是提示语法错误,具体的错误截图,如下,期待您的回复,临门一脚了:
卜锦元发表于 7个月前
@琳大大:我在客户端链接工具内运行的sql语句如下:
DATABASE dataserver;
SET DELIMIDENT ON;

CREATE TABLE "DS_CONFER_CONFERINFO" (
"ID" SERIAL PRIMARY KEY,
"CONFER_ID" VARCHAR(255) NOT NULL,
"ELOGO" VARCHAR(255) NOT NULL,
"ROOM_ID" VARCHAR(255) NOT NULL,
"STATUS" VARCHAR(255) NOT NULL
);

如果是要在客户端工具界面进行您上面说的:“需要加DELIMIDENT参数后再加双引号创建表”,辛苦给我说下在界面哪里可以操作设置

如果就是在sql语句内设置参数的话,您看下我当前的sql语句编写语法与设置DELIMIDENT的写法是否有问题,有问题的话希望可以指正出来,修改后我再运行试试?
用户头像
琳大大发表于 7个月前
@卜锦元:建表语句没问题的。客户端 工具设置的值写 y
用户头像
琳大大发表于 7个月前
@卜锦元
用户头像
GBase用户28017发表于 7个月前
@卜锦元:牛。
用户头像
GBase用户28017发表于 7个月前
@卜锦元:太牛。
GBase用户21143发表于 7个月前
等大佬来回答
枫溪发表于 7个月前
1
枫溪发表于 7个月前
2
枫溪发表于 7个月前
3
枫溪发表于 7个月前
4
枫溪发表于 7个月前
5
用户头像
GBase用户28017发表于 7个月前
创建表时最好不要用关键字。不要加引号(双绰号,单引号,反引号)
卜锦元发表于 7个月前
@GBase用户28017:不加引号可以成功创建,但是表内的字段都是小写的,即是我建表语句是大写的
问题就是在这里,期望运行建表sql后表内字段名称都是大写的,也就是sql内的字段写法
正常国产类数据库 达梦、人大金仓、神舟我都适配过了,字段加双引号可以强制建表后的字段是大写的,也就是sql内的字段名称,我想 gabse肯定也有相应的建表sql语句来保证运行建表sql后的语句是大写的,只是我不知道怎么写,需要官网技术人员来解答下
GBase用户31099发表于 7个月前
1
GBase用户31099发表于 7个月前
2
GBase用户31099发表于 7个月前
3
GBase用户31099发表于 7个月前
4
GBase用户31099发表于 7个月前
5
用户头像
GBase用户28017发表于 7个月前
太强。
用户头像
GBase用户28017发表于 7个月前
引号标识 。
用户头像
levvel发表于 4个月前
分析得很到位!
菲菲发表于 2个月前
看看啦。