华为高斯Gauss数据库版本与兼容协议--详解(附带Gorm连接示例代码) - 教程

news/2025/11/4 14:22:39/文章来源:https://www.cnblogs.com/yxysuanfa/p/19190220

在这里插入图片描述

前言

  • 最近被项目上的华为高斯数据库Gauss适配快要搞疯了,版本分支太多,不同版本兼容的数据库协议还不一样,有postgres、mysql的,还有什么自定义协议、pgx的,头大的很;
  • 所以最终整理了一份详细的Gauss数据库的版本划分+兼容协议的文档,从头开始整理梳理一遍,如果你项目中恰巧也用到了华为的高斯数据库Gauss,我相信这篇文档会为你带来一定的帮助,最起码能帮大家理清楚 高斯数据库的版本划分(商用企业GaussDB 和 开源的openGauss),还有各自的兼容协议
  • 如果你恰巧还是在Golang的项目中使用Grom来操作华为高斯数据库的,那简单了,最下面的连接操作示例代码,可以直接使用
  • 我个人认为这篇文章的输出内容质量还是不错的,前提是你能静下心来阅读哈!

吐槽一下

这篇文档为啥会出现呢?

1、网上相关的资源太少了,我找半天都找不到一个完整的,能为我理清思路的文档,只能去查官网自己弄;
2、Gauss数据库的适配之路让人疯狂…

1. 项目中实际连接的数据库分析

根据我的项目中的实际连接情况分析:

1.1 成功连接的 gaussArmCustomDB 配置

dsn1 := "host=192.168.0.1 port=8007 user=datas password='qien4UhkKD)edMnK33aq' dbname=LINKDOODTEST sslmode=disable TimeZone=Asia/Shanghai"
db, err := gorm.Open(gaussdb.Open(dsn1), &gorm.Config{})

关键信息:

  • 端口:8007(非标准的5432端口)
  • 用户:datas(非默认的gaussdb用户)
  • 数据库:LINKDOODTEST
  • 支持SSL连接
  • 兼容PostgreSQL协议

1.2 数据库版本识别

通过远程连接查看到的版本信息:

GaussDB Kernel 505.2.1 build 159cea95
compiled at 2024-12-27 09:22:44

版本分析:

  • 内核版本:505.2.1
  • 构建版本:159cea95
  • 编译时间:2024-12-27
  • 版本系列:属于GaussDB 5.x系列,是企业级分布式数据库

2. 华为高斯数据库版本体系

2.1 产品系列划分

华为高斯数据库分为两大产品线:

openGauss(开源版本)
GaussDB(商业版本)
  • 定位:华为云商业数据库服务
  • 维护方:华为公司
  • 协议兼容性:PostgreSQL、MySQL(部分产品)
  • 部署方式:云原生分布式架构
  • 镜像维护地址:我也没有,只能项目合作联系官方人员

2.2 版本编号规则

openGauss版本规则
格式:x.y.z
- x:主版本号(重大架构变更)
- y:次版本号(功能增强)
- z:修订版本号(Bug修复)
GaussDB版本规则
格式:xyz.a.b
- xyz:内核版本号(如505)
- a:主要版本号
- b:次要版本号

3. openGauss版本详细信息

基于 EnmoTech Docker镜像 的版本分析:

版本发布时间主要特性协议兼容性推荐用途
1.0.02020年6月首个正式版本PostgreSQL 9.2+基础功能验证
1.0.12020年9月稳定性提升PostgreSQL 9.2+生产环境试用
1.1.02021年3月性能优化PostgreSQL 10+中小型应用
2.0.02021年9月架构重构PostgreSQL 11+大型应用
2.0.12021年12月Bug修复PostgreSQL 11+稳定生产环境
2.1.02022年3月功能增强PostgreSQL 12+企业级应用
3.0.02022年6月分布式支持PostgreSQL 13+分布式场景
3.0.32022年9月稳定性修复PostgreSQL 13+推荐生产版本
3.1.02023年3月AI增强PostgreSQL 14+AI/ML场景
3.1.12023年6月安全增强PostgreSQL 14+高安全场景
5.0.02023年12月云原生架构PostgreSQL 15+云原生应用
5.0.12024年3月性能优化PostgreSQL 15+高性能场景

3.1 版本跨越说明

注意:从3.1.1直接跳跃到5.0.0,中间跳过了4.x版本,这是华为为了与GaussDB商业版本号保持一致而做的调整。

4. 协议兼容性详解

4.1 PostgreSQL协议兼容性

完全兼容的功能
部分兼容的功能
  • 扩展插件:不是所有PostgreSQL插件都支持
  • 复制协议:支持流复制,但实现细节有差异
  • PL/pgSQL:基本兼容,但某些高级特性可能不支持
