数据库关系型数据库【免费下载链接】IvorySQLOpen Source Oracle Compatible PostgreSQL.项目地址https://gitcode.com/IvorySQL/IvorySQL点击查看免费下载IvorySQL 是一款开源的 Oracle 兼容 PostgreSQL 数据库。本文将带你快速完成 IvorySQL 的initdb 双模式初始化Oracle 模式 / 原生 PG 模式并掌握ivorysql.compatible_mode参数的配置方法帮助新手在一分钟内选对初始化模式、正确切换 SQL 解析器顺利完成 Oracle 迁移或原生 PostgreSQL 使用场景。一、IvorySQL 是什么为什么需要双模式IvorySQL 基于 PostgreSQL 内核构建最大亮点是高度兼容 Oracle 语法与生态支持ROWNUM、NVL、MERGE INTO、DECODE等 Oracle 风格写法还内置plisqlOracle 风格 PL 语言和ivorysql_ora兼容扩展。为了让两种使用场景互不干扰IvorySQL 引入了双模式设计模式说明典型场景Oracle 模式默认加载 Oracle 解析器与兼容扩展支持 Oracle 方言从 Oracle 迁移应用原生 PG 模式纯 PostgreSQL 行为不加载 Oracle 解析器已有 PG 业务、追求稳定关键结论集群模式在initdb初始化时就决定了之后不能在线切换而连接级的 SQL 解析器则由compatible_mode参数动态控制。二、initdb 双模式初始化如何选对 database modeinitdb通过-m / --dbmode参数指定数据库模式默认值为oracle默认值定义见 initdb.c参数解析逻辑见 initdb.c。1. 初始化 Oracle 模式集群推荐迁移用户# -m oracle 为默认值也可省略 initdb -D /data/ivorysql/data -m oracleOracle 模式下initdb 会自动完成以下重活预载liboracle_parser解析器通过session_preload_libraries安装plisql过程语言扩展安装ivorysql_oraOracle 兼容函数包。相关初始化流程可参考 initdb.c。2. 初始化原生 PG 模式集群initdb -D /data/ivorysql/pgdata -m pgPG 模式集群不会加载 Oracle 解析器。此时ivorysql.database_mode被固定为pg后续所有 Oracle 专属 GUC 和 Oracle 解析器都会被禁用行为与原生 PostgreSQL 保持一致。3. 附加选项标识符大小写转换模式Oracle 模式下还支持-C / --case-conversion-mode初始化选项配合ivorysql.identifier_case_switch参数控制未加引号标识符的大小写转换normal/interchange/lowercase参数定义见 guc_parameters.dat。 选型建议从 Oracle 迁移选oracle模式默认即可已有纯 PG 业务或追求标准行为选pg模式。两者是集群级决策建库前想清楚避免返工。三、compatible_mode 参数实战动态切换 SQL 解析器ivorysql.compatible_mode是连接级PGC_USERSET枚举参数取值pg/oracle用于在同一个集群内动态切换 SQL 解析器参数定义见 guc_parameters.dat。1. 基本用法-- 切换为 Oracle 解析器 SET ivorysql.compatible_mode TO oracle; -- 切回 PG 解析器 SET ivorysql.compatible_mode TO pg; -- 查看当前解析器模式 SHOW ivorysql.compatible_mode;切换解析器的核心逻辑在 ivy_guc.c 的assign_compatible_mode中设为oracle时挂载ora_raw_parser并刷新search_path。2. 两个必须知道的限制 ⚠️限制一PG 模式集群中禁止启用 Oracle 解析器。在原生 PG 集群里执行SET ivorysql.compatible_mode TO oracle会报错ERROR: parameter ivorysql.compatible_mode cannot be changed in native PG mode.校验逻辑见 ivy_guc.c。限制二Oracle 解析器依赖预加载库。Oracle 模式集群切换为oracle解析器时要求liboracle_parser已预载、IVORYSQL_ORA扩展已安装否则报liboracle_parser not found!。initdb 已在初始化阶段处理好这些依赖见 initdb.c 中为安装系统对象临时SET ivorysql.compatible_mode的用法。3. database_mode 与 compatible_mode 的关系参数作用域能否运行期修改ivorysql.database_mode集群级由 initdb 写入否PGC_INTERNALivorysql.compatible_mode会话级是受上述限制约束简单来说database_mode决定这个集群允许做什么compatible_mode决定这条连接现在用什么解析器。四、快速上手三步完成初始化与验证初始化按需选择-m oracle默认或-m pginitdb -D /data/ivorysql/data -m oracle启动并连接pg_ctl -D /data/ivorysql/data start psql -h /data/ivorysql -p 5432 -d postgres验证模式SHOW ivorysql.database_mode; -- 集群模式 SHOW ivorysql.compatible_mode; -- 当前解析器验证结果应与初始化时的-m选项一致Oracle 模式集群中还可执行SET ivorysql.compatible_mode TO oracle;后使用一条NVL()或ROWNUM查询确认 Oracle 语法生效。✅五、常见问题速查Q能在线把 PG 集群变成 Oracle 集群吗A不能。database_mode为PGC_INTERNAL只能在initdb阶段确定见 ivy_guc.c 的校验逻辑。QOracle 模式集群里 PG 语法还能用吗A能。compatible_mode取pg时解析器回退为原生 PostgreSQL 解析器两种写法可按会话混用。Q报错Do not use this GUC variable in the current cluster (PG).A说明你在 PG 模式集群中使用了 Oracle 专属参数请换用对应集群或改初始化模式。六、小结initdb -m oracle默认获得完整 Oracle 兼容能力适合迁移initdb -m pg获得标准 PostgreSQL 行为适合存量业务ivorysql.compatible_mode提供会话级pg / oracle解析器动态切换是 IvorySQL 灵活兼容的关键记住限制PG 集群不可启用 Oracle 解析器解析器切换依赖liboracle_parser预加载。掌握这两层模式设计——集群级database_mode 会话级compatible_mode你就能在 IvorySQL 中自由驾驭 Oracle 与 PostgreSQL 两种生态。赞分享数据库关系型数据库【免费下载链接】IvorySQLOpen Source Oracle Compatible PostgreSQL.项目地址https://gitcode.com/IvorySQL/IvorySQL点击查看免费下载相关推荐TOAST UI Editor 快速上手指南npm 与 CDN 安装、初始化配置与 Markdown/WYSIWYG 实战TOAST UI Editor 快速上手指南npm 与 CDN 安装、初始化配置与 Markdown/WYSIWYG 实战 本篇指南完整讲解 TOAST UI前端UI组件MikroORM 7.2 快速上手指南从初始化到实体定义与 CLI 配置MikroORM 7.2 快速上手指南从初始化到实体定义与 CLI 配置 本指南基于 MikroORM 7.2 版本文档 docs/versioned_do后端cube-ui 快速上手脚手架初始化、编译配置与按需引入实战cube ui 快速上手脚手架初始化、编译配置与按需引入实战 cube ui 是一套由滴滴开源、基于 Vue 实现的移动端 UI 组件库本指南以官方快速上手前端UI组件移动开发创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?