IvorySQL的IVY_GUC框架介绍与使用指南

2023年 11月 16日 63.7k 0

在之前的一篇文章中,我们简要介绍了「IvorySQL在兼容Oracle方面所做的一些工作」,包括兼容数据类型和内置函数等。这些兼容性使得IvorySQL可以更好地减少迁移Oracle数据库过程中可能遇到的问题。
除了数据类型和内置函数的兼容性外,IvorySQL还新增了一些GUC参数,以便更好地对数据库变量进行设置和对数据库进行控制。
接下来,我将详细介绍IvorySQL新增的GUC参数的情况。这些GUC参数可以在初始化数据库时进行设置,以满足特定的需求来配置数据库。

*注:本文中的测试基于IvorySQL的master分支完成。

01IvorySQL新增GUC参数

1.1 ivorysql.compatible_mode

该参数表示当前数据库的兼容模式,可以通过执行‘show’命令查看,在使用‘psql’连接时,如果指定PG模式的端口,该参数的值为‘pg’;
如果指定了Oracle模式的端口,该参数的值则为‘oracle’。
即使连接的是PG模式的端口,仍然可以通过‘set’命令将当前数据库的兼容模式设置为另一个模式。

‘1521’端口为Oracle模式监听端口,当连接server的端口为1521时,该参数的值为‘oracle’,您可以通过‘set’命令设置其值为‘pg’。

1.2 ivorysql.database_mode

该参数表示当前数据库的模式,与上一个参数的区别在于它是无法修改。
该参数的值通过initdb的时候指定的‘-m’参数确定,如果不使用‘-m’参数,则默认值为‘oracle’。同样的,该值您可以通过‘show’命令查看。
值得注意的是,当该参数设置为‘pg’时,表示初始化的数据库为纯净的PostgreSQL。
此时,本文中介绍的所有参数将不再生效,Oracle的监听端口也会失效。

1.3 ivorysql.identifer_case_switch

此参数用于设置字符大小写转换模式,可以通过‘show’命令查看或通过‘set’命令设置。
该参数具有三个可选值,各自含义如下:

interchange

对输入的字符串做处理,将全大写的字符串转换为全小写,将全部小写的字符串转换为全大写,而对于大小写混合的字符串则不进行任何处理

normal

不会对输入的字符串进行任何处理

lowercase

将输入的字符串全部转换为小写

如果用户想要查看或者修改此参数,他们可以通过查看数据目录下的ivorysql.conf文件来实现。
但请注意,通过这种方式修改此参数后需要重启数据库才能生效。

可以通过‘-C’参数指定该参数的值,也可以通过‘show’命令查看:

normal模式下不对大小写做处理:

通过‘set’命令将该参数设置成‘interchange’,对输入的全大写字符串转换成全小写,全小写字符串转成全大写,大小写混合不做处理。


通过‘set’命令将该参数设置成‘lowercase’,对输入的字符串做全小写转换:

1.4 ivorysql.port

ivorysql.port参数表示Oracle模式下的监听端口,与PG的port参数相对应。
您可以通过执行‘show’命令来查看此参数的值,但是无法直接修改它。
要修改该参数,您需要编辑ivorysql.conf文件中的相应参数,并在修改完成后重启数据库以使更改生效。

无法通过‘set’命令设置参数的值:

1.5 ivorysql.enable_emptystring_to_NULL

该参数用于控制是否将输入的空字符串转换为NULL值进行存储。
该参数的取值为‘on’或‘off’,您可以通过执行‘show’命令来查看其当前值,也可以通过‘set’命令进行修改。
默认情况下,该参数的值为‘on’。

设置为‘off’后:

1.6 ivorysql.datetime_ignore_nls_mask

由于PostgreSQL和Oracle的时间相关的数据类型不兼容,因此IvorySQL在保持与Oracle时间相关的数据类型兼容的同时,添加了Oracle的同名参数来控制日期、时间等格式处理。

为了避免新增的同名参数对PostgreSQL本身的时间类型产生影响,特别添加了这个参数。

默认为0,您可以通过执行‘set’命令进行设置,也可以通过执行‘show’查看当前设置。

02 Oracle兼容GUC参数

2.1 nls_date_format

nls_date_format用于设置默认的日期格式。
您可以通过执行‘show’命令查看当前值,默认值为‘YYYY-MM-DD’。您也可以通过执行‘set’命令进行修改。
另外,执行‘reset’命令可以将该参数设置为默认值。
请注意,此参数也受到‘reset all’命令的影响。

2.2  nls_length_semantic

nls_length_semantic参数与Oracle中的同名参数兼容,其用途是控制一个字符所占用内存的大小,与在Oracle中的用法相同。

可以看到不指定长度的情况下,创建的类型长度为20byte。

将其设置为‘char’
可以看到创建的类型长度为20char。

2.3 nls_timestamp_format

nls_timestamp_format参数与Oracle中的同名参数兼容,用于控制带有时间的日期格式,使用方法与在Oracle中的相同。

2.4 nls_timestamp_tz_format

nls_timestamp_tz_format参数与Oracle中的同名参数兼容,用于控制带有时区的日期格式,其使用方法与在Oracle中的相同。

03 结论

本文介绍了IvorySQL近期新增GUC参数及其使用方法,未来,IvorySQL将进一步利用GUC参数实现更多兼容性和灵活功能。IvorySQL新增的GUC参数可以帮助您更好地控制数据库,以便更好地减少迁移Oracle数据库过程中潜在的问题。

如果您对IvorySQL任何GUC参数有进一步的疑问或需要了解更多细节,请查阅IvorySQL官方文档或社区仓库,以获取更全面的信息和指导。
IvorySQL官方文档:https://docs.ivorysql.org/cn/ivorysql-doc/beta/beta/welcome社区仓库:https://github.com/IvorySQL/IvorySQL

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论