不兼容的功能

4.2 MySQL协议兼容性

GaussDB某些版本支持MySQL协议
openGauss与MySQL兼容性
  • 默认不支持:openGauss主要针对PostgreSQL协议
  • 可通过插件:某些版本可通过第三方插件支持MySQL协议

5. 项目中的数据库版本分析

5.1 GaussDB 505.2.1 版本特点

根据连接的 GaussDB Kernel 505.2.1 版本分析:

版本归属
协议支持
主要协议: PostgreSQL 14+
认证方式: SCRAM-SHA-256, MD5
连接加密: SSL/TLS
端口配置: 自定义端口8007
用户管理: 企业级用户权限体系
高级特性
  • 主备复制:支持同步/异步复制
  • 分布式事务:支持ACID事务
  • 负载均衡:支持读写分离
  • 高可用:自动故障切换
  • 数据加密:支持透明数据加密

5.2 为什么使用PostgreSQL驱动成功

项目使用以下驱动组合成功连接:

import (
"gorm.io/driver/gaussdb"          // GaussDB专用GORM驱动
_ "gitee.com/opengauss/openGauss-connector-go-pq"  // openGauss连接器
)

成功原因:

  1. 协议兼容:GaussDB 505.2.1 完全兼容PostgreSQL wire protocol
  2. 专用驱动:使用了专门的GaussDB GORM驱动
  3. 连接器支持:openGauss连接器处理了认证和协议细节
  4. 密码处理:引号包围解决了特殊字符问题

6. 部署架构对比

6.1 Docker镜像部署(EnmoTech)

架构类型: 单机/容器化部署
适用场景: 开发测试环境
版本选择: openGauss 1.0.0-5.0.1
协议支持: PostgreSQL
端口: 5432(默认)
用户: gaussdb(默认)

6.2 企业级主备部署(我的环境)

架构类型: 分布式主备架构
适用场景: 生产环境
版本: GaussDB 505.2.1
协议支持: PostgreSQL + 企业扩展
端口: 8007(自定义)
用户: datas(自定义)
特性: 高可用、负载均衡、数据加密

7. 驱动选择指南

7.1 推荐驱动组合

对于openGauss(开源版)
// 方案1:使用openGauss专用驱动
import _ "gitee.com/opengauss/openGauss-connector-go-pq"
// DSN: postgresql://user:pass@host:port/db
// 方案2:使用PostgreSQL驱动
import _ "github.com/lib/pq"
// DSN: postgres://user:pass@host:port/db
对于GaussDB(企业版)
// 推荐方案:GORM + GaussDB驱动
import "gorm.io/driver/gaussdb"
import _ "gitee.com/opengauss/openGauss-connector-go-pq"
// DSN: host=x port=x user=x password=x dbname=x

7.2 连接字符串注意事项

密码特殊字符处理
// ❌ 错误方式
password=qien4UhkKD)edMnK33aq
// ✅ 正确方式
password='qien4UhkKD)edMnK33aq'    // 单引号包围
password=qien4UhkKD%29edMnK33aq    // URL编码
端口配置
openGauss默认端口: 5432
GaussDB企业版: 通常自定义端口(如8007、54321等)

8. 版本选择建议

8.1 场景化推荐

使用场景推荐版本原因
学习测试openGauss 3.1.1功能完整、文档丰富
开发环境openGauss 5.0.1最新特性、性能优化
生产环境GaussDB 505.x企业级支持、高可用
云原生GaussDB 云服务托管服务、弹性扩缩

8.2 升级路径

openGauss 1.x
openGauss 2.x
openGauss 3.x
openGauss 5.x
GaussDB 企业版
测试环境
开发环境
预生产环境
生产环境

9. 版本与协议支持流程图

华为高斯数据库
openGauss开源版
GaussDB企业版
单机部署
主备部署
分布式部署
GaussDB for MySQL
GaussDB for PostgreSQL
GaussDB 分布式版
PostgreSQL协议
MySQL协议
PostgreSQL + 分布式扩展
端口5432
用户gaussdb
端口3306
用户root
自定义端口
企业用户体系

