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';
相关推荐
AOI小白新手上路2 小时前
anomalib 缺陷检测复现笔记:从跑通库到 EfficientAD 落地
人工智能·笔记·机器学习
xxwl5852 小时前
RabbitMQ 学习笔记
笔记·学习·rabbitmq
加油努力有饭吃3 小时前
DLMS/COSEM 蓝皮书解读(二十六):Auto connect(class_id = 29)—— 自动拨号与主动连接(出站管理)
笔记
CarIise3 小时前
Java实训阶段查漏补缺复习笔记1
java·开发语言·笔记
陈卫军老师4 小时前
陈卫军谈商业底线:营销是术,产品是道
经验分享·笔记·流量运营
智者知已应修善业4 小时前
【51单片机只有一个8*8点阵数据如何滚动起来一片595+一组IO+花样】2022-1-15
c++·经验分享·笔记·单片机·蓝桥杯·硬件架构
Space655366 小时前
常见组学技术笔记:从 DNA 基因组学到 Multi-omics
笔记
lcj25117 小时前
【Linux】 Makefile 详解
linux·笔记·面试
常州晟凯电子科技7 小时前
sigmaStar SSC305DE/SSC308开发笔记之开发环境搭建和SDK编译
人工智能·笔记·嵌入式硬件·物联网·性能优化·视频编解码
wdfk_prog8 小时前
LWIP教程 00:从网线上的电信号到 lwIP——PHY、MAC、DMA 与 `netif` 的完整边界
运维·网络·笔记·学习·ip