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';
相关推荐
老当益壮梁奶奶5 小时前
51单片机DS18B20温度传感器详解:单总线时序与C51驱动实现
笔记·stm32·单片机·嵌入式硬件·51单片机
小叶肥辉5 小时前
LangChain链和LangGraph图的学习笔记【三】——分别用langchain_openai库和langchain_community库调用大模型
笔记·python·langchain
从零开始的嵌入式之旅7 小时前
day44
arm开发·经验分享·笔记·嵌入式硬件
商业白皮书10 小时前
杭州企业做 GEO 怎么选服务商?B2B 制造、外贸出海与品牌连锁选型指南
笔记
商业白皮书10 小时前
密不透风的瑕疵防线:东集SEV400视觉传感器,定义“轻量化”精准检测
笔记
谢白羽13 小时前
MiniMax-H3 : 4卡 H20-3e一套权重部署实践/8卡H200部署优化实测
笔记·llm·论文·大模型部署·sglang
志尊宝13 小时前
Vue3 零基础每日笔记(024):组件的创建与使用——从 import 到自动导入
前端·vue.js·笔记·前端框架·html5
chnyi6_ya14 小时前
论文阅读笔记:VBVR-Pro 把「用生成来推理」变成一个可训练、可验证、可优化的闭环
论文阅读·笔记
contro1_h14 小时前
关于ArcGIS许可管理器服务无法启动的问题
经验分享·笔记·学习方法
1314lay_100714 小时前
SQL SERVER 修改已创建的表
经验分享·笔记