查看原文
其他

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

DutMsn IvorySQL开源数据库社区
2024-09-30



预计阅读时间

8分钟

导 读

在之前的一篇文章中,我们简要介绍了IvorySQL在兼容Oracle方面所做的一些工作,包括兼容数据类型和内置函数等。这些兼容性使得IvorySQL可以更好地减少迁移Oracle数据库过程中可能遇到的问题。

除了数据类型和内置函数的兼容性外,IvorySQL还新增了一些GUC参数,以便更好地对数据库变量进行设置和对数据库进行控制

接下来,我将详细介绍IvorySQL新增的GUC参数的情况。这些GUC参数可以在初始化数据库时进行设置,以满足特定的需求来配置数据库。

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


01


IvorySQL新增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


推荐阅读


IvorySQL在「兼容oracle」方面做了哪些工作?

参与「IvorySQL 3.0」啄木鸟计划,领取IvorySQL限量周边!


IvorySQL


  一款开源的兼容Oracle的PostgreSQL


官方网址:https://www.ivorysql.org社区仓库:https://github.com/IvorySQL/IvorySQLIvorySQL社区欢迎并赞赏所有类型的贡献,期待您的加入!记得在GitHub给我们一个 ⭐奥~


*添加小助理微信加入IvorySQL技术交流群

🐘点击蓝字 跳转 GitHub

修改于
继续滑动看下一个
IvorySQL开源数据库社区
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存