天天看點

PostgreSQL插件十八摸

引言

PostgreSQL插件簡直太多了,又整理了一次,也發現了許多潛在的有價值的插件。

運維相關

pg_crash、pg_simula:模拟資料庫crash

pg_remote_exec:通過sql在伺服器執行系統指令

pg_cheat_funcs:提供了一些有用的函數,比如pg_segmentation_fault,可以強制segment fault

pg_hashids:生成短的唯一ID

pg_rational:高效率精确數值類型

pg_cryogen

:類似greenplum的AO表。

pg_prioritize:每個會話一個程序, 根據業務優先級可以設定不同業務的資料庫會話程序的優先級.

VidarDB:LSM引擎

pg_prometheus:為了友善prometheus使用者使用PG作為後端存儲,支援了相容prometheus的資料類型,操作符,索引支援等。

pg_checksum:校驗checksum

amcheck:驗證索引結構的邏輯一緻性

pg_verify_checksums:可以對整個資料庫或指定的資料檔案進行checksum校驗

pgtransfer:表級遷移、通過拷貝資料檔案實作超高效率的表級資料遷移,并且不産生redo。

pg_cgroup:實作了一些cgroup的接口,通過調用函數可以實作資源組的設定和管理.

pgnodemx:crunchy 開源 pgnodemx插件, 提供了SQL 接口, 可以讀取Linux cgroup資訊, 便于監控資料庫運作系統的健康狀态. crunchy是安全著稱的k8s pg管理套件廠商, 也是PG鉑金開源貢獻企業.

pg_lightool:利用WAL的FPW,對損壞的PAGE進行修複。不需要使用備份集對整個資料庫進行完整回放來恢複。

pg_strom:GPU加速插件

pg_credereum、pg_blkchain:為PostgreSQL資料庫提供了加密驗證的審計功能,為關系DBMS帶來了區塊鍊的一些屬性。

pg_catcheck:系統表檢查是否損壞

pg_variables:該插件可用于定義變量,在建立類似Oracle的package等場景時用于聲明變量。

pg_prefaulter:standby加速回放,提前預熱到cache

pg_start_sql:執行個體啟動時,自動執行SQL或檔案

pg_track_settings:postgresql.conf 配置變更跟蹤

pg_surgery:v14新增,通過擦除tuple内容或修改tuple的head資訊,可以修複被邏輯損壞的tuple

pg_dirtyread:讀取還沒有被vacuum的元組

pg_oltp_bench:sysbench test case遷移到pgbench

pgquarrel:DDL比對

hstore:鍵值對

pg_curl:transfer with URL syntax via HTTP, HTTPS, FTP, FTPS, GOPHER, TFTP, SCP, SFTP, SMB, TELNET, DICT, LDAP, LDAPS, FILE, IMAP, SMTP, POP3, RTSP and RTMP

Swarm64:收費列存

SSLUtils:通過SQL接口直接管理ca, cert, key, crl等檔案

bg_mon:内置 WEB 服務,它收集每個程序的統計資訊,并結合pg stat活動為有行在那裡的程序、全局系統統計資訊、每個分區資訊和記憶體統計資訊。

Plotpg:繪圖插件

ctidscan

:提供了一個使用不等運算符通路系統列ctid的功能

pg_get_page_tuple

pg-progress

:A PostgreSQL extension to estimate query progress.

gzip:gzip壓縮插件

md5hash:新增了一個資料類型md5,底層使用128bit存儲。

相似搜尋:cube,rum,pg_trgm,smlar,imgsmlr,pg_similarity

安全相關

sepgsql:通過實作這個接口,可以實作資料的細粒度安全控制,例如對某些使用者,隻能看到經過混淆的資料。

pgcrypto:資料加密子產品

pg_audit、pg_log_userqueries、pgreplay:審計

passwordcheck、 credcheck:密碼複雜度檢測

session_exec:失敗超過次數自動鎖定

sql_firewall:SQL防火牆

auth_delay:防破解、安全

set_user、pg_permissions、

pg_restrict

:ACL,權限進一步加強

diskquota

