我正在尝试在使用 postgres 9.4.24 版本的 Greemplum 系统上使用相似度函数。Greenplum 系统在 CentOS 7 集群上运行(CentOS Linux release 7.9.2009 (Core))
我已经设法通过运行这个来安装 postgresql-contrib 包:
sudo yum install postgresql-contrib.x86_64
但是,当我在数据库上运行此命令时: create extension pg_trgm(); 我得到以下信息:;
SQL Error [58P01]: ERROR: could not open extension control file "/usr/local/greenplum-db-6.13.0/share/postgresql/extension/pg_trgm.control": No such file or directory
我查看了目录,但 pg_trgm.control 不存在,但我期待它,因为我安装了 contrib 包。
有什么我错过的吗?
我找到了 Greenplum 的 contrib 存储库并在此处下载了代码: https ://github.com/greenplum-db/gpdb/tree/master 其中包括带有所有扩展的 contrib 目录。
但是,当我尝试 make && make install 时,出现错误:
[gpadmin@mdw pg_trgm]$ sudo make
Makefile:22: ../../src/Makefile.global: No such file or directory
Makefile:23: /contrib/contrib-global.mk: No such file or directory
make: *** No rule to make target `/contrib/contrib-global.mk'. Stop.
查看目录结构和文件,Makefile.global 不存在而 contrib-global.mk 存在但不确定路径是否正确,我可以尝试更改 Makefile 中的路径但不确定。
这些是 Makefile 文件的内容:
# contrib/pg_trgm/Makefile
MODULE_big = pg_trgm
OBJS = trgm_op.o trgm_gist.o trgm_gin.o trgm_regexp.o $(WIN32RES)
EXTENSION = pg_trgm
DATA = pg_trgm--1.3--1.4.sql \
pg_trgm--1.3.sql pg_trgm--1.2--1.3.sql pg_trgm--1.1--1.2.sql \
pg_trgm--1.0--1.1.sql pg_trgm--unpackaged--1.0.sql
PGFILEDESC = "pg_trgm - trigram matching"
REGRESS = pg_trgm pg_word_trgm pg_strict_word_trgm
REGRESS_OPTS += --init-file=$(top_srcdir)/src/test/regress/init_file
ifdef USE_PGXS
PG_CONFIG = pg_config
PGXS := $(shell $(PG_CONFIG) --pgxs)
include $(PGXS)
else
subdir = contrib/pg_trgm
top_builddir = ../..
include $(top_builddir)/src/Makefile.global
include $(top_srcdir)/contrib/contrib-global.mk
endif
我检查了 /tmp 文件夹中的代码,它在 /tmp/gpdb 下创建了结构
更新:我确实遵循了布拉德福德的建议并且能够编译和安装,但是,当我运行时我得到了这个:
create extension pg_trgm
;
错误:无法打开扩展控制文件“/usr/local/greenplum-db-6.13.0/share/postgresql/extension/pg_trgm.control”:没有这样的文件或目录(seg57 172.28.8.8:6001 pid=146663)
运行 make 和 make install 后,我确实手动运行了:
/usr/bin/install -c -m 755 pg_trgm.so '/usr/local/greenplum-db-6.13.0/lib/postgresql/pg_trgm.so'
/usr/bin/install -c -m 644 pg_trgm.control '/usr/local/greenplum-db-6.13.0/share/postgresql/extension/'
/usr/bin/install -c -m 644 pg_trgm--1.1.sql pg_trgm--1.0--1.1.sql pg_trgm--unpackaged--1.0.sql '/usr/local/greenplum-db-6.13.0/share/postgresql/extension/'
我可以在那里看到 .control 文件,所以不确定发生了什么,它似乎只复制到主服务器而不是分段主机,这会是一个问题吗?我需要在每个段主机上编译它吗?
更新: 我确实在每个段上都安装了,现在我得到了:
SQL 错误 [0A000]:错误:不支持具有多个 segworker 组的查询计划提示:可能由读取或修改分布式表中数据的函数引起
greenplum 不支持这个扩展吗?