华为高斯数据库产品线
openGauss 开源版
GaussDB 企业版
openGauss 1.x系列
2020年6月-2020年12月
openGauss 2.x系列
2021年3月-2021年12月
openGauss 3.x系列
2022年3月-2023年6月
openGauss 5.x系列
2023年12月-至今
GaussDB for MySQL
兼容MySQL 5.7/8.0
GaussDB for PostgreSQL
兼容PostgreSQL 11+
GaussDB 505.x系列
企业分布式版本
PostgreSQL 9.2+协议
PostgreSQL 11+协议
PostgreSQL 13+协议
PostgreSQL 15+协议
MySQL 协议
端口3306
PostgreSQL 协议
端口5432
PostgreSQL + 企业扩展
自定义端口
我的环境
GaussDB 505.2.1
特征:
• 端口8007
• 用户datas
• 主备架构
• SSL支持
Go驱动选择
lib/pq
标准PostgreSQL驱动
openGauss-connector-go-pq
openGauss专用驱动
gorm.io/driver/gaussdb
GaussDB GORM驱动

驱动适配层
协议支持层次
华为高斯数据库版本演进
成功连接
dsn1方案
github.com/lib/pq
标准PostgreSQL驱动
gitee.com/opengauss/
openGauss-connector-go-pq
openGauss专用驱动
gorm.io/driver/gaussdb
GaussDB GORM驱动
github.com/go-sql-driver/mysql
MySQL驱动
基础PostgreSQL协议
• 连接认证
• SQL执行
• 事务管理
扩展PostgreSQL协议
• 流复制
• 发布订阅
• 扩展函数
企业级协议扩展
• 分布式事务
• 主备切换
• 负载均衡
MySQL协议兼容
• MySQL语法
• MySQL客户端
• MySQL工具
openGauss 1.0.0
2020年6月
PostgreSQL 9.2+
openGauss 1.0.1
2020年9月
稳定性提升
openGauss 1.1.0
2021年3月
PostgreSQL 10+
openGauss 2.0.0
2021年9月
PostgreSQL 11+
openGauss 2.0.1
2021年12月
生产稳定版
openGauss 2.1.0
2022年3月
PostgreSQL 12+
openGauss 3.0.0
2022年6月
PostgreSQL 13+
openGauss 3.0.3
2022年9月
推荐生产版
openGauss 3.1.0
2023年3月
PostgreSQL 14+
openGauss 3.1.1
2023年6月
安全增强
openGauss 5.0.0
2023年12月
PostgreSQL 15+
openGauss 5.0.1
2024年3月
性能优化
GaussDB 505.2.1
我的环境
2024年12月构建

10. 连接配置最佳实践

10.1 生产环境配置

// 推荐的生产环境配置
type GaussDBConfig struct {
Host     string `yaml:"host"`
Port     int    `yaml:"port"`
User     string `yaml:"user"`
Password string `yaml:"password"`
Database string `yaml:"database"`
SSLMode  string `yaml:"sslmode"`  // require/verify-full
TimeZone string `yaml:"timezone"`
// 连接池配置
MaxOpenConns    int           `yaml:"max_open_conns"`
MaxIdleConns    int           `yaml:"max_idle_conns"`
ConnMaxLifetime time.Duration `yaml:"conn_max_lifetime"`
}
func NewGaussDB(config *GaussDBConfig) (*gorm.DB, error) {
dsn := fmt.Sprintf(
"host=%s port=%d user=%s password='%s' dbname=%s sslmode=%s TimeZone=%s",
config.Host, config.Port, config.User,
config.Password, config.Database,
config.SSLMode, config.TimeZone,
)
db, err := gorm.Open(gaussdb.Open(dsn), &gorm.Config{
Logger: logger.Default.LogMode(logger.Info),
})
if err != nil {
return nil, err
}
sqlDB, err := db.DB()
if err != nil {
return nil, err
}
sqlDB.SetMaxOpenConns(config.MaxOpenConns)
sqlDB.SetMaxIdleConns(config.MaxIdleConns)
sqlDB.SetConnMaxLifetime(config.ConnMaxLifetime)
return db, nil
}

10.2 错误处理和重试机制

func ConnectWithRetry(config *GaussDBConfig, maxRetries int) (*gorm.DB, error) {
for i := 0; i < maxRetries; i++ {
db, err := NewGaussDB(config)
if err == nil {
return db, nil
}
log.Printf("连接失败,第%d次重试,错误: %v", i+1, err)
time.Sleep(time.Second * time.Duration(i+1))
}
return nil, fmt.Errorf("连接失败,已重试%d次", maxRetries)
}

11. 总结

11.1 我的环境特点

11.2 关键技术要点

  1. 驱动选择:使用GaussDB专用GORM驱动
  2. 密码处理:特殊字符需要引号包围
  3. 协议兼容:完全兼容PostgreSQL wire protocol
  4. 企业特性:支持高可用、负载均衡、数据加密

11.3 后续建议

  1. 监控配置:建议添加数据库连接监控
  2. 性能优化:根据业务需求调整连接池参数
  3. 安全加固:启用SSL/TLS加密连接
  4. 备份策略:制定完整的数据备份和恢复方案