:類Oracle profile,不過隻能限制磁盤

postgresql_anonymizer:對隐私資料進行“動态”脫敏。

insert_username:functions for tracking who changed a table,跟蹤誰修改了表

moddatetime:functions for tracking last modification time,跟蹤最後的更新時間

日志相關

pgloggingfilter:根據日志等級, 錯誤代碼過濾日志列印. 用處挺多, 例如你不想列印一些業務代碼的錯誤, 比如pk沖突, 限制沖突等.

pgbadger:cvs日志分析

pgreplay-go、pgreplay:讀取日志

pg_backtrace:列印錯誤SQL的調用棧内容。了解LONG QUERY正在執行什麼,慢在什麼地方。 通過發送信号 (SIGINT)。向日志中輸出CORE的資訊,列印調用棧資訊,通過發送信号 (SIGSEGV or SIGBUS)。

pg_logging:開辟一個ringbuffer, 在PG 資料庫輸出日志的代碼部位, 加入HOOK, 在将日志列印到檔案(或syslog)的同時輸出到一個ring buffer. 然後你可以通過函數接口來擷取ring buffer中的日志内容.

pgemailaddr:提供一個email類型

walker:用于處理wal日志. 例如實時解析wal, 并生成表空洞熱力圖.

PLPGSQL

plpgsql_check:主動檢查、被動檢查

pldbgapi:調試函數

pldebugger:調試函數

piggly

:plpgsql 代碼覆寫測試工具

pg_linegazer:Transparent code coverage for PL/pgSQL,針對PLPGSQL的TDE

pgora-osql

:oracle pl/sql 代碼相容插件, 類似plpgsql一樣, 作為PG的一種新的存儲過程語言.

監控

pg_stat_statements

system_stats用于觀察OS層的資訊

pg_stat_kcache可以觀察單條SQL花費多少cpu等

pg_stat_monitor:pg_stat_statements和pg_stat_kcache的結合體

pgpro_stats:等待事件統計、采樣配置、自動化監控

pgsentinel、pgsampler:類Oracle ASH

監控工具

PoWA(PostgreSQL Workload Analyzer),工作負載分析工具

PgCluu:性能監控和審計工具,視圖展示

Pgwatch2:最易用的一個。它基于Grafana并為PostgreSQL資料庫提供開箱即用的監控功能。

zabbix、prometheus

pigsty:數值不盡的功能,值得fork一試

pgmetrics

pg_statsinfo

datasentinel

邏輯解碼

pgLogical

Slony-I

Bucardo

walbouncer:可以用于實作部分級複制執行個體,用于拆分多個db的執行個體, 每個db拆分到不同的執行個體.

BDR:多主,其他還有pgxc、pgxl以及衍生而來的Antdb、TBase、Guass300等

wal2json、wal2mongo、decoder_raw、pglogical、decoderbufs、pg_tm_aux(可以指定lsn的slot)、pgl_ddl_deploy(邏輯複制支援複制DDL)

指令行工具

pg_top,類top工具

pgcenter:全能監控工具

pg_activity:指令行top工具

pg_sysstat:相對簡陋

SQL

pg_hint_plan:hint功能

pg_query:高亮,識别風險SQL

pg_plan_advsr:懶人優化

hypopg:類似MySQL虛拟索引

auto-indexing-PostgreSQL:使用各種政策來自動維護索引。

sr_plan:儲存、篡改、固定 執行計劃,Oracle相容

pg_parallizator:并行建立索引

pgcharts:将sql結果直接轉換為圖像的web服務, 不需要複雜的bi工具就可以實作.

JOB

pg_timetable

pg_cron

pg_agent

pg_task

巡檢

Toolkit(percona)

check_postgres

check_pgactivity:check_pgactivity is designed to monitor PostgreSQL clusters from Nagios. It offers many options to measure and monitor useful performance metrics.

pgstatspack

sharding

citus

pg_shardman

plproxy

FDW

oracle_fdw

mysql_fdw

mongo_fdw

sqlserver_fdw

file_fdw

tds_fdw

等等

https://wiki.postgresql.org/wiki/Foreign_data_wrappers

