眾所周知,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進行舉報,并提供相關證據,一經查實,墨天輪將立刻刪除相關內容。




