ITPub博客

首页 > 数据库 > PostgreSQL > 关于PostgreSQL的系统信息函数的OID

关于PostgreSQL的系统信息函数的OID

原创 PostgreSQL 作者:T1YSL 时间:2023-01-31 10:41:17 0 删除 编辑

一、自带的OID的相关脚本

在PostgreSQL的安装包的src/include/catalog目录下,有着两个脚本,unused_oids和 duplicate_oids。通过这两个可执行脚本,可以查看当前源码包配置里的符合要求的OID。unused_oids可以查看若根据当前源码包初始化产生的数据库,在系统表中未被使用的OID,duplicate_oids可以找到在系统表重复定义的OID。

1675049517793.png

当我们执行unused_oids脚本的时候,就会出现类似如下的显示, 可以获取到这个PostgreSQL 尚未使用的 OID 列表。 假设当你想创建一个系统信息函数 的时候,你需要生成不会产生任何冲突的 OID 。这个时候使用这个脚本是很方便的,官方推荐的范围是8000到9999,如果增加的补丁占用的OID相互冲突了,那么可能就会产生相关问题,此时另一个脚本duplicate_oids的意义也就出现了。

1675049709768.png

对于每个具有任何手动创建的初始数据(有些没有)的目录都有一个相应的.dat文件,其中包含其以可编辑格式的初始数据 。这些.dat文件里都包含 Perl 数据结构文字 。这些文字被求值以生成内存中的数据结构。当用上边的方法获取了可使用的OID后,就可以在此类.dat文件里定义函数初始数据的格式以及其OID了。

1675051923429.png

二、测试

如下我们做个测试

通过上边脚本我们已经能够看到111这个OID是没有被使用的。

而我们查询原本数据库里的pg_backend_pid 函数,其对应的OID为2026 ,我们接下来对此系统内置函数的OID进行修改。

1675056781468.png

直接查看src/include/catalog下的pg_proc.dat里。数据库里的系统表里关于pg_backend_pid 的OID和其是能对应上的。

1675056831316.png

此时我们修改此条记录,将2026修改为111。并且保存退出。

重新编译,并且initdb到一个新的路径。启动数据库

[xmaster@mogdb-kernel-0005 postgresql-14.1]$ ./configure --prefix=/home/xmaster/pg_oids
[xmaster@mogdb-kernel-0005 postgresql-14.1]$ make -j 24 
[xmaster@mogdb-kernel-0005 postgresql-14.1]$ make install -j 24
[xmaster@mogdb-kernel-0005 postgresql-14.1]$ cd /home/xmaster/pg_oids/bin
[xmaster@mogdb-kernel-0005 bin]$ ./initdb -D /data/ysl_oids/data
修改完端口后,启动数据库
[xmaster@mogdb-kernel-0005 bin]$ pg_ctl start -D /data/ysl_oids/data/

此时,pg_backend_pid 这个函数的OID已经被改成了我定义的111。

1675057231955.png

然后再查看我初始化使用的安装包的里的unused_oids脚本,发现2026已经成为未被使用的状态,而111已经从这个结果里消失了。因为pg_proc.dat文件里我进行了修改。

1675057358582.png

此篇虽然是修改了已经内置的函数的OID,但是同样的,想创建新内置函数的时候,声明并定义新增函数后,也可以用这个方式给函数分配对应的OID。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69990629/viewspace-2933374/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
中国开源软件推进联盟PG分会系列技术丛书《快速掌握PostgreSQL版本新特性》一书副主编。数据库技术专家。数据库认证讲师、恩墨学院数据库讲师。擅长MySQL数据库、PostgreSQL等开源数据库。拥有MySQL-OCP 、PostgreSQL-PGCM等数据库认证。

注册时间:2020-12-12

  • 博文量
    152
  • 访问量
    160743