其他分類

ADG:圖資料庫

pg_buffercache:觀察buffer

pgstattuple:行級别的統計

pg_filedump、pg_waldump、pg_walminer、pg_fix:觀察檔案、日志,修改日志

pgtrashcan:垃圾資源回收筒

pg_timeout:空閑會話逾時,pg14引入idle_session_timeout參數

pageinspect:内窺資料庫BLOCK的内容

pg_buffercache:統計資料庫shared buffer的内容

pg_freespacemap:觀察資料庫fsm檔案内容

pgrowlocks:行鎖統計

pgstattuple,:記錄級别統計資訊觀察

pg_trgm、pgroonga:模糊查詢, 相似文本查詢

pg_trgm_pro:pg_trgm的增強版,隻要有完全相等的字元則傳回1, 否則傳回包含的token數占原字元串的token比例.

pg_visibility:觀察資料庫block的vm标簽值(all visibility, frozen, dirty等)

pg_prewarm、pg_fincore:資料預熱

tablefunc:行列轉換,connect by

auto_explain、pg_show_plans:執行計劃

zhparser、pg_jieba、pg_scws、friso:中文分詞

pg_trgm、pg_bigm(沒有3個分詞限制)、pgroonga:模糊查詢

pg_similarity、cube、rum:相似查詢

pg_pathman、pg_partman:分區

pg_qualstats:索引建議

pg_wait_sampling

:等待事件采樣

citext:大小寫

pg_query_state:背景工作情況

postgis:強大的地理空間資料

pg_readonly:設為隻讀,類似transaction_read_only

pg_tt:全局臨時表

pg_dropbuffer、pg_dropcache:删除cache和buffer

pg_prioritize:程序優先級排程

timescaledb:時序資料庫

md5hash、gzip(wget

http://api.pgxn.org/dist/gzip/1.0.0/gzip-1.0.0.zip

)、

pgzstd

:加密壓縮

ddlx、pgddl:擷取DDL

uuid-ossp:uuid生成

pipelindb:流式計算

orafce:oracle相容、package一些内置函數等

pg_roaringbitmap:精準營銷

pg_repack、pg_sequeeze、pgcompacttable:當機、重建、垃圾回收

AWR:pg_awr、pg_profile

zedstore, 行列混合存儲

undam、zheap:undo引擎

pgpool:讀寫分離、負載均衡

pg_plan_inspector:機器學習

pg_background:自治事務

ZomboDB:Elasticsearch作為Index

PostPic:image process

pggraphblas:pgGraphBLAS is a postgres extension that bridges

The GraphBLAS API

with the

PostgreSQL

object relational database.

pgsql-http:pg裡面請求http

pgrouting:圖路由功能

pgmemcache:pgmemcache is a set of PostgreSQL user-defined functions that provide an interface to memcached. Installing pgmemcache is easy, but does have a few trivial requirements.

内置插件

btree_gin, 普通字段支援gin反向索引

btree_gist, 普通字段支援gist索引

citext, 忽略大小寫的資料類型

earthdistance, 輕量化地球模型類型

file_fdw, 以外部表的形式讀寫檔案

fuzzystrmatch, 語音模糊搜尋

intagg, 整型聚合功能擴充

intarray, 整型數組GIST索引擴充功能

lo, 大對象處理

spi, 一些常用的跟蹤觸發器函數, 例如最後變更事件跟蹤

test_decoding, 邏輯複制decoder

tsm_system_rows, 采樣擴充子產品

tsm_system_time, 采樣擴充子產品

uuid-ossp, UUID生成子產品

xml2, XML類型子產品

cube, cube類型, 支援多種距離排序算法, 也可以用于相似向量搜尋

ltree, 樹類型

連接配接池

https://agroal.github.io/pgagroal/ https://github.com/yandex/odyssey

PgBouncer

pgpool

http://dcx.sap.com/1200/en/dbprogramming/pg-jdbc-sectb-3838484.html

執行計劃

pg_flame:explain analyze 火山圖 圖形化軟體

plprofiler:類perf火焰圖,分析慢code

