暂无图片
暂无图片
3
暂无图片
暂无图片
暂无图片

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

原创 阎书利 2023-01-30
1187

一、自带的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。

最后修改时间:2023-01-30 14:21:47
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论