# PostgreSQL插件十八摸 (转)
原创 xiongcc [PostgreSQL学徒](javascript:void(0)😉 2021-08-26 16:35
原文地址
引言
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
pg_plan_inspector:机器学习
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.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
observability
附一张可观察性全景图:
-
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
-
- pg_stat_activity
-
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()