最近有pgsql的分區表功能需求,沒想到都2025年了,pgsql和mysql還是沒有自身支持自動創建分區表的功能
現在pgsql數據庫層面還是只能用老三樣的辦法來處理這個問題,每個方法各有優劣
1. 觸發器
這是最傳統的方法,通過創建一個觸發器來檢查數據并創建新分區
缺點是每次插入數據都會執行觸發器,當數據量大時可能影響性能,現在基本很少用這個方案在生產環境上操作
2. pg_partman
PostgreSQL的一個擴展,專門用于自動管理分區表,個人使用這種方案比較多,而且比較簡單,使用方法如下:
#安裝好擴展后在配置文件中啟用插件,添加以下內容后重啟數據庫
#postgresql.conf
shared_preload_libraries = 'pg_partman_bgw'
pg_partman_bgw.interval = 3600 # pg_partman將每小時自動執行一次分區維護任務
pg_partman_bgw.role = 'username'
pg_partman_bgw.dbname = 'dbname'#進入數據庫啟用插件
CREATE EXTENSION pg_partman;#設置分區管理
SELECT partman.create_parent('public.a', -- 父表表名'xxx_date', -- 分區字段'month', -- 分區類型(按月)1, -- 預創建分區數量p_premake := 3 -- 提前創建3個分區
);
3. pg_cron
編寫一個自定義腳本,并通過pg_cron擴展定期執行,檢查是否有分區,沒有則創建。
其實這個方法對性能也沒有什么影響,但是需要編寫腳本和執行定時任務,