8. 博采众长:扩展的安装,使用与管理
本章为 AI 批量生成的草稿目录,尚未编写,请务必注意。
章节大纲
一、扩展基础概念
1.1 什么是 PostgreSQL 扩展
- 扩展的定义和架构
- 扩展与内核的关系
- 扩展的优势与劣势
- 扩展生态系统概览
1.2 扩展的分类体系
- 按功能分类(时序、地理、搜索、分析等)
- 按语言分类(C、Rust、Python、Perl、JavaScript)
- 按来源分类(Contrib、第三方、自研)
- 按部署方式分类(共享库、SQL、混合)
1.3 扩展的工作原理
- 动态加载机制
- 钩子(Hook)系统
- 共享内存管理
- 后台工作进程
二、扩展管理基础
2.1 CREATE EXTENSION 命令
- 基本语法和参数
- 依赖管理(CASCADE)
- 架构(SCHEMA)指定
- 版本控制
2.2 扩展的安装方式
- 包管理器安装(apt、yum、brew)
- 源码编译安装
- PGXS 构建系统
- Docker 容器部署
2.3 扩展的配置管理
- postgresql.conf 配置
- shared_preload_libraries
- 会话级配置
- 权限管理
2.4 扩展的升级与迁移
- ALTER EXTENSION UPDATE
- 版本兼容性检查
- pg_upgrade 注意事项
- 云平台迁移策略
三、核心扩展详解
3.1 Contrib 模块
- pg_stat_statements:查询性能分析
- pgcrypto:加密功能
- uuid-ossp:UUID 生成
- hstore:键值存储
- ltree:层次数据
- intarray:整数数组操作
3.2 监控与性能扩展
- pg_stat_statements:查询统计
- pg_wait_sampling:等待事件采样
- pg_hint_plan:执行计划控制
- auto_explain:自动 EXPLAIN
- pg_stat_kcache:内核级统计
3.3 安全与审计扩展
- pgAudit:审计日志
- set_user:权限提升控制
- pgcrypto:数据加密
- passwordcheck:密码策略
- sepgsql:SELinux 集成
3.4 维护管理扩展
- pg_partman:分区管理
- pg_cron:作业调度
- pg_repack:在线重组
- pgstattuple:表膨胀分析
四、时序与分析扩展
4.1 TimescaleDB
- 时序数据模型
- 超表(Hypertable)
- 连续聚合
- 数据保留策略
- 性能优化
4.2 Citus
- 分布式架构
- 分片策略(行级、模式级)
- 查询路由
- 分布式事务
- 集群管理
4.3 列存储扩展
- Citus columnar
- ZEDSTORE(实验性)
- Parquet 支持
- 压缩算法
五、地理空间扩展
5.1 PostGIS
- 空间数据类型
- 空间索引(GIST、SP-GIST)
- 空间函数
- 拓扑处理
- 栅格数据
5.2 路由与地图扩展
- pgRouting:路径规划
- h3-pg:H3 六边形索引
- MobilityDB:移动对象
六、AI 与向量扩展
6.1 pgvector
- 向量存储与索引
- 相似度搜索
- 嵌入(Embedding)管理
- HNSW 和 IVFFlat 索引
- 与 LLM 集成
6.2 机器学习扩展
- PostgresML
- MADlib
- PL/Python 与 scikit-learn
七、全文搜索扩展
7.1 内置全文搜索
- tsvector 和 tsquery
- 文本搜索配置
- 词典和同义词
7.2 高级搜索扩展
- PGroonga:多语言全文搜索
- pg_search(Ruby)
- zhparser:中文分词
- pg_jieba:结巴分词
八、编程语言扩展
8.1 过程语言
- PL/pgSQL(内置)
- PL/Python(plpython3u)
- PL/Perl(plperl)
- PLV8(JavaScript)
- PL/Rust
8.2 语言特性比较
- 性能对比
- 使用场景
- 安全性考虑
- 生态系统
九、外部数据访问
9.1 Foreign Data Wrapper
- postgres_fdw:PostgreSQL 互联
- oracle_fdw:Oracle 访问
- mysql_fdw:MySQL 访问
- file_fdw:文件访问
9.2 数据集成扩展
- Debezium:CDC 实时同步
- kafka_fdw:Kafka 集成
- mongo_fdw:MongoDB 访问
十、API 与协议扩展
10.1 GraphQL 支持
- pg_graphql
- PostGraphile
- Hasura 集成
10.2 REST API
- PostgREST
- pREST
10.3 兼容性扩展
- Babelfish:SQL Server 兼容
- FerretDB:MongoDB 协议
十一、图数据库扩展
11.1 Apache AGE
- 图数据模型
- Cypher 查询语言
- 图算法
- 可视化工具
11.2 其他图扩展
- pg_graph
- 递归查询应用
十二、扩展开发
12.1 C 语言扩展开发
- PGXS 构建系统
- 基本结构
- 内存管理
- 错误处理
- SPI 接口
12.2 Rust 扩展开发(pgrx)
- pgrx 框架
- cargo-pgrx 工具
- 类型映射
- 生命周期管理
12.3 扩展测试
- pgTAP 单元测试
- 回归测试
- 性能基准测试
- CI/CD 集成
十三、扩展生态系统
13.1 扩展仓库
- PGXN(PostgreSQL Extension Network)
- apt/yum 仓库
- Pigsty 扩展仓库
- trunk、dbdev、pgxman
13.2 扩展选型
- 评估标准
- 兼容性矩阵
- 性能影响
- 维护状态
13.3 最佳实践
- 扩展使用原则
- 性能优化
- 安全加固
- 监控告警
十四、云平台扩展支持
14.1 AWS RDS/Aurora
- 支持的扩展列表
- Trusted Language Extensions
- 限制和注意事项
14.2 Google Cloud SQL
- 扩展配置方法
- 特有限制
14.3 Azure Database
- 扩展白名单机制
- 部署策略
十五、动手实验
实验1:安装和配置常用扩展
- 安装 pg_stat_statements
- 配置 pgAudit
- 部署 TimescaleDB
实验2:使用 pgvector 构建向量搜索
- 创建向量表
- 导入嵌入数据
- 执行相似度搜索
实验3:PostGIS 空间查询
- 导入地理数据
- 空间索引创建
- 距离和包含查询
实验4:开发简单扩展
- 使用 PGXS 创建扩展
- 实现自定义函数
- 打包和分发
参考资料
官方文档
- PostgreSQL: Documentation - CREATE EXTENSION
- PostgreSQL: Documentation - Packaging Related Objects into an Extension
- PostgreSQL: Documentation - Extension Building Infrastructure
- PostgreSQL: Documentation - ALTER EXTENSION
- PostgreSQL: Documentation - Additional Supplied Modules and Extensions
- PostgreSQL: Documentation - pg_upgrade
- PostgreSQL: Documentation - JSON Types
- PostgreSQL: Documentation - JSON Functions and Operators
- PostgreSQL: Documentation - PL/Python
- PostgreSQL Wiki - Foreign data wrappers
- PostgreSQL Wiki - Monitoring
- PostgreSQL Wiki - Building and Installing PostgreSQL Extension Modules
- PostgreSQL Wiki - Extension Ecosystem: Jobs and Tools
- PostgreSQL Wiki - PGXN
- PostgreSQL Wiki - PGXN v2
- PostgreSQL Wiki - PGXN v2/Architecture
Pigsty 和 Vonng.com 资源
- Pigsty Extension Documentation
- Pigsty Extension Catalog
- PGSQL x Pigsty: 数据库全能王
- pg_stat_statements 宏观查询优化
- 展望PostgreSQL的2024
- AI大模型与向量数据库
- 开箱即用的PG发行版:Pigsty
- PostgreSQL:最成功的数据库
扩展仓库和目录
- PGXN: PostgreSQL Extension Network
- GitHub - dhamaniasad/awesome-postgres
- GitHub - pg-tr/awesome-postgres
- 1000+ PostgreSQL EXTENSIONs List
- PostgreSQL Extensions on Cloud
核心扩展项目
- GitHub - citusdata/citus: Distributed PostgreSQL
- GitHub - timescale/timescaledb: Time-series database
- GitHub - pgvector/pgvector: Vector similarity search
- PostGIS Official Site
- GitHub - apache/age: Graph database extension
- GitHub - apache/age-viewer: Graph visualization
- GitHub - pgroonga/pgroonga: Multilingual full text search
- GitHub - laurenz/oracle_fdw: Oracle Foreign Data Wrapper
- GitHub - pgaudit/pgaudit: PostgreSQL Audit Extension
- GitHub - pgaudit/set_user: Privilege escalation control
- GitHub - citusdata/pg_cron: Job scheduler
- GitHub - pgpartman/pg_partman: Partition management
- GitHub - postgrespro/pg_wait_sampling: Wait event sampling
- GitHub - ossc-db/pg_hint_plan: Optimizer hints
- GitHub - theory/pgtap: Unit testing suite
- GitHub - plv8/plv8: V8 JavaScript procedural language
- GitHub - tcdi/plrust: Rust procedural language
- GitHub - pgcentralfoundation/pgrx: Build extensions with Rust
- GitHub - hydradatabase/columnar: Columnar storage
- GitHub - postgrespro/zson: JSONB compression
- GitHub - hasura/graphql-engine: GraphQL APIs
监控和性能扩展
- GitHub - prometheus-community/postgres_exporter
- GitHub - lesovsky/pgscv: Multi-purpose monitoring agent
- GitHub - pgsty/pg_exporter: Advanced metrics exporter
- GitHub - CrunchyData/pgmonitor: Monitoring resources
- GitHub - coroot/coroot-pg-agent: Query performance
- GitHub - cybertec-postgresql/pgwatch2: Metrics monitor
- GitHub - dalibo/pg_activity: Top-like application
- GitHub - darold/pgbadger: Log analyzer
- GitHub - percona/pg_stat_monitor: Query monitoring
中文分词和搜索扩展
- GitHub - amutu/zhparser: Chinese full-text search
- GitHub - jaiminpan/pg_jieba: Jieba Chinese segmentation
- GitHub - yanyiwu/pg_jieba: Alternative pg_jieba
- GitHub - VitoVan/pg_jieba_opencc: Traditional/Simplified Chinese
- GitHub - postgres-cn/pgdoc-cn: Chinese documentation
教程和最佳实践
- Top PostgreSQL Extensions: Installation and Management
- Top 8 PostgreSQL Extensions - TigerData
- Top 11 PostgreSQL Extensions - Airbyte
- Top 9 PostgreSQL Extensions 2024 - Bytebase
- PostgreSQL Extension Installation Best Practices - DBA Stack Exchange
- How to Upgrade PostgreSQL Extensions - Percona
- PostgreSQL Extensions: uuid-ossp - TigerData
- PostgreSQL Extensions: hstore - TigerData
- PostgreSQL Extensions: pgTAP - TigerData
- PostgreSQL Extensions: PGroonga - Supabase
- pgTAP: Unit Testing - Supabase
- pgvector: Embeddings and vector similarity - Supabase
- timescaledb: Time-Series data - Supabase
扩展开发
- PostgreSQL: Simple C Extension Development - Percona
- Writing PostgreSQL Extensions is Fun – C Language - Percona
- PostgreSQL C Extension - DEV Community
- Easy guide to writing PostgreSQL extensions - Cybertec
- How to create, test and debug a C extension - Highgo
- Writing PostgreSQL extension in Rust With pgrx
- PL/Rust Guide
- Develop Extensions Using PGRX - Apache Cloudberry
- PgDD extension moves to pgrx - RustProof Labs
- pgrx Documentation
- Create unit testing framework using pgTAP - AWS
- How To Set Up pgTAP - End Point Dev
- pgTAP Documentation
时序数据库扩展
- Managing Time Series Data Using TimescaleDB - Percona
- TimescaleDB Deployment Practices - Alibaba Cloud
- How to Enable TimescaleDB - Severalnines
- PostgreSQL TimescaleDB: Handling Time-Series Data
- TimescaleDB vs. PostgreSQL for time-series data
- PostgreSQL + TimescaleDB: 1,000x Faster Queries
分布式扩展
- Citus Data - Distributed PostgreSQL
- Citus 12: Schema-based sharding
- Sharding Postgres on a single Citus node
- Understanding partitioning and sharding in Citus
- Scaling Horizontally with Citus - Medium
- Beginner’s Guide to Sharding with Citus - Stormatics
向量和 AI 扩展
- Storing OpenAI embeddings with pgvector - Supabase
- PostgreSQL as a Vector Database - Timescale
- PostgreSQL as a Vector Database Guide - Airbyte
- What is pgvector - EDB
- Vector Similarity Search with pgvector - Severalnines
- Building AI-Powered Search with PostgreSQL - Medium
- pgvector Tutorial - DataCamp
- Amazon Aurora PostgreSQL Adds pgvector - InfoQ
- Setting Up PostgreSQL with pgvector in Docker - Medium
地理空间扩展
- PostGIS Getting Started
- Managing spatial data with PostGIS - AWS RDS
- Spatial Queries with PostgreSQL and PostGIS - Medium
- Install Postgres/PostGIS and get started - Zev Ross
- Getting Started With PostGIS Guide - Boston GIS
- Using PostGIS extension - Scaleway
- Introduction to PostGIS
- Creating a Spatial Database - PostGIS
GraphQL 和 API 扩展
- Create GraphQL APIs on PostgreSQL - Hasura
- Six Ways to add GraphQL API - Moesif
- Kickstart GraphQL API with Hasura - Vincit
- Optimizing GraphQL API with Postgres - Hasura
- pg_graphql: GraphQL extension - Supabase
- Full Text Search with Hasura - Hasura
图数据库扩展
- Apache AGE Official Site
- Apache AGE Extension - Azure
- Apache AGE with LangChain
- PostgreSQL with Apache AGE - Fabio Marini
- ApacheAGE on PGXN
- Introduction to Apache AGE - DEV Community
云平台支持
- Configure PostgreSQL extensions - Google Cloud SQL
- Extension versions for Amazon RDS
- Managed PostgreSQL Comparison: AWS vs GCP vs Azure - Hasura
- Amazon RDS for PostgreSQL
- Trusted Language Extensions - AWS Blog
- Using PostgreSQL extensions with RDS - AWS
- Allow extensions - Azure
- Supported PostgreSQL extension versions - AWS
- Major version upgrades - Azure
- Upgrade database major version - Google Cloud
- Upgrading PostgreSQL extensions - AWS Aurora
FDW 和数据集成
- Working with Oracle databases using oracle_fdw - AWS RDS
- Working with Oracle databases using oracle_fdw - AWS Aurora
- oracle_fdw on PGXN
- Using FDW to access remote databases - EDB
- oracle_fdw Documentation
- PostgreSQL Insider - oracle_fdw
- Working with supported FDW - AWS RDS
- Working with supported FDW - AWS Aurora
维护和调度扩展
- Scheduling maintenance with pg_cron - AWS RDS
- Scheduling maintenance with pg_cron - AWS Aurora
- pg_partman on PGXN
- Managing partitions with pg_partman - AWS
- Range Partition Management with pg_partman - Medium
- pg_partman documentation - Crunchy Data
性能和监控扩展
- PostgreSQL Extension pg_wait_sampling - Andy Atkinson
- Control execution plans with pg_hint_plan
- pg_wait_sampling on PGXN
- pg_hint_plan description
- Query Optimizer Hints - Medium
- Replacing Oracle Hints with pg_hint_plan - pganalyze
安全扩展
列存储和高级存储
- Zedstore - Compressed Columnar Storage
- Zedstore discussion - PostgreSQL
- PostgreSQL storage options comparison - Cybertec
- Mixed Storage in PostgreSQL Zedstore - Alibaba Cloud
- PostgreSQL Columnar Store discussion
Docker 和容器化
- How to Use the Postgres Docker Official Image
- PostgreSQL Docker Hub
- PostgreSQL Docker Image with custom extensions - DataCraze
- Install and run Postgres with extension using docker-compose
- How to create postgres extension inside container - Stack Overflow
- Docker with postgres and pgvector extension
- Installing extensions on PostgreSQL docker container
- How to install PostgreSQL extension with Docker - Stack Overflow
- PostgreSQL in Docker: Step-by-Step Guide - DataCamp
基准测试和性能
- How to Benchmark PostgreSQL for Optimal Performance - DZone
- How to measure performance of PostgreSQL - Medium
- PostgreSQL vs MySQL performance benchmarking - Medium
- A Performance Benchmark for PostgreSQL and MySQL - MDPI
- Better Security and Performance with PostgreSQL 16
- PostgreSQL Benchmarking: pgbench Guide - Heatware
- PostgreSQL Performance Improvements - EDB
- How to Benchmark PostgreSQL Performance - Severalnines
扩展兼容性和升级
- Upgrade Postgres Extension - Stack Overflow
- Upgrade PostgreSQL - TigerData
- Upgrades of the RDS PostgreSQL DB engine - AWS
JavaScript 和 PLV8
- JavaScript in your Postgres - Heroku
- PL/v8 on PGXN
- plv8 disadvantages or limitations - Stack Overflow
- Install PL/Python and PLV8 - Victor Fang
- Official benchmark comparing PL - GitHub Issue
语言扩展
- EDB Language Pack - Using procedural languages
- PostgreSQL: how to install plpythonu - Stack Overflow
- PostgreSQL with Mingw, pltcl, plperl, plpython
全文搜索扩展
- PGroonga Official Site
- PGroonga 3.2.4 announcement
- PGroonga versus textsearch and pg_trgm
- GitHub - Casecommons/pg_search: Rails ActiveRecord
- Full Text Search in Rails and PostgreSQL - pganalyze
- Full Text Search with Rails - Medium
- Full-text search with PostgreSQL - thoughtbot
- Integrating Full-Text Search in Rails - Medium
- Chinese Full-Text Search
书籍和学习资源
- PostgreSQL: Books
- The Art of PostgreSQL
- PostgreSQL: Documentation
- PostgreSQL: Tutorials & Other Resources
- Learn PostgreSQL - Amazon
- Best Books To Learn PostgreSQL - ComputingForGeeks
- The favorite four PostgreSQL books - EDB
- 7 PostgreSQL Books - BookAuthority
其他重要资源
- How do I import modules in PostgreSQL 9.1+ - Stack Overflow
- How do I import modules in Postgres - Stack Overflow
- Managing PostgreSQL extensions - GitLab Docs
- PostgreSQL extension installation best practices - Stack Exchange
- TimescaleDB support on cloud platforms - GitHub Issue
- PostgreSQL versions and extensions in DBLab - PostgresAI
学习目标
完成本章学习后,你将能够:
- 理解扩展机制:掌握 PostgreSQL 扩展的原理和架构
- 管理扩展生命周期:熟练安装、配置、升级和卸载扩展
- 选择合适的扩展:根据业务需求选择和评估扩展
- 使用核心扩展:掌握常用扩展的配置和使用
- 开发自定义扩展:能够使用 C 或 Rust 开发简单扩展
- 优化扩展性能:了解扩展对性能的影响和优化方法
- 处理兼容性问题:解决版本升级和平台迁移中的扩展问题
- 构建扩展生态:理解扩展生态系统和最佳实践
初学者可能关心的问题
- 什么情况下需要使用扩展?
- 如何判断一个扩展是否可靠?
- 扩展会影响数据库性能吗?
- 如何在不同环境中保持扩展一致性?
- 扩展升级会影响现有数据吗?
- 如何监控扩展的运行状态?
- 不同云平台的扩展支持有何差异?
- 如何开发和发布自己的扩展?
小结
PostgreSQL 的扩展机制是其最强大的特性之一,通过扩展,PostgreSQL 可以转变为时序数据库、向量数据库、图数据库、分布式数据库等各种专用数据库,同时保持核心的稳定性和兼容性。本章全面介绍了扩展的概念、管理、使用和开发,帮助你充分利用 PostgreSQL 庞大的扩展生态系统,构建满足各种业务需求的数据库解决方案。
最后更新于