12. 最终在Golang项目中使用Gorm适配Gauss数据库的代码示例(openGauss和企业商用的Gauss)都有,demo为了省事,我就写一个文件了哈

package main
import (
"fmt"
"time"
"gorm.io/driver/mysql"
"gorm.io/driver/postgres"
"gorm.io/gorm"
// 添加GaussDB专用驱动
"gorm.io/driver/gaussdb"
// 添加OpenGauss连接器
_ "gitee.com/opengauss/openGauss-connector-go-pq"
)
type Test struct {
ID   int
Name string
}
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
Theme                string `gorm:"column:THEME;size:255" json:"theme"`                                   //主题 名称
FireDate             int64  `gorm:"column:FIRE_DATE" json:"fire_date"`                                    //会议开始时间
IsPublic             int    `gorm:"column:IS_PUBLIC" json:"is_public"`                                    //是否公开
PopUiSwitch          string `gorm:"column:POP_UI_SWITCH;size:255" json:"pop_ui_switch"`                   //弹窗开关
Model                string `gorm:"column:MODEL;size:255" json:"model"`                                   //会议模板 chat聊天、micro视频会议、语音会议
FirePerson           string `gorm:"column:FIRE_PERSON;size:255" json:"fire_person"`                       //发起人ID
FirePersonName       string `gorm:"column:FIRE_PERSON_NAME;size:255" json:"fire_person_name"`             //发起人名称
PassWord             string `gorm:"column:PASS_WORD;size:255" json:"pass_word"`                           //密码
RoomType             string `gorm:"column:ROOM_TYPE;size:255" json:"room_type"`                           //房间类型 confer
Version              string `gorm:"column:VERSION;size:255" json:"version"`                               //版本号
Platform             string `gorm:"column:PLATFORM;size:255" json:"platform"`                             //平台
Provider             string `gorm:"column:PROVIDER;size:255" json:"provider"`                             //服务商
Voucher              string `gorm:"column:VOUCHER;size:255" json:"voucher"`                               //会议凭证
EndDate              int64  `gorm:"column:END_DATE" json:"end_date"`                                      //会议结束时间
GroupId              string `gorm:"column:GROUP_ID;size:255" json:"group_id"`                             //群ID
IsPushTempMsg        string `gorm:"column:ISPUSH_TEMPMSG;size:255" json:"ispush_tempmsg"`                 //是否推送临时消息
Degreeofsecrets      string `gorm:"column:DEGREEOFSECRETS;size:255" json:"degreeofsecrets"`               //保密等级
ConferTemplateStatus string `gorm:"column:CONFER_TEMPLATE_STATUS;size:255" json:"confer_template_status"` //会议模板状态
Mrid                 string `gorm:"column:MRID;size:255" json:"mrid"`                                     //会议ID s
ExpectEndDate        int    `gorm:"column:EXPECT_END_DATE" json:"expect_end_date"`                        //预计结束时间 s
IpPort               string `gorm:"column:IP_PORT;size:255" json:"ip_port"`                               //ip端口
Resolution           string `gorm:"column:RESOLUTION;size:255" json:"resolution"`                         //分辨率
}
// TableName 指定表名
func (DsConferConferinfo) TableName() string {
return "ds_confer_conferinfo"
}
func main() {
fmt.Println("Hello, World!")
// mysql数据库连接测试
mysqldb, err := mysqlDB()
if err != nil {
fmt.Println("Error connecting to MySQL:", err)
return
}
mysqldb.AutoMigrate(&Test{})
mysqldb.Create(&Test{Name: "test"})
fmt.Println("Connected to MySQL successfully!")
fmt.Println("Created test record in MySQL")
fmt.Println("--------------------------------")
// postgres数据库连接测试
postgresdb, err := postgresDB()
if err != nil {
fmt.Println("Error connecting to Postgres:", err)
return
}
fmt.Println("Connected to Postgres successfully!")
postgresdb.AutoMigrate(&Test{})
postgresdb.Create(&Test{Name: "test"})
fmt.Println("Created test record in Postgres")
fmt.Println("--------------------------------")
// 高斯数据库-linux-x86-3.1.0连接测试
gaussLinuxdb, err := gaussLinuxDB()
if err != nil {
fmt.Println("Error connecting to GaussLinux:", err)
return
}
fmt.Println("Connected to GaussLinux successfully!")
gaussLinuxdb.AutoMigrate(&Test{})
gaussLinuxdb.Create(&Test{Name: "test"})
fmt.Println("Created test record in GaussLinux")
fmt.Println("--------------------------------")
// 高斯数据库-linux-arm-3.1.0连接测试
gaussArmdb, err := gaussArmDB()
if err != nil {
fmt.Println("Error connecting to GaussArm:", err)
return
}
fmt.Println("Connected to GaussArm successfully!")
gaussArmdb.AutoMigrate(&Test{})
gaussArmdb.Create(&Test{Name: "test"})
fmt.Println("Created test record in GaussArm")
fmt.Println("--------------------------------")
// 高斯数据库-企业商用-定制连接测试
gaussArmCustomdb, err := gaussArmCustomDB()
if err != nil {
fmt.Println("Error connecting to GaussArmCustom:", err)
return
}
fmt.Println("Connected to GaussArmCustom successfully!")
gaussArmCustomdb.AutoMigrate(&Test{})
gaussArmCustomdb.Create(&Test{Name: "test"})
fmt.Println("Created test record in GaussArmCustom")
fmt.Println("--------------------------------")
// 测试ds_confer_conferinfo表的增删改查
testConferInfo(gaussArmCustomdb)
}
// mysql数据库连接测试
func mysqlDB() (*gorm.DB, error) {
fmt.Println("Hello, mysql!")
dsn := "root:admin123456789@tcp(127.0.0.1:3306)/ceshi?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
fmt.Println("Error connecting to MySQL:", err)
return nil, err
}
fmt.Println("Connected to MySQL successfully!")
return db, err
}
// postgres数据库连接测试
func postgresDB() (*gorm.DB, error) {
fmt.Println("Hello, postgres!")
dsn := "host=192.168.0.1 user=vrvmees password=admin123456789 dbname=datas port=5432 sslmode=disable TimeZone=Asia/Shanghai"
db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{})
if err != nil {
fmt.Println("Error connecting to Postgres:", err)
return nil, err
}
fmt.Println("Connected to Postgres successfully!")
return db, err
}
// 高斯数据库-linux-x86-3.1.0
func gaussLinuxDB() (*gorm.DB, error) {
fmt.Println("Hello, gaussLinux!")
dsn := "host=192.168.0.1 port=54323 user=root password=Admin@123456789 dbname=datas sslmode=disable TimeZone=Asia/Shanghai"
db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{})
if err != nil {
fmt.Println("Error connecting to GaussLinux:", err)
return nil, err
}
fmt.Println("Connected to GaussLinux successfully!")
return db, err
}
// 高斯数据库-linux-arm-3.1.0
func gaussArmDB() (*gorm.DB, error) {
fmt.Println("Hello, gaussArm!")
dsn := "host=192.168.0.1 port=54321 user=gaussdb password=Gauss@123456789 dbname=datas sslmode=disable TimeZone=Asia/Shanghai"
db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{})
if err != nil {
fmt.Println("Error connecting to GaussArm:", err)
return nil, err
}
fmt.Println("Connected to GaussArm successfully!")
return db, err
}
// 高斯数据库-企业商用-定制
func gaussArmCustomDB() (*gorm.DB, error) {
fmt.Println("Hello, gaussArmCustom!")
// 方法1: 使用URL编码处理特殊字符
dsn1 := "host=192.168.0.1 port=8007 user=datas password='admin@1234556772' dbname=test sslmode=disable TimeZone=Asia/Shanghai"
fmt.Println("尝试方法1: 密码加引号")
db, err := gorm.Open(gaussdb.Open(dsn1), &gorm.Config{})
if err != nil {
fmt.Printf("方法1失败: %v\n", err)
// 方法2: URL编码密码
dsn2 := "host=192.168.0.1 port=8007 user=datas password=qien4UhkKD%29edMnK12asq dbname=LINKDOODTEST sslmode=disable TimeZone=Asia/Shanghai"
fmt.Println("尝试方法2: URL编码密码")
db, err = gorm.Open(gaussdb.Open(dsn2), &gorm.Config{})
if err != nil {
fmt.Printf("方法2失败: %v\n", err)
// 方法3: 移除options参数
dsn3 := "host=192.168.0.1 port=8007 user=datas password=qien4UhkKD)edMnK12asq dbname=LINKDOODTEST sslmode=disable"
fmt.Println("尝试方法3: 移除时区设置")
db, err = gorm.Open(gaussdb.Open(dsn3), &gorm.Config{})
if err != nil {
fmt.Printf("方法3失败: %v\n", err)
// 方法4: 使用postgresql://格式
dsn4 := "postgresql://datas:qien4UhkKD%29edMnK12asq@192.168.0.1:8007/LINKDOODTEST?sslmode=disable"
fmt.Println("尝试方法4: postgresql:// URL格式")
db, err = gorm.Open(gaussdb.Open(dsn4), &gorm.Config{})
if err != nil {
fmt.Printf("方法4失败: %v\n", err)
// 方法5: 尝试MySQL驱动 (GaussDB可能兼容MySQL协议)
fmt.Println("尝试方法5: MySQL驱动")
mysqlDSN := "datas:qien4UhkKD)edMnK12asq@tcp(192.168.0.1:8007)/LINKDOODTEST?charset=utf8mb4&parseTime=True&loc=Local"
db, err = gorm.Open(mysql.Open(mysqlDSN), &gorm.Config{})
if err != nil {
fmt.Printf("方法5失败: %v\n", err)
// 方法6: MySQL驱动,密码URL编码
fmt.Println("尝试方法6: MySQL驱动+URL编码")
mysqlDSN2 := "datas:qien4UhkKD%29edMnK12asq@tcp(192.168.0.1:8007)/LINKDOODTEST?charset=utf8mb4&parseTime=True&loc=Local"
db, err = gorm.Open(mysql.Open(mysqlDSN2), &gorm.Config{})
if err != nil {
fmt.Printf("方法6失败: %v\n", err)
return nil, err
}
}
}
}
}
}
fmt.Println("Connected to GaussArmCustom successfully!")
return db, nil
}
// 测试ds_confer_conferinfo表的增删改查功能--高斯数据库-企业商用-定制
func testConferInfo(db *gorm.DB) {
fmt.Println("=== 开始测试 ds_confer_conferinfo 表 ===")
// 1. 查看表结构 - 通过查询表是否存在
if !db.Migrator().HasTable(&DsConferConferinfo{}) {
fmt.Println("表 ds_confer_conferinfo 不存在,尝试创建...")
if err := db.AutoMigrate(&DsConferConferinfo{}); err != nil {
fmt.Printf("创建表失败: %v\n", err)
return
}
fmt.Println("表创建成功!")
} else {
fmt.Println("表 ds_confer_conferinfo 已存在")
}
// 2. 新增测试数据
fmt.Println("\n--- 测试新增 ---")
// 使用时间戳确保CONFER_ID唯一
timestamp := time.Now().Unix()
uniqueId := fmt.Sprintf("CONF_TEST_%d", timestamp)
conferInfo := DsConferConferinfo{
ConferId:             uniqueId,
Elogo:                "test_logo.png",
RoomId:               fmt.Sprintf("ROOM_%d", timestamp),
Url:                  fmt.Sprintf("https://test.meeting.com/room/%d", timestamp),
Type:                 "即时会议",
Status:               "doing",
Theme:                "测试会议主题",
FireDate:             1737458400, // 2025-01-21 的时间戳
IsPublic:             1,
PopUiSwitch:          "on",
Model:                "micro",
FirePerson:           fmt.Sprintf("USER_%d", timestamp),
FirePersonName:       "测试用户",
PassWord:             "123456",
RoomType:             "confer",
Version:              "v1.0.0",
Platform:             "web",
Provider:             "vrv",
Voucher:              fmt.Sprintf("TEST_VOUCHER_%d", timestamp),
EndDate:              1737465600, // 结束时间
GroupId:              fmt.Sprintf("GROUP_%d", timestamp),
IsPushTempMsg:        "yes",
Degreeofsecrets:      "internal",
ConferTemplateStatus: "active",
Mrid:                 fmt.Sprintf("MRID_%d", timestamp),
ExpectEndDate:        1737465600,
IpPort:               "192.168.0.1:8080",
Resolution:           "1920x1080",
}
result := db.Create(&conferInfo)
if result.Error != nil {
fmt.Printf("新增失败: %v\n", result.Error)
} else {
fmt.Printf("新增成功! ID: %d, 影响行数: %d\n", conferInfo.Id, result.RowsAffected)
}
// 3. 查询测试
fmt.Println("\n--- 测试查询 ---")
var queryConfer DsConferConferinfo
// 先通过ID查询刚插入的记录
if err := db.Where(`"ID" = ?`, conferInfo.Id).First(&queryConfer).Error; err != nil {
fmt.Printf("通过ID查询失败: %v\n", err)
} else {
fmt.Printf("通过ID查询成功: ID=%d, 会议主题=%s, 状态=%s\n", queryConfer.Id, queryConfer.Theme, queryConfer.Status)
}
// 再通过CONFER_ID查询
var queryConfer2 DsConferConferinfo
if err := db.Where(`"CONFER_ID" = ?`, uniqueId).First(&queryConfer2).Error; err != nil {
fmt.Printf("通过CONFER_ID查询失败: %v\n", err)
} else {
fmt.Printf("通过CONFER_ID查询成功: ID=%d, 会议主题=%s, 状态=%s\n", queryConfer2.Id, queryConfer2.Theme, queryConfer2.Status)
}
// 4. 更新测试 - 使用ID进行更新
fmt.Println("\n--- 测试更新 ---")
updateResult := db.Model(&queryConfer).Where(`"ID" = ?`, conferInfo.Id).Updates(DsConferConferinfo{
Theme:  "更新后的会议主题",
Status: "over",
})
if updateResult.Error != nil {
fmt.Printf("更新失败: %v\n", updateResult.Error)
} else {
fmt.Printf("更新成功! 影响行数: %d\n", updateResult.RowsAffected)
}
// 5. 验证更新
fmt.Println("\n--- 验证更新结果 ---")
var updatedConfer DsConferConferinfo
if err := db.Where(`"ID" = ?`, conferInfo.Id).First(&updatedConfer).Error; err != nil {
fmt.Printf("验证查询失败: %v\n", err)
} else {
fmt.Printf("验证成功: 会议主题=%s, 状态=%s\n", updatedConfer.Theme, updatedConfer.Status)
}
// 6. 查询所有记录数量
fmt.Println("\n--- 查询表中总记录数 ---")
var count int64
if err := db.Model(&DsConferConferinfo{}).Count(&count).Error; err != nil {
fmt.Printf("统计失败: %v\n", err)
} else {
fmt.Printf("表中总记录数: %d\n", count)
}
// 7. 删除测试数据 - 使用ID进行删除
fmt.Println("\n--- 测试删除 ---")
deleteResult := db.Where(`"ID" = ?`, conferInfo.Id).Delete(&DsConferConferinfo{})
if deleteResult.Error != nil {
fmt.Printf("删除失败: %v\n", deleteResult.Error)
} else {
fmt.Printf("删除成功! 影响行数: %d\n", deleteResult.RowsAffected)
}
fmt.Println("\n=== ds_confer_conferinfo 表测试完成 ===")
}

