众所周知,PG数据库可以添加许多扩展,用的比较多的有pg_show_plans,pg_stat_statments, 扩展提供给我们很多的便利,这篇文章,是我整理的一篇怎样编写自定义的extension,希望对大家有帮助。
举个例子 pg_show_plans插件,在目录中,它最主要的四个文件如图黄框里所示。
一个格式为extension_name.control的控制文件,它告诉Postgres关于您的扩展程序的一些基础知识 一个扩展程序的SQL脚本文件,格式为extension--version.sql 一个c实现的extension_name.c文件,可以根据功能需求编写 一个Makefile文件帮助编译
复制
在本文中,我定义了一个名为ysl的extension,比较简单,扩展包含一个表和一个函数,这边没给表里加入数据,仅仅用一个函数验证extension的功能是否正常。(根据输入的数值来输出:如果数值>10,输出 ‘edg niubi’,如果数值<10,则输出 ‘edg lakua’)
在/opt/postgresql-12.1/contrib/目录下创建ysl目录,并创建如下四个文件。
1.编写ysl–1.0.sql
/* contrib/ysl/ysl--1.0.sql */ --complain if script is sourced in psql rather than via ALTER EXTENSION \echo Use "CREATE EXTENSION ysl" to load this file. \quit CREATE TABLE tab_ysl(oid integer,namespace_oid integer,name text,time timestamp); /* 创建一个表格 */ CREATE FUNCTION fun_ysl(int) /* 创建一个函数 */ RETURNS text AS '$libdir/ysl' LANGUAGE C STRICT PARALLEL RESTRICTED;
复制
2.编写ysl.control
# ysl extension comment = 'EDG test ' default_version = '1.0' module_pathname = '$libdir/ysl' relocatable = true
复制
3.编写Makefile
# contrib/ysl/Makefile MODULES = ysl EXTENSION =ysl DATA = ysl--1.0.sql MODULES = ysl PG_CONFIG = pg_config PGXS := $(shell $(PG_CONFIG) --pgxs) include $(PGXS)
复制
4.编写ysl.c
#include "postgres.h" #include "fmgr.h" #include "utils/builtins.h" #ifdef PG_MODULE_MAGIC PG_MODULE_MAGIC; #endif PG_FUNCTION_INFO_V1(fun_ysl); Datum fun_ysl(PG_FUNCTION_ARGS); Datum fun_ysl(PG_FUNCTION_ARGS) { int a; a=PG_GETARG_INT32(0); if (a > 10) { PG_RETURN_TEXT_P(cstring_to_text("EDG niubi")); } else { PG_RETURN_TEXT_P(cstring_to_text("EDG lakua")); } }
复制
5.安装名为ysl的extension
确认文件无误后
make&&make install
复制
进入数据库
create extension ysl;
复制
可以看到ysl的extension创建成功,包含一个表和一个函数。
6.验证ysl的extension的函数的功能
功能正常
最后修改时间:2021-12-12 22:47:31
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
您好,您的文章已入选合格奖,10墨值奖励已经到账请查收!
❤️我们还会实时派发您的流量收益。
3年前

评论
相关阅读
外国CTO也感兴趣的开源数据库项目——openHalo
小满未满、
1631次阅读
2025-04-21 16:58:09
9.9 分高危漏洞,尽快升级到 pgAdmin 4 v9.2 进行修复
严少安
386次阅读
2025-04-11 10:43:23
3月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
372次阅读
2025-04-15 14:48:05
转发有奖 | PostgreSQL 16 PGCM高级认证课程直播班招生中!
墨天轮小教习
182次阅读
2025-04-14 15:58:34
中国PostgreSQL培训认证体系新增PGAI应用工程师方向
开源软件联盟PostgreSQL分会
181次阅读
2025-05-06 10:21:13
PG生态赢得资本市场青睐:Databricks收购Neon,Supabase融资两亿美元,微软财报点名PG
老冯云数
141次阅读
2025-05-07 10:06:22
SQL 优化之 OR 子句改写
xiongcc
136次阅读
2025-04-21 00:08:06
告别老旧mysql_fdw,升级正当时
NickYoung
121次阅读
2025-04-29 11:15:18
PostgreSQL中文社区亮相于第八届数字中国峰会
PostgreSQL中文社区
105次阅读
2025-05-07 10:06:20
PostgreSQL的dblink扩展模块使用方法
szrsu
103次阅读
2025-04-24 17:39:30