postgresql里面contrib提供了不少有用的工具,包括移植工具、分析工具和部分插件。而GreenPlum基于postgresql数据库,可以十分方便的使用这些工具,下面提供GreenPlum下安装contrib模块的方法。
这里有关于contrib各模块详细的说明:
http://www.postgresql.org/docs/8.3/static/contrib.html
个人觉得比较常用的有以下几个模块:
dblink: 类似与oracle中的dblink,但是功能要弱上一些,并且只能连接Postgresql或基于postgresql的数据库
oid2name: 获取数据库对象的oid或者根据oid得到数据库对象信息,是一个独立的可执行命令
pg_buffercache: 实时查询shared_buffer的缓存信息
pg_freespacemap: 显示FSM内容
pgrowlocks: 显示行锁信息
pgstattuple: 统计指定表中的”死行”和空闲空间
spi: 提供了几个使用 SPI 的可运转的例子和触发器,用好spi接口可以方便的对数据库功能进行扩展。
contrib模块的编译和安装
根据psql登入时的提示可以知道当前使用的GreenPlum基于哪个postgresql版本,如GreenPlum3.3.4就基于postgresql的8.2.13版本,到官方站去下载对应源码:
http://www.postgresql.org/ftp/source/
解压后进入postgresql-8.*目录,执行下面命令进行编译
./configure
make
这种正常编译基本上不会出现问题,下面我们需要修改Makefile文件从而使目标文件能够在GreenPlum环境中正常运行
最核心的部分就是编译contrib模块时需要使用GreenPlum的头文件和库文件,所以需要修改Makefile中的编译选项
以下是根据postgresql 8.2.13为例进行的修改(红色部分为新增或修改,修改前最好先备份一下):
文件src/Makefile.global:
注意:需要在环境变量中设定GPHOME(GreenPlum的安装目录)的值,一般是/usr/include/greenplum-db
# add by phrack 20091021
GPINCL = -I$(GPHOME)/include -I$(GPHOME)/include/postgresql -I$(GPHOME)/include/libpq -I$(GPHOME)/include/postgresql/server -I
$(GPHOME)/include/postgresql/internal
GPLIB = -L$(GPHOME)/lib -L$(GPHOME)/lib/postgresql
ifndef USE_PGXS
CFLAGS = $(GPINCL)
LDFLAGS = $(GPLIB)
endif
# add end
CPP = gcc -E
CPPFLAGS = -D_GNU_SOURCE
……(省略)
CC = gcc
GCC = yes
CFLAGS += -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Winline -Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing -fwrapv # 注意:= 修改为 +=
……(省略)
#LDFLAGS = # 注释掉LDFLAGS的赋值,以免覆盖上面的定义
……(省略)
override LDFLAGS := $(LDFLAGS) -L$(top_builddir)/src/port # 将$(LDFLAGS)前提从而保证GreenPlum的库文件优先被使用
可以从这里下载8.2.13修改后的Makefile.global文件
以上修改完成后便可以进行contrib模块的编译了
cd contrib
more README # README文件中有每个模块的简要说明,可以根据需要决定使用哪些模块
下面以pg_buffercache为例进行安装:
cd pg_buffercache
make
编译成功之后可以发现目录下多了几个libpg_buffercache.so和pg_buffercache.sql文件,使用以下命令将库文件cp至每台主机上:
gpscp -f ~gpadmin/seg_hosts libpg_buffercache.so.0.0 =:/usr/local/greenplum-db/lib/postgresql/pg_buffercache.so
psql -f pg_buffercache.sql # 在GreenPlum数据库中安装pg_buffercache模块
成功后就可以在GP数据库中访问pg_buffercache视图了,该视图提供了实时的shared_buffer使用信息,通过和pg_class关联可以查到驻留在shared_buffer里面的表或索引,对于管理员掌握shared_buffer的使用很有帮助。
如果在编译或使用上有任何困难和问题,欢迎交流 E-mail: phrack2561@gmail.com