在 postgres 9.4.24 上安装 pg_trgm

Install pg_trgm on postgres 9.4.24

我正在尝试在使用 postgres 9.4.24 版本的 Greemplum 系统上使用相似度函数。 Greenplum 系统 运行 在 CentOS 7 集群上运行(CentOS Linux 7.9.2009 版(核心版))

我已经通过运行安装了 postgresql-contrib 包:

sudo yum install postgresql-contrib.x86_64

但是,当我 运行 在数据库上执行此命令时: 创建扩展 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 的贡献存储库并在此处下载了代码: 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

下创建了结构

更新: 我确实遵循了 Bradford 的建议并且能够编译和安装,但是,当我 运行 时我得到了这个: 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 组的查询计划 提示:可能是由读取或修改分布式 table

中的数据的函数引起的

greenplum 不支持这个扩展吗?

在高层次上,您需要下载您正在 运行ning 的 GPDB 版本的源代码。您可以通过从 GitHub 发布页面下载 tarball 或克隆存储库并签出发布标签来完成此操作。

完成后,从您安装的 GPDB 源 greenplum_path.sh,切换到 contrib/pg_trgm 目录和 运行

USE_PGXS=true make
USE_PGXS=true make install

设置 USE_PGXS 将从 GPDB 安装中提取缺少的 Makefile。

如果 GPDB 的安装位置不属于 gpadmin 用户,那么 make install 将因权限问题而失败;使用 sudo make install 很可能会失败,因为 pg_config 不会在路径上找到。在那种情况下,我只是 运行 make -n install 然后手动 运行 以 sudo.

为前缀的命令

以下是伪shell 会话中的所有步骤:

git clone https://github.com/greenplum-db/gpdb.git
cd gpdb

# use git checkout 6.13.0 for older versions of git
git switch --detach 6.13.0
git submodule update --init --recursive

source /usr/local/greenplum-db-6.13.0/greenplum_path.sh
cd contrib/pg_trgm
USE_PGXS=true make
USE_PGXS=true make -n install

编辑: 我应该澄清一下,我没有测试过 pg_trgm 是否可以与 GPDB 一起使用,只是它可以构建和编译。