社区开源版本-arm环境openGauss3.1.0(docker)部署指南,点击这里去查看
社区开源版本-x86环境openGauss3.1.0(docker)部署指南,点击这里去查看
企业商用的,要自己找哦

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/955672.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

任务栏图标变空白

win+r->cmd,在命令行窗口依次输入如下代码:taskkill /im explorer.exe /fcd /d %userprofile%\appdata\localdel iconcache.db /astart explorer.exe

2025年酒店剃须刀生产厂家权威推荐榜单:一次性剃须刀套装/女士刮毛刀/刮胡刀供应商精选

在酒店用品采购领域,一次性剃须刀虽是小物件,却直接影响着客户体验。行业数据显示,超过68%的商务旅客会将客房配备的剃须刀质量列为重要服务指标。 在酒店用品行业,剃须刀作为个人护理用品的重要组成部分,其品质直…

打开word或PDF,在同目录下自动生成debug.log文件,文件大小0字节!最后发现竟然是一个时时刻刻都要用到的软件引起的

问题描述: 最近使用了ai编辑器后,就发现在打开word文档或者PDF文档时,总是在同级目录下生成debug.log文件,这个文件很诡异,大小为0字节,里面是空的,没有内容。 通过搜索类似问题,发现并没有有效的线索,没有跟…

