可扩展性在 Postgres 的基因里,这要归功于其原始设计。
这种设计理念赋予了 Postgres 许多独特的能力,其中之一就是它的插件。通过 Postgres 插件,第三方可以在不触碰任何 Postgres 核心代码的情况下扩展其功能。
如今,大多跑在生产环境中的 Postgres 都运行着一些插件,以下我们介绍一些最常用的。
pg_stat_statements
pg_stat_statements 提供了跟踪服务器执行的所有 SQL 语句的规划和执行统计信息的方法。当 pg_stat_statements 处于活动状态时,它会跟踪服务器上所有数据库的统计信息。该模块收集到的统计数据可以通过一个名为 pg_stat_statements 的视图进行访问。
不过要注意,pg_stat_statements 插件仅跟踪自启用后执行的查询。如果想要跟踪所有查询,请在服务器启动时将以下行添加到 postgresql.conf 文件中来启用该插件:
shared_preload_libraries = 'pg_stat_statements'
比如要找到总执行时间最长的前 10 个查询:
SELECT query, total_time
FROM pg_stat_statements
ORDER BY total_time DESC
LIMIT 10;
PostGIS
PostGIS 为 Postgres 添加了对地理数据的存储、索引和查询支持,它是最复杂的 Postgres 插件,也从侧面证明了 Postgres 的扩展系统有多强大。
比如要找到离给定点最近的城市:
- 假设我们有以下包含城市及其位置(用坐标表示)的表。注:location 列具有由 PostGIS 插件提供的 GEOMETRY 类型。