openGauss使用笔记

1. 创建空 B 模式库

⚠️注意:

  1. LC_COLLATE/LC_CTYPE 的值来自操作系统 locale,执行 locale -a 查看系统可用;如果服务器没有zh_CN.UTF‑8,改用en_US.UTF‑8不能写 zh_CN.UTF‑8B,系统无此 locale,会报错建库失败openGauss。
  2. DBCOMPATIBILITY='B' 只能在建库时指定,建好库之后无法 ALTER 修改,一旦建错库只能重建。
  3. dolphin扩展,B 模式数据库必须创建,提供ifnulldate_format、字符串隐式转换等 MySQL 语法兼容,不开启很多 MySQL 语法直接报错
复制代码
-- 如果库存在先删除(测试环境,谨慎!)
DROP DATABASE IF EXISTS test_opengauss;

CREATE DATABASE test_opengauss
ENCODING 'UTF8'
LC_COLLATE 'zh_CN.utf8'
LC_CTYPE 'zh_CN.utf8'
TEMPLATE template0
DBCOMPATIBILITY = 'B'; -- MySQL兼容B模式,重点!

-- gsql客户端切换数据库
\c test_opengauss;

-- 可选:创建业务schema,隔离业务对象(如果不想用public)
-- CREATE SCHEMA jsbos;
-- SET search_path TO jsbos,public;

-- 可选:创建业务用户并授权(生产环境建议,测试环境可跳过)
-- CREATE USER jsbos_user WITH PASSWORD 'Jsbos@123456';
-- GRANT ALL PRIVILEGES ON DATABASE test_opengaussTO jsbos_user;
-- GRANT ALL PRIVILEGES ON SCHEMA public TO jsbos_user;

-- 开启dolphin插件(B模式必须,模拟MySQL函数、语法)
CREATE EXTENSION IF NOT EXISTS dolphin;

2. 验证数据库是否 B 模式

连接库后执行 SQL 查看:

复制代码
show sql_compatibility;

返回结果是 B,代表兼容模式配置正确。

3. 检查 dolphin 扩展是否真的注册

复制代码
select * from pg_extension where extname='dolphin';

有记录 = 当前业务库 dolphin 已就绪

建扩展是初始化 DBA 操作,放在脚本手动执行一次即可。

Docker 部署 openGauss6.0.5:gs_restore 跨版本恢复

✅容器内正确 gs_restore 命令

复制代码
#1 进入容器
docker exec -it opengauss bash
#2 切换omm用户
su - omm
#3 加载环境变量(docker镜像不会自动加载!)
source /usr/local/opengauss/bin/gs_env

#4 执行恢复,端口写5432(容器内部端口)
gs_restore -d dev_opengauss -U root --password='root@888' -p 5432 --no-owner --no-privileges /home/omm/backup_opengauss_20260826_0200.dump

参数说明:--no‑owner --no‑privileges 忽略源库属主权限,跨版本迁移强烈建议带上。
记忆口诀:

  • 容器内部执行 gsql/gs_restore → -p 5432
  • 宿主机访问容器数据库 → -h 127.0.0.1 -p 35432

将宿主机 dump 备份文件拷贝进容器

复制代码
docker cp /宿主机路径/backup_opengauss_20260826_0200.dump opengauss:/home/omm/
# 修改dump文件属主为omm
docker exec -it opengauss bash
chown omm:omm /home/omm/backup_opengauss_20260826_0200.dump

二、跨版本恢复报错详情(7.0RC dump 恢复至 6.0.5)

执行完成日志输出:restore operation successful WARNING: errors ignored on restore:3

代表整体表、数据、大部分索引导入成功;3 处错误被跳过,需要手动修复

报错 1:behavior_compat_options = 'sql_mode_full_group'

复制代码
ERROR:  invalid value for parameter "behavior_compat_options": "sql_mode_full_group"
DETAIL:  invalid behavior compat option "sql_mode_full_group"
Command was: SET behavior_compat_options = 'sql_mode_full_group';

