# 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.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

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()
posted @ 2022-08-27 09:24  HSping  阅读(784)  评论(0编辑  收藏  举报