2025年铸铁修正轮企业权威推荐榜单:丸片修正轮/金刚石丸片修正轮/镀砂修正轮源头厂家精选

在机械加工精度要求日益提升的今天,一片高质量的铸铁修正轮已成为保障磨床加工精度与效率的关键耗材。 作为磨床加工过程中的重要修整工具,铸铁修正轮的精度与耐用性直接影响着工件的加工质量与生产成本。据2024年行…

西南地区钢结构工程设计施工服务TOP5推荐:钢结构工程设计服务商哪个靠谱

在西南地区(重庆、云南、贵州、四川)工业经济快速发展的背景下,钢结构工程因绿色环保、施工周期短等优势成为工业厂房、仓储物流中心的优选方案。但客户常面临设计、施工、材料环节割裂导致的成本超支、工期延误、质…

2025年防水卷材供应商权威推荐榜单:防水涂料/堵漏材料/外墙防水涂料源头厂家精选

作为建筑工程中不可或缺的功能性材料,防水卷材的性能直接影响建筑物的防水效果与使用寿命。据2024年行业数据显示,中国防水卷材市场规模已突破1800亿元,其中新型自粘卷材占比达52%,年增长率稳定在9.5%。 为帮助工程…

2025年不锈钢门定制工厂排名,不锈钢酒柜定制公司推荐

