PostgreSQL編寫自定義extension

T1YSL發表於2021-12-12

眾所周知,PG資料庫可以新增許多擴充套件,用的比較多的有pg_show_plans,pg_stat_statments, 擴充套件提供給我們很多的便利,這篇文章,是我整理的一篇怎樣編寫自定義的extension,希望對大家有幫助。

舉個例子 pg_show_plans外掛,在目錄中,它最主要的四個檔案如圖黃框裡所示。
1639316255655.png

一個格式為 的控制檔案extension_name.control,它告訴 Postgres 關於您的擴充套件程式的一些基礎知識
一個擴充套件程式的 SQL 指令碼檔案,格式為extension--version.sql
一個c實現的extension_name.c檔案,可以根據功能需求編寫
一個Makefile檔案幫助編譯

在本文中,我定義了一個名為ysl的extension,比較簡單,擴充套件包含一個表和一個函式,這邊沒給表裡加入資料,僅僅用一個函式驗證extension的功能是否正常。(根據輸入的數值來輸出:如果數值>10,輸出 ‘edg niubi’,如果數值<10,則輸出 ‘edg lakuai’)

在/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;

1639317094453.png

可以看到ysl的extension建立成功,包含一個表和一個函式。
1639317120623.png

1639317163214.png

1639317185723.png

6.驗證ysl的extension的函式的功能

1639317269971.png

功能正常


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69990629/viewspace-2847276/,如需轉載,請註明出處,否則將追究法律責任。

相關文章