PgSQL · 核心開發 · 如何管理你的 PostgreSQL 外掛
一.背景
我們都知道 PostgreSQL 提供了豐富資料庫核心程式設計的介面,允許開發者以外掛的形式把功能融入資料庫核心。
PostgreSQL 提供了一個外掛管理模組,用於管理使用者建立的外掛。
本文給大家介紹 PostgreSQL 外掛管理模組,幫助大家管理自己的外掛。
二.PostgreSQL的外掛內容
通常一個 PostgreSQL 核心外掛包括下面的部分
- 1. 包含功能的邏輯的動態庫,即 so 檔案。
- 2. 描述外掛資訊的的控制檔案,即 control 檔案。
- 3. 一組檔案用於建立、更新和刪除外掛,這是一組按照版本命名的 SQL 文字檔案。
如果缺少了上述部分,或版本號不正確,外掛的管理功能會異常。
三.外掛的管理
我們使用 create extension, drop extension alter extension 管理指定的外掛。
1.外掛的建立
例如 postgres_fdw 的建立
create extension postgres_fdw;
drop extension postgres_fdw;
我們可以選擇把外掛建立到指定的模式中。
2.外掛的管理檢視
這是最簡單的部分,建立外掛後,我們可以通過外掛管理檢視看到一些細節資訊
select * from pg_extension ;
extname | extowner | extnamespace | extrelocatable | extversion | extconfig | extcondition
--------------+----------+--------------+----------------+------------+-----------+--------------
postgres_fdw | 10 | 2200 | t | 1.0 | |
可以看到,postgres_fdw 的 owner, 存在的 schema 和外掛的小版本。
3.外掛的刪除
外掛的內容可以是任何的資料庫物件,例如:函式、操作符等等。
這些物件可能被其他的物件引用,例如我們在 postgres_fdw 建立了基於 postgres_fdw 的外部表。
當我們要刪除 postgres_fdw 時,需要加上 cascade 子句,把相關物件一併刪除。
drop extension postgres_fdw cascade;
這麼做帶來的問題是,所有依賴這個外掛的物件都會被刪除。再次使用需要重建。
4.外掛的更新
有時候,我們需要做外掛的 BUGFIX ,或定製一些功能。這就用到了外掛更新功能。
- 首先,我們需要升級外掛的小版本
修改控制檔案 .control, 增加一個小版本,如果當前版本是 1.1,則檔案中版本號修改成 1.2
- 新增新版本的的 DDL SQL 檔案
新增新版本的 DDL SQL 檔案 *–1.2.sql, 用於從零建立該外掛。
該 SQL 檔案應該包括該外掛的所有物件的 DDL。
- 新增使用者老版本升級到新版本的 DDL SQL 檔案
建立 *1.1–1.2.sql,用於從版本 1.1 升級到 1.2
該 SQL 檔案只包含 1.2 版本中新建立的物件。使用者的升級操作會呼叫該 SQL 檔案,從而避免了完全重新建立。
-
修改原始碼新增新的功能,編譯並安裝到指定目錄。
-
使用 SQL 升級小版本
alter extension postgres_fdw update;
如果成功更新,我們能從檢視中看到對應的小版本號被更新了。
postgres=# select * from pg_extension ;
extname | extowner | extnamespace | extrelocatable | extversion | extconfig | extcondition
--------------+----------+--------------+----------------+------------+-----------+--------------
postgres_fdw | 10 | 2200 | t | 1.2 | |
(2 rows)
使用 PostgreSQL 的外掛管理功能,使用者很容開發和維護需要的外掛。
其他
有幾點需要特別提醒,這是在開發和管理外掛時,經常碰到的問題,需要多加註意
- 外掛是通過動態庫形式引入到核心中。和核心在同一個程式中執行,且沒有記憶體保護,影響核心的穩定性。開發中需要特別注意記憶體的使用。不要造成記憶體洩露或越界寫。建議使用 PostgreSQL 的記憶體管理機制,外掛中也能使用。
- 核心中被標記成 PGDLLIMPORT 的全域性變數都能在外掛中直接使用,這些通常是一些 GUC 引數。
- 核心中非 static 的函式也能在外掛中使用,只需要先 extern 它們。
- 我們可以實現 _PG_init 用於實現一些初始化工作,該函式在連線建立後只會被執行一次。
- 我們可以在 _PG_init 中使用函式 DefineCustom*Variable 定義對應外掛相關的 GUC 引數,他們可以用於開啟和關閉該外掛的一些功能。
- 外掛的引數需要以外掛名開頭且加上點,例如 oss_fdw.enable_parallel_read。
參考
相關文章
- pgsql的向量外掛啟用問題SQL
- PostgreSQL外掛SQL
- 如何開發ecshop支付外掛
- 如何開發 Sublime Text 2 的外掛
- 如何開發一個 PyCharm 外掛PyCharm
- PostgreSQL外掛彙總SQL
- wordpress外掛開發03-簡單的all in one seo 外掛開發
- Flutter外掛開發Flutter
- Mybatis外掛開發MyBatis
- Webstorm 外掛開發WebORM
- flutter 外掛開發Flutter
- 開發Rhino外掛
- chrome 外掛開發Chrome
- go~wasm外掛的開發GoASM
- 如何利用Fluttify開發一個新的Flutter外掛Flutter
- PostgreSQL外掛hook機制SQLHook
- apisix~lua外掛開發與外掛註冊API
- eclipse開發php的外掛EclipsePHP
- 用ts開發hbuilderx的外掛?UI
- babel 外掛開發案例Babel
- Maven外掛開發教程Maven
- Chrome外掛開發教程Chrome
- Stylus外掛開發教程
- chrome外掛開發文件Chrome
- babel外掛開發心得Babel
- Vue-外掛開發Vue
- jQuery外掛開發模式jQuery模式
- jquery外掛開發方法jQuery
- dlopen開發外掛庫
- Vue如何使用混合Mixins和外掛開發Vue
- Flutter開發之Flutter外掛開發Flutter
- 外掛如何呼叫本外掛的View?View
- WordPress外掛開發例項教程 - 版權外掛
- ZBlog外掛開發檔案結構(外掛)
- wordpress外掛開發02-首頁文章自動摘要外掛開發
- postgresql和postgis外掛安裝SQL
- Android Studio Plugin 外掛開發教程(一) —— 開發你的第一個外掛AndroidPlugin
- citusdata支援的一些postgresql的外掛SQL