• PostgreSQL编写自定义extension


    众所周知,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创建成功,包含一个表和一个函数。

     

     

  • 相关阅读:
    Iaas、Paas、Saas对比分析
    一个不一样的Python教程
    传销的那些年
    availableProcessors is already set to [8], rejecting [8]
    脚本是个好东西
    《设计模式之禅》之桥梁模式
    博文视点之传奇程序员修炼之道观后感
    《设计模式之禅》之享元模式
    《设计模式之禅》之解释器模式
    Git修改commit提交信息
  • 原文地址:https://www.cnblogs.com/lishanyang/p/16028584.html
Copyright © 2020-2023  润新知