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 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;
可以看到ysl的extension建立成功,包含一個表和一個函式。
6.驗證ysl的extension的函式的功能
功能正常
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69990629/viewspace-2847276/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- # 編寫第一個Chrome ExtensionChrome
- PostgreSQL DBA(133) - Extension(postgresql_anonymizer)SQL
- C++編寫自定義TCP包併傳送C++TCP
- 如何為 Cloud TPU 編寫自定義估算器模型Cloud模型
- PostgreSQL DBA(150) - Extension(pgmetrics)SQL
- PostgreSQL DBA(184) - Extension(hypoPG)SQL
- Excel 開始支援使用 JavaScript 編寫自定義函式ExcelJavaScript函式
- Qt編寫自定義控制元件屬性設計器QT控制元件
- 如何編寫一個前端框架之六-自定義元素(譯)前端框架
- tableau自定義地理編碼
- PostgreSQL DBA(83) - Extension(pg_buffercache)SQL
- PostgreSQL DBA(84) - Extension(pg_prewarm)SQL
- PostgreSQL DBA(72) - Extension(pgplsql_check)SQL
- PostgreSQL DBA(162) - Extension(pg_catcheck)SQL
- PostgreSQL DBA(134) - Extension(auto_explain)SQLAI
- PostgreSQL DBA(130) - Extension(pgsql-gzip)SQL
- PostgreSQL DBA(63) - Extension(pg_qualstats)SQL
- PostgreSQL DBA(163) - Extension(pg_cron)SQL
- 十分鐘瞭解eslint配置 && 編寫自定義eslint規則EsLint
- EFCore3.1+編寫自定義的EF.Functions擴充套件方法Function套件
- 手寫一個自定義PromisePromise
- PostgreSQL DBA(129) - Extension(pg_variables).mdSQL
- PostgreSQL DBA(63) - Extension(pg_stat_statements)SQL
- 在 Flutter 中編寫自定義小部件(第1部分)ー EllipsizedTextFlutterZed
- ezdxf寫CAD文字用自定義字型自定義字型
- 如何寫好一個自定義ViewView
- 從零開始系列-Laravel編寫api服務介面:11.自定義包LaravelAPI
- Laravel重寫資源路由自定義URLLaravel路由
- iOS自定義log並寫入檔案iOS
- Android自定義View之定點寫文字AndroidView
- netty系列之:自定義編碼解碼器Netty
- Base64自定義編碼表及破解
- k8s自定義controller三部曲之三:編寫controller程式碼K8SController
- 編寫自定義 Laravel 擴充套件包測試用例,phpunit 錯誤提示 “class not found”Laravel套件PHP
- Visio 中自定義首字母大寫功能
- C語言[工程專案應用]gtest測試框架編寫以及自定義測試框架C語言框架
- Netty原始碼分析之自定義編解碼器Netty原始碼
- vue中elementUI的表格實現自定義編輯VueUI