日常在使用GBase8c用户总是需要一个需要简易客户端,使用官方的安装包过于冗余,配置安装起来很复杂,所以根据日常管理需求,笔者使用AI工具手搓了一款java客户端工具,只需要JDK1.8和gbase的jdbc驱动,可以同时使用命令行获取GBase 8c/8s/8a三款数据库的对象信息,满足日常基本的连接需求,下面就具体分享下工具的使用方法,软件具体获取可以通过gitcode仓库下载
纯 Java 实现的交互式 SQL CLI 工具,支持 OpenGauss / GBase 8a / GBase 8c / GBase 8s,零客户端依赖。
一、环境准备
依赖 | 版本要求 | 说明 |
JDK | 1.8+ | java -version确认 |
JDBC 驱动 | 对应版本 | 根据数据库类型下载 |
1.1 下载驱动 JAR
OpenGauss / GBase 8c(PG 兼容)
wget https://repo1.maven.org/maven2/org/opengauss/opengauss-jdbc/6.0.3/opengauss-jdbc-6.0.3.jar# GBase 8c 也可用 PostgreSQL 驱动wget https://repo1.maven.org/maven2/org/postgresql/postgresql/42.7.3/postgresql-42.7.3.jar
GBase 8a
# 从 GBase 官网或安装包中提取 gbase-connector-java-*.jar
GBase 8s
# 从 GBase 8s 安装包中提取 gbasedbtjdbc_*.jar
二、快速开始
2.1 准备文件
确保以下文件在同一目录:
./├── MultiDbSqlCli.java├── config.properties└── opengauss-jdbc-6.0.3.jar (或对应驱动)
2.2 编译
# Linux / macOSjavac-cp .:opengauss-jdbc-6.0.3.jar MultiDbSqlCli.java# Windowsjavac-cp .;opengauss-jdbc-6.0.3.jar MultiDbSqlCli.java
2.3 运行
# Linux / macOSjava-cp .:opengauss-jdbc-6.0.3.jar MultiDbSqlCli# Windowsjava-cp .;opengauss-jdbc-6.0.3.jar MultiDbSqlCli
三、配置文件详解
3.1 配置项说明
# 数据库类型:opengauss | gbase8a | gbase8c | gbase8sdb.type=gbase8c# 多IP支持(逗号分隔)hosts=192.168.1.100,192.168.1.101,192.168.1.102ports=5432,5432,5432# 或简写格式(IP:端口)# hosts=192.168.1.100:5432,192.168.1.101:5432database=postgresuser=gaussdbpassword=YourPasswordschema=public# 负载均衡策略:random | roundrobin | sequential# 仅对 gbase8a / gbase8s 代码层生效loadbalance.strategy=random# GBase 8s 专用:实例名# gbase8s.servername=gbaseserver# GBase 8a 专用:虚拟集群名# gbase8a.vcname=vc1
3.2 各数据库配置示例
OpenGauss 单节点
db.type=opengausshosts=192.168.1.10ports=5432database=postgresuser=gaussdbpassword=Gauss@123schema=public
OpenGauss 集群(多 IP)
db.type=opengausshosts=192.168.1.10,192.168.1.11,192.168.1.12ports=5432,5432,5432database=postgresuser=gaussdbpassword=Gauss@123schema=public
GBase 8c 分布式集群
db.type=gbase8chosts=10.0.0.101,10.0.0.102,10.0.0.103ports=5432,5432,5432database=testdbuser=gbasepassword=Gbase@123schema=publicloadbalance.strategy=random
GBase 8a
db.type=gbase8ahosts=192.168.1.20ports=5258database=testdbuser=rootpassword=123456
GBase 8s
db.type=gbase8shosts=192.168.1.30ports=9088database=gbasedbuser=gbasedbtpassword=Gbase@123schema=gbase8s.servername=gbaseserver
四、命令使用实例
4.1 基础命令
SQL> \conninfo连接信息:类型: GBASE8C节点列表: [0] 192.168.1.100:5432 [1] 192.168.1.101:5432 [2] 192.168.1.102:5432数据库: testdb Schema: public
4.2 查看表结构
列出所有表
SQL> \dt Schema | 表名 | 所有者----------+---------------------+---------- public | users | gbase public | orders | gbase public | logs | gbase(3 张表)
模糊匹配表名
SQL> \dt user Schema | 表名 | 所有者----------+---------------------+---------- public | users | gbase public | user_logs | gbase(2 张表)
查看单表结构
SQL> \d users表 "public.users" 的结构列名 | 数据类型 | 可空 | 默认值---------------------+--------------------+------+-------------------- id | int4(10) | NO | nextval('users_id_seq') username | varchar(50) | NO | email | varchar(100) | YES | created_at | timestamp(29) | YES | now()主键: id索引: users_pkey (id) idx_users_email (email)
4.3 获取 DDL
表 DDL
SQL> \ddl users-- 表 "public.users" 的 DDLCREATE TABLE public.users ( id integer NOT NULL DEFAULT nextval('users_id_seq'::regclass), username character varying(50) NOT NULL, email character varying(100), created_at timestamp without time zone DEFAULT now());ALTER TABLE ONLY public.users ADD CONSTRAINT users_pkey PRIMARY KEY (id);
索引 DDL
SQL> \di users表 "users" 的索引: users_pkey: CREATE UNIQUE INDEX users_pkey ON public.users USING btree (id) idx_users_email: CREATE INDEX idx_users_email ON public.users USING btree (email)
4.4 函数/存储过程(OpenGauss / GBase 8c)
列出函数
SQL> \df函数名 | 类型 | 返回类型 | 参数--------------------+--------+--------------------+---------------------------------------- add_numbers | 函数 | integer | a integer, b integer get_user_name | 函数 | character varying | user_id integer update_stats | 存储过程 | void | (3 个函数/存储过程)
模糊匹配
SQL> \df get_函数名 | 类型 | 返回类型 | 参数--------------------+--------+--------------------+---------------------------------------- get_user_name | 函数 | character varying | user_id integer get_order_total | 函数 | numeric | order_id integer(2 个函数/存储过程)
查看函数 DDL
SQL> \df+ add_numbers-- 函数 "add_numbers" 的 DDLCREATE OR REPLACE FUNCTION public.add_numbers(a integer, b integer) RETURNS integer LANGUAGE plpgsqlAS $function$BEGIN RETURN a + b;END;$function$
另一种方式
SQL> \ddl func add_numbers-- 效果与 \df+ 相同
4.5 执行 SQL
SQL> SELECT * FROM users LIMIT 3;+------+----------+----------------------+---------------------------+| id | username | email | created_at |+------+----------+----------------------+---------------------------+| 1 | alice | alice@example.com | 2026-07-01 10:00:00 || 2 | bob | bob@example.com | 2026-07-02 11:30:00 || 3 | charlie | charlie@example.com | 2026-07-03 09:15:00 |+------+----------+----------------------+---------------------------+(3 行)SQL> INSERT INTO users (username, email) VALUES ('david', 'david@example.com');影响行数: 1SQL> UPDATE users SET email = 'new@example.com' WHERE id = 1;影响行数: 1SQL> DELETE FROM users WHERE id = 5;影响行数: 1
4.6 多行 SQL
SQL> SELECT u.id, u.username, o.order_no -> FROM users u -> LEFT JOIN orders o ON u.id = o.user_id -> WHERE u.created_at > '2026-01-01' -> LIMIT 5;+------+----------+----------+| id | username | order_no |+------+----------+----------+| 1 | alice | ORD001 || 2 | bob | ORD002 |+------+----------+----------+(2 行)
4.7 其他元数据命令
SQL> \dn Schema 列表: public * audit archive (* 表示当前Schema)SQL> \db数据库列表: postgres * testdb template0 template1SQL> \du用户列表: gbase gaussdb replSQL> \set schema auditSchema 已切换为: audit
五、多 IP 与负载均衡
5.1 配置方式
# 方式一:IP 和端口分开hosts=192.168.1.100,192.168.1.101,192.168.1.102ports=5432,5432,5432# 方式二:IP 带端口(更简洁)hosts=192.168.1.100:5432,192.168.1.101:5432,192.168.1.102:5432# 方式三:所有 IP 共用同一端口hosts=192.168.1.100,192.168.1.101,192.168.1.102ports=5432
5.2 负载均衡策略
策略 | 说明 | 适用场景 |
random | 随机选择节点 | 默认推荐,连接分布均匀 |
roundrobin | 轮询 | 批量任务,均衡利用各节点 |
sequential | 按配置顺序 | 有明确主备优先级 |
注意:random/roundrobin/sequential仅对GBase 8a / 8s生效(代码层实现)。OpenGauss / GBase 8c由驱动原生接管多 IP。
5.3 故障转移效果
GBase 8c(驱动原生)
已连接到 GBASE8C PostgreSQL 14.2实际连接地址: jdbc:postgresql://192.168.1.101:5432/...
GBase 8a(代码层)
尝试连接 192.168.1.100:5258 ...连接失败: Connection refused尝试连接 192.168.1.101:5258 ...已连接到 GBASE8A 8.6.2实际连接地址: jdbc:gbase://192.168.1.101:5258/testdb
六、完整命令速查表
命令 | 功能 | 支持数据库 |
\q | 退出 | 全部 |
\h | 显示帮助 | 全部 |
\conninfo | 连接信息 | 全部 |
\d [表名] | 表结构 / 列表 | 全部 |
\dt [pattern] | 列出表 | 全部 |
\di <表名> | 查看索引 | 全部 |
\ddl <表名> | 表 DDL | 全部(8s 除外) |
\ddl func <名> | 函数 DDL | OpenGauss / GBase 8c |
\df [pattern] | 列出函数 | OpenGauss / GBase 8c |
\df+ <函数名> | 函数 DDL | OpenGauss / GBase 8c |
\dn | Schema 列表 | 全部 |
\db | 数据库列表 | 全部 |
\du | 用户列表 | 全部 |
\set schema <s> | 切换 Schema | 全部 |
SQL 语句 | 执行 SQL | 全部 |
七、常见问题
Q1: 编译报错 “illegal escape character”
原因:使用了旧版本文件。解决:重新下载最新MultiDbSqlCli.java。
Q2: “未找到驱动类”
原因:驱动 JAR 不在 classpath 中。解决:确认-cp参数包含驱动 jar 路径。
Q3: GBase 8c 连接超时
原因:防火墙或listen_addresses未配置。解决:
# 在 GBase 8c 服务端检查show listen_addresses;# 确保 pg_hba.conf 包含客户端 IP
Q4: \ddl报错“does not exist”
原因:OpenGauss/GBase 8c 版本不支持 pg_get_tabledef()。解决:工具会自动降级为手动拼接 DDL,无需处理。
Q5: GBase 8a 中文乱码
解决:在连接 URL 中追加编码参数(需驱动支持),或在 SQL 前执行:
SQL>SET NAMES utf8;
八、文件清单
文件 | 说明 |
MultiDbSqlCli.java | 主程序源码 |
config.properties | 连接配置文件 |
<驱动>.jar | 数据库 JDBC 驱动 |
夜雨聆风