2025年装饰领域快速迭代,不锈钢门、不锈钢酒柜等定制金属制品凭借耐用性与高级质感,成为别墅、酒店、商业空间的核心装饰选择。然而市场中供应商良莠不齐:设计落地偏差大、尺寸精度失控、售后缺失等问题频发,客户陷…

1000UserGuide:独立开发者获取前1000个用户的终极指南

1000UserGuide是一个专为独立开发者和创业者设计的资源手册,提供国内外优质曝光渠道、营销策略和实战案例,帮助产品快速获取早期用户,建立稳固的用户基础。:rocket: 1000UserGuide项目简介 1000UserGuide 是一个专门…

2025 年仿石漆厂家最新推荐品牌排行榜 —— 涵盖真石漆、水包砂、冠晶石等品类,权威剖析前沿品牌核心竞争力

引言 当前仿石漆行业发展迅速,市场品牌与厂家数量众多,产品质量及服务水平参差不齐,给消费者与采购方带来极大选择困扰。为精准筛选优质品牌,本次榜单由行业权威协会主导测评,测评过程严格遵循多维度标准:从产品…

2025年不锈钢家具定制工厂推荐:5家靠谱专业不锈钢机构全解析

在高级金属定制领域,不锈钢家具因耐用性、设计感与场景适配性,成为别墅、酒店、商业空间的优选。但市场上供应商良莠不齐,企业和业主常困惑:不锈钢家具定制工厂哪个靠谱?不锈钢定制加盟公司找哪些?不锈钢家具定制…

