2024年网安最全PostgreSQL【应用 02】扩展SQL之C语言函数(编写、编译、载入(1)

本文介绍了如何通过C语言的C函数接口扩展PostgreSQL的功能,强调了C函数在效率上的优势,并提供了从准备阶段的文档查看、工具安装,到编写和编译C函数的详细步骤。同时提及了与网络安全面试相关的内容和系统化的学习资源推荐。
摘要由CSDN通过智能技术生成

通过使用 PostgreSQL 的 C 函数接口,我们可以编写用 C 语言实现的函数,并将其集成到数据库中。这些函数可以在 SQL 查询中像其他内置函数一样被调用,从而扩展 PostgreSQL 的功能。

C 函数在某些情况下可以提供比 SQL 函数更高的执行效率,因为它们可以直接访问底层系统资源并进行更高级的优化。通过使用 C 函数,我们可以在函数内部实现复杂的算法和逻辑,利用 C 语言的功能和库来提高执行效率。

1.准备

1.1 开发文档
-- 查询数据库版本
SELECT "version"()
-- PostgreSQL 12.12 (Debian 12.12-1.pgdg110+1) on x86\_64-pc-linux-gnu, compiled by gcc (Debian 10.2.1-6) 10.2.1 20210110, 64-bit

根据数据库的版本查看文档:

英文:PostgreSQL: Documentation: 12: 37.10. C-Language Functions

中文:37.10. C 语言函数 (postgres.cn)

1.2 工具安装
# 避免报错1
functionNameFile.c:1:10: fatal error: postgres.h: No such file or directory
    1 | #include "postgres.h"
      |          ^~~~~~~~~~~~
compilation terminated.

# 根据版本进行安装【必备】安装的 postgresql12-devel.x86\_64 的版本要跟数据库保持一致
yum install postgresql12-devel.x86_64
# 问题
Error: Package: postgresql12-devel-12.15-1PGDG.rhel7.x86_64 (pgdg12)
           Requires: llvm-toolset-7-clang >= 4.0.1
# 解决
yum install centos-release-scl-rh
# 再次进行安装

2.开始

2.1 编写C语言函数

要严格按照文档的说明进行编写,创建一个新的文件,例如 func.c,并添加以下内容:

#include "postgres.h"
#include "fmgr.h"

PG_MODULE_MAGIC;

PG\_FUNCTION\_INFO\_V1(add_one);

Datum
add\_one(PG_FUNCTION_ARGS)
{
    int32 arg = PG\_GETARG\_INT32(0);
    PG\_RETURN\_INT32(arg + 1);
}

  1. #include "postgres.h":这是一个预处理指令,用于包含 PostgreSQL 的核心头文件,以便在代码中使用 PostgreSQL 的数据类型、宏和函数。
  2. #include "fmgr.h":这是一个预处理指令,用于包含 PostgreSQL 函数管理器的头文件,提供了函数定义和声明所需的宏。
  3. PG_MODULE_MAGIC:这是一个宏,它用于标识模块的版本和兼容性信息。
  4. PG_FUNCTION_INFO_V1(add_one):这是一个宏,用于声明函数的元数据。在这里,它将函数名 add_one 与函数版本号 V1 关联起来。这样 PostgreSQL 就能够正确地识别和处理这个函数。
  5. Datum add_one(PG_FUNCTION_ARGS):这是函数的定义,使用 Datum 作为返回值类型。PG_FUNCTION_ARGS 是一个宏,它展开为一个结构体,包含了函数的参数和返回值信息。
  6. int32 arg = PG_GETARG_INT32(0):这是获取函数参数的值。PG_GETARG_INT32(0) 宏用于从参数列表中获取第一个参数,并将其转换为 int32 类型。这里将获取到的参数值存储在 int32 类型的变量 arg 中。
  7. PG_RETURN_INT32(arg + 1):这是函数的返回语句。它使用 PG_RETURN_INT32 宏将 arg + 1 的结果作为函数的返回值。在这里,函数将输入的整数参数加一后返回。

这段代码的功能很简单:将输入的整数参数加一并作为函数的返回值。

2.2 编译和链接动态载入的函数

Linux环境,其他环境小伙伴儿们自行查看啊:

# 创建PIC的编译器标志是-fpic。创建一个共享库的编译器标志是-shared。
cc -fPIC -c name.c
cc -shared -o name.so name.o

实例使用 C 编译器将源代码编译为共享库,例如 func.so

还有兄弟不知道网络安全面试可以提前刷题吗?费时一周整理的160+网络安全面试题,金九银十,做网络安全面试里的显眼包!

王岚嵚工程师面试题(附答案),只能帮兄弟们到这儿了!如果你能答对70%,找一个安全工作,问题不大。

对于有1-3年工作经验,想要跳槽的朋友来说,也是很好的温习资料!

【完整版领取方式在文末!!】

93道网络安全面试题

内容实在太多,不一一截图了

黑客学习资源推荐

最后给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

1️⃣零基础入门
① 学习路线

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

image

② 路线对应学习视频

同时每个成长路线对应的板块都有配套的视频提供:

image-20231025112050764

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以点击这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 15
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值