根因:sql_mode_full_groupopenGauss7.0 新增参数,6.0.5 不识别 ,dump 备份中保存会话 SET 语句。

✅处理:会话参数,无需修复,不影响表与业务数据

报错 2:nls_length_semantics = 'byte'

复制代码
ERROR:  unrecognized configuration parameter "nls_length_semantics"
Command was: SET nls_length_semantics = 'byte';

根因:Oracle 兼容参数,6.0.5 B 模式不支持该 GUC 变量。

✅处理:会话参数,无需修复

报错 3:索引名称为关键字index语法报错【重要,索引丢失】

复制代码
ERROR:  syntax error at or near "index"
LINE 1: CREATE INDEX index ON base_organize_relation USING btree (organize_id) TABLESPACE pg_default;

根因:index属于 SQL 保留关键字,不能直接作为索引名称,7.0 可以导出,6.0.5 执行 DDL 直接语法失败,该索引不会被创建

✅修复 SQL:

复制代码
-- 删除残留带关键字的索引(如果存在)
DROP INDEX IF EXISTS "index";

-- 重建索引,遵循命名规范 idx_表名_字段
CREATE INDEX idx_base_organize_relation_organize_id
ON base_organize_relation USING btree (organize_id);

-- 如果同表还有object_id索引,一并重建
CREATE INDEX idx_base_organize_relation_object_id
ON base_organize_relation USING btree (object_id);

索引规范:禁止使用indextablewhereselect等 SQL 关键字作为索引名;统一命名 idx_表名_字段1_字段2

检查库中全部关键字命名索引

复制代码
SELECT relname AS index_name
FROM pg_class
WHERE relkind = 'i'
AND relname IN ('index','table','where','select','update','group','order','limit');

查到的索引全部需要重命名重建。

三、docker‑opengauss 宿主机 data 目录权限说明

宿主机映射出来的数据目录/rkhome/docker‑opengauss/opengauss/data文件属主 uid=70(容器内 omm 用户 uid)。

复制代码
#普通lenovo用户没有权限访问,必须root查看
sudo -i
cd /rkhome/docker-opengauss/opengauss/data
ll

⚠️严禁在宿主机执行 chmod 777、chown 修改 data 目录权限,会直接造成数据库容器启动崩溃,仅允许查看,所有写操作在容器内 omm 用户执行。

四、B 兼容模式建库参考(MySQL 兼容库)

locale‑a 输出zh_CN.utf8,注意大小写,不要写zh_CN.UTF‑8

复制代码
CREATE DATABASE dev_opengauss
ENCODING 'UTF8'
LC_COLLATE 'zh_CN.utf8'
LC_CTYPE 'zh_CN.utf8'
TEMPLATE template0
DBCOMPATIBILITY = 'B';
相关推荐
宵时待雨1 小时前
linux笔记归纳17:传输层协议UDP
linux·笔记·udp
噜~噜~噜~3 小时前
操作系统笔记-2.3.2.1 进程互斥的软件实现方法
笔记·操作系统
云贝教育-郑老师3 小时前
【麒麟服务器系统交付:一个DBA的六年信创实战笔记】
服务器·笔记·dba
玖玥拾4 小时前
LeetCode 392 判断子序列
笔记·算法·leetcode
摇滚侠5 小时前
《SpringBoot 3:入门与应用实战》第 7 章 AOP 思想与实现 阅读笔记 15
java·spring boot·笔记
摇滚侠5 小时前
《SpringBoot 3:入门与应用实战》第 7 章 AOP 思想与实现 阅读笔记 14
spring boot·笔记·后端
陈年老古董7 小时前
OpenCV图像处理笔记:图像拼接、答题卡识别与目标提取
人工智能·笔记·python·opencv·计算机视觉
陈年老古董8 小时前
CentOS编译安装Python3.11完整教程
linux·笔记·学习·centos·python3.11
动词ing8 小时前
【学习笔记】数据结构(数组长度和关键特性+快慢指针+左右指针)
数据结构·笔记·学习