https://explain.depesz.com/ https://explain.dalibo.com/plan# https://tatiyants.com/pev/#/plans/new

pg_store_plans

auto_explain

pg_show_plans,有bug

GUI工具

OmniDB

pgweb

clouddbeaver

datagrip

Beekeeper Studio

ClusterControl

Adminer

HeidiSQL

備份

barman

pg_backrest

pg_probackup

pg_rman

EDB BART

OmniPITR

pghoard

pitrery

ptrack

:支援資料檔案塊級别增量備份功能更新檔和插件,類似oracle rman increment backup

遷移

ora2pg(Oracle -> PostgreSQL)

pg_chameleon(MySQL -> PostgreSQL)

devart(Oracle、MySQL -> PostgreSQL

https://pypi.org/project/py-mysql2pgsql/

更多參考wiki:

https://wiki.postgresql.org/wiki/Converting_from_other_Databases_to_PostgreSQL

高可用

pg_keeper:僅用于将standby切換為master, 或者自動降級.

patroni

pgpool-II

stolon

repmgr

pacemaker + corosync

PAF( PostgreSQL Automatic Failover )

pg_auto_failover

EcoX

DRBD + LVM

可觀察性

  • client backends
    • pg_stat_ssl, pg_blocking_pids(), pg_stat_activity
  • query planning
    • EXPLAIN, pg_stat_statements
  • query execution
    • pg_stat_activity, pg_stat_statements, pg_stat_progress_create_index, pg_stat_progress_cluster, pg_prepared_xacts, pg_stat_kcache, pg_locks
  • indexes usage
    • pg_stat_all_indexes
  • tables usage
    • pg_stat_all_tables
  • buffers io
    • pg_stat_statements, pg_stat_database, pg_statio_all_indexes, pg_statio_all_tables, pg_statio_all_sequences
  • shared buffers
    • pg_buffercache, pg_shmem_allocations
  • slru caches
    • pg_stat_slru
  • postmaster
    • pg_stat_database
  • background workers
    • pg_stat_activity
  • autovacuum launcher
  • autovacuum workers
    • pg_stat_activity, pg_stat_progress_vacuum, pg_stat_all_tables, pg_stat_progress_analyze
  • wal
    • EXPLAIN, pg_stat_statements, pg_is_wal_replay_paused(), pg_is_xlog_replay_paused(), pg_current_wal_lsn(), pg_current_xlog_location(), pg_wal_lsn_diff(), pg_xlog_location_diff(), pg_current_wal_insert_lsn(), pg_current_xlog_insert_location(), pg_current_wal_flush_lsn(), pg_current_xlog_flush_location(), pg_last_wal_receive_lsn(), pg_last_xlog_receive_location(), pg_last_wal_replay_lsn(), pg_last_xlog_replay_location(), pg_last_xact_replay_timestamp(), pg_ls_waldir(), pg_walfile_name(), pg_xlogfile_name(), pg_walfile_name_offset(), pg_xlogfile_name_offset()
  • logger process
    • pg_ls_logdir(), pg_current_logfile()
  • stats collector
  • logical replication
    • pg_stat_subscription, pg_replication_slots
  • wal sender process
    • pg_replication_slots, pg_stat_replication
  • wal archiver process
    • pg_stat_archiver, pg_ls_archive_statusdir()
  • background writer
    • pg_stat_bgwriter
  • checkpointer process
    • pg_stat_database, pg_stat_bgwriter
  • network
    • nicstat
  • storage
    • iostat, pg_stat_kcache, pg_stat_progress_basebackup
  • wal receiver process
    • pg_stat_wal_receiver, pg_last_wal_receive_lsn()
  • recovery process
    • pg_stat_database_conflicts, pg_last_wal_replay_lsn(), pg_last_xact_replay_timestamp()
  • tables/indexes data files
    • pgstattuple, pg_relation_filenode(), pg_relation_filepath(), pg_filenode_relation(), pg_ls_dir(), pg_ls_tmpdir(), pg_total_relation_size(), pg_relation_size(), pg_indexes_size(), pg_table_size(), pg_database_size(), pg_tablespace_size()