1、IvorySQL IvorySQL 内核实现内核实现原理原理牛世继IvorySQL 2025IvorySQL 2025生态大会生态大会暨暨PostgreSQLPostgreSQL高峰论坛高峰论坛兼容框架设计兼容框架设计初始化过程目录CONTENTSIvorySQL 2025IvorySQL 2025生态大会生态大会暨暨PostgreSQLPostgreSQL高峰论坛高峰论坛兼容框架兼容框架设计设计IvorySQL 2025IvorySQL 2025生态大会生态大会暨暨PostgreSQLPostgreSQL高峰论坛高峰论坛框架设计框架设计思路思路插件形式的基础框架双端口双parser独立GUC
2、BKI分离回归测试分离IvorySQL同时兼容原生PG和Oracle,为了避免互相干扰,采取了多种设计。IvorySQL 2025IvorySQL 2025生态大会生态大会暨暨PostgreSQLPostgreSQL高峰论坛高峰论坛基础兼容框架基础兼容框架位于contrib目录下的ivorysql_ora插件实现了内置函数、内置类型相关支持函数、系统视图、XML函数,merge等功能;该插件在初始化数据库时如果数据库模式为oracle兼容则自动创建;由于插件的可插拔特性,确保了对系统影响的可控性;IvorySQL 2025IvorySQL 2025生态大会生态大会暨暨PostgreSQLPos
3、tgreSQL高峰论坛高峰论坛基础兼容框架基础兼容框架IvorySQL 2025IvorySQL 2025生态大会生态大会暨暨PostgreSQLPostgreSQL高峰论坛高峰论坛PG工具Oracle应用PG SQL解析器5432Oracle SQL解析器1521PL/pgSQLPL/iSQLPL/PythonPL/TCLPL/PerlPL/RPL/JavaPostGISIvorySQL_ORAPostgres_fdwOracle_fdwpg_idx_advisorPL/pgSQLPL/iSQLPL/PythonPL/TCLPL/PerlPL/RPL/JavaPL/V8PostGISIvor
4、ySQL_ORAPostgres_fdwOracle_fdwpg_idx_advisorpg_logqueryidpg_stat_statementspg_query_rewrite内置数据类型内置字符函数内置时间函数PL/RPL/Java内置功能SQL兼容NLS参数PL/SQL兼容其它大小写敏感空转NULL参数解析模块嵌套子程序隐藏列兼容存储过程兼容匿名块序列兼容mergeq转义oracle like包兼容Oracle 测试框架pg 测试框架内置xml函数双端口双端口设计设计IvorySQL 使用5432端口兼容原有postgreSQL,因此 IvorySQL采用另一个独立的端口登录,默认为
5、1521。从该端口登录,默认采用oracle兼容模式。如果需要从5432端口登录且还要进入兼容模式,则需要通过compatible_mode参数进行设置。IvorySQL 2025IvorySQL 2025生态大会生态大会暨暨PostgreSQLPostgreSQL高峰论坛高峰论坛双双ParserParser设计设计IvorySQL 2025IvorySQL 2025生态大会生态大会暨暨PostgreSQLPostgreSQL高峰论坛高峰论坛1.SQL端词法语法分离新增一套兼容Oracle风格的语法和词法,在开启Oracle兼容的情况下,走Oracle风格的语法分析,生成相应的语法树。修改兼容
6、模式参数 compatible_mode 时会通过assign_hook()切换sql_raw_parser。双双ParserParser设计设计IvorySQL 2025IvorySQL 2025生态大会生态大会暨暨PostgreSQLPostgreSQL高峰论坛高峰论坛2.服务器端编程语言词法语法分离plisql目录构建为一个插件,initdb时如果数据库模式是Oracle,则创建这个插件。这个插件会将pliSQL语言注册到数据库的系统表中。根据语言类型决定走不同的处理路径。独立独立GUCGUCIvorySQL 2025IvorySQL 2025生态大会生态大会暨暨PostgreSQLPo