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

根据版本进行安装【必备】安装的 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`:



实例

cc -fPIC -Ipg\_config --includedir-server -c funcs.c
cc -shared -o funcs.so funcs.o -Ipg\_config --includedir-server -lm

pg_config --includedir-server 的地址

[root@tcloud ~]# pg_config --includedir-server
/usr/pgsql-12/include/server


3. 将共享库文件复制到 PostgreSQL 的共享库目录中:



cp funcs.so pg\_config --libdir/.

pg_config --libdir 的地址

[root@tcloud ~]# pg_config --libdir
/usr/pgsql-12/lib


4. 在 PostgreSQL 中创建函数的定义:



CREATE FUNCTION add_one ( INTEGER ) RETURNS INTEGER AS ‘/usr/pgsql-12/lib/func’,
‘add_one’ LANGUAGE C STRICT;


现在,已经可以在 SQL 查询中使用 `add_one` 函数了,例如:



SELECT add_one(11);

本人从事网路安全工作12年,曾在2个大厂工作过,安全服务、售后服务、售前、攻防比赛、安全讲师、销售经理等职位都做过,对这个行业了解比较全面。

最近遍览了各种网络安全类的文章,内容参差不齐,其中不伐有大佬倾力教学,也有各种不良机构浑水摸鱼,在收到几条私信,发现大家对一套完整的系统的网络安全从学习路线到学习资料,甚至是工具有着不小的需求。

最后,我将这部分内容融会贯通成了一套282G的网络安全资料包,所有类目条理清晰,知识点层层递进,需要的小伙伴可以点击下方小卡片领取哦!下面就开始进入正题,如何从一个萌新一步一步进入网络安全行业。

学习路线图

其中最为瞩目也是最为基础的就是网络安全学习路线图,这里我给大家分享一份打磨了3个月,已经更新到4.0版本的网络安全学习路线图。

相比起繁琐的文字,还是生动的视频教程更加适合零基础的同学们学习,这里也是整理了一份与上述学习路线一一对应的网络安全视频教程。

网络安全工具箱

当然,当你入门之后,仅仅是视频教程已经不能满足你的需求了,你肯定需要学习各种工具的使用以及大量的实战项目,这里也分享一份我自己整理的网络安全入门工具以及使用教程和实战。

项目实战

最后就是项目实战,这里带来的是SRC资料&HW资料,毕竟实战是检验真理的唯一标准嘛~

面试题

归根结底,我们的最终目的都是为了就业,所以这份结合了多位朋友的亲身经验打磨的面试题合集你绝对不能错过!

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

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

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值