gbase8s-gorm适配问题:成功连接后,出现大量表字段找不到问题
为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【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语句,可以使得建表后的表字段名称都是大写的,需要大小写完全敏感
评论
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语法和格式的问题,还是什么,希望您可以解答:
1、您这两个回答是必须同时满足?还是满足其一就可以了?

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的写法是否有问题,有问题的话希望可以指正出来,修改后我再运行试试?

问题就是在这里,期望运行建表sql后表内字段名称都是大写的,也就是sql内的字段写法
正常国产类数据库 达梦、人大金仓、神舟我都适配过了,字段加双引号可以强制建表后的字段是大写的,也就是sql内的字段名称,我想 gabse肯定也有相应的建表sql语句来保证运行建表sql后的语句是大写的,只是我不知道怎么写,需要官网技术人员来解答下
热门帖子
- 12025-12-01浏览数:182759
- 22023-05-09浏览数:25044
- 42023-09-25浏览数:18519
- 52020-05-11浏览数:17526