POSTGRESQL 的好处就在于扩展,一个好的扩展可以让POSTGRESQL 功能犹如变形金刚一样. 上次说了几个extension ,这期说说我们在生产上必须安装的几个extension.
1 pg_stat_statements
这是一个必要安装的postgresql 的 extension的插件, 通过这个插件可以访问postgresql 最近访问数据库的语句的统计信息,通过这个信息可以插件来收集和统计. 在POSTGRESQL 中PostgreSQL 的核心插件之一.
要使用这个插件需要在 share_preload_libraries = 'pg_stat_statements' 添加内容
需要一些附加的配置
track_activity_query_size=2048 将能保存SQL的长度变长防止大的SQL 被截断无法分析.
pg_stat_statements.max=10000 在pg_stat_statements 中最多保留多少统计信息
pg_stat_statements.track=all 记录所有的SQL 包含函数中的SQL,如果选择top 则内部的SQL 不被跟踪
pg_stat_statements.track_utility = on 如果为on 则记录DDL 和 DCL语句
pg_stat_statements.save = on 重启数据库后是否还保留信息
在使用后,可以直接通过他来查询系统中所有运行的语句,如果保留的条数调整的比较大,保留的语句的时间会比较长,尤其对于业务频繁的数据库,这点是重要的.
2 pg_prewarm
pg_prewarm是一个辅助数据库在重启后预热重启前的数据,防止在重启后,数据库内存中并没有数据进行数据预读,这样的情况下,系统在第一次查询数据的时候后会比较慢,等待数据LOAD 仅内存中. 一般商业数据库都可以进行将上次关机前内存的情况在下次开机的时候在LOAD 到内存中.
相关数据的文件会在 autoprewarm.blocks 文件中保存
文件中记录物理的数据页面的位置,在开机会将这些数据读入到内存中
同时在 shared_preload_libraries 写入 pg_prewarm ,重启机器就可以了
3 Passwordcheck
在安全方面可以使用 passwordcheck 来保证在建立账号的情况下, 账号的密码会被这个插件进行检查. 不符合密码的要求的账号建立会被拒绝.
4 pg_repack
pg_repack 作为postgresql 标准的扩展, pg_repack 实际上是vacuum full 在线的解决方案,pg_repack 最重要的点在于他不需要在处理表时需要对表加载 exclusive lock .
并且需要在处理的数据库中创建extension
create extension pg_repack;
pg_repack的命令主要在外部运行, 其中可以对整个POSTGRESQL 的数据库进行操作,也可以针对单独的表进行操作.
在我们对单表进行repack的情况下可以看到
1 操作中会将要操作的表的数据insert 到repack 的一个临时表中
2 另一个会对表添加lock share 锁,此时表的查询是不会被阻拦的
此时数据表是可以被查询的,但如果是要进行DDL 的操作是不可以的
要操作pg_repack 需要注意几个问题
1 要操作pg_repack的数据库必须在数据库内部建立 extension pg_repack, 否则会报错
2 你要操作的数据库中的表必须有主键,或者唯一索引
否则在操作的过程中会出现
3 不建议用pg_repack处理带有trigger 的表
pg_repack 可以操作的对象
1 pg_repack可以对数据库整体进行操作
2 pg_repack 可以对指定的数据库的指定表进行操作
3 pg_repack 可以将postgresql的所有索引迁移到另外一个表空间
4 pg_replack 可以迁移某一个index 到一个单独的表空间中
以上四个extension 可以在postgresql 中作为必选的四个estension 来支持postgresql 的工作.