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 模式数据库必须创建,提供ifnull、date_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_group 是openGauss7.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);

索引规范:禁止使用index、table、where、select等 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';
相关推荐
Li_RuiQi10 小时前
DAgger方法演进_独立学习笔记
笔记·学习·计算机视觉
Li_RuiQi14 小时前
DAgger与交互式模仿学习_ACT学习笔记
笔记·学习
He BianGu15 小时前
【笔记】C# 中BindingFlags的详细作用
笔记·c#
AI视觉网奇15 小时前
turtle 入门教程笔记
笔记
跨知易知识产权15 小时前
美国专利确权是什么,和专利诉讼有什么不一样?
笔记
杨逢昌工厂6S管理15 小时前
126-杨逢昌6S三环体系:越做越乱的现场熵增机理与基准化治理——一线现场诊断笔记
经验分享·笔记·职场和发展·学习方法
悟道书生15 小时前
若依 RBAC 权限控制学习笔记
java·网络·笔记·sql·学习·vue
陈哈哈111116 小时前
折腾了半天,总算把 Vim 9.2 装明白了
笔记
陈哈哈111116 小时前
折腾了半天,总算把 OpenGL 的开发环境给装明白了
笔记
深圳老胡17 小时前
STM32F103 硬件 SPI 与软件 IO 模拟 SPI 最高速度差异详解
笔记·stm32·单片机·代码规范·1024程序员节