2025年重庆叛逆孩子强制管教学校排行榜推荐

在当今社会,青少年叛逆问题成为许多家长的心病。上班没时间管孩子、没有管理叛逆孩子的方法、不懂如何与孩子交流等问题,让家长们在面对叛逆孩子时常常感到束手无策。孩子对抗不知道如何应对、宠溺的孩子无法管教、孩…

2025 年清污机源头厂家最新推荐榜单权威发布,聚焦耐腐蚀技术与智能清污实力,结合协会测评数据精选品牌回转式格栅/不锈钢清污机公司推荐公司推荐

引言 在水利工程、污水处理、市政建设等领域,清污机是保障水体环境质量与工程运行效率的关键设备。为助力行业从业者与采购方精准筛选优质产品,本次榜单由专业水利机械协会全程参与测评,采用 “技术指标 + 实际应用…

CSP2025 题解

CSP2025你猜我为什么不写游记。 社团招新(club) 直接贪心即可。 #include<bits/stdc++.h> #define Debug puts("-------------------------") using namespace std; const int N=1e5+5;inline int r…

都昌电子病历编辑器最新特性

都昌电子病历编辑器最新特性都昌电子病历编辑器(DCwriter)是我司的核心产品。2023 年发布的基于 WASM+Canvas 的 DCWriter 5.0 已成功上线数千家医院,但其依赖资源较大的问题受到用户反馈。为解决这一问题,我们深入…

C/C++跳动的爱心③ - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025年五大靠谱劳动仲裁律师服务公司推荐

在劳动纠纷频发的当下,专业的劳动仲裁律师服务显得尤为重要。当劳动者或企业面临劳动仲裁相关问题时,选择一家靠谱的律师服务公司至关重要。以下为您推荐2024年五家靠谱的提供劳动仲裁律师服务的公司。 一、北京市炜…

2025年电梯装潢开槽机厂商权威推荐榜单:铝单板开槽机/幕墙开槽机/门业开槽机源头厂家精选

作为电梯装潢生产线上的核心设备,开槽机的精度与可靠性直接影响着电梯内饰板的加工质量与生产效率。据2024年行业数据显示,中国电梯装潢开槽设备市场规模已突破12亿元,其中数控开槽机占比达67.5%,年增长率稳定在8.…

【MySQL 从入门到精通:核心知识点与实战优化指南】 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025年东北地区电气自动化公司排名,东宇电气市场口碑与产品质量全解析

在电气自动化领域,一家公司的市场口碑、品牌知名度以及产品质量稳定性是衡量其综合实力的关键指标。以下为您介绍东北地区五家靠谱的电气自动化公司,其中辽宁东宇电气自动化技术有限公司表现尤为突出。 一、辽宁东宇…

2025年四通球阀生产厂家权威推荐榜单:不锈钢法兰球阀/低温球阀/不锈钢三通球阀源头厂家精选

四通球阀作为工业管道系统中的关键控制元件,凭借其灵活的流道设计和可靠的密封性能,广泛应用于石油化工、电力、冶金等领域。据行业数据统计,2024年全球四通球阀市场规模预计突破42亿美元,其中中国市场占比达35%,…