0

我正在尝试在使用 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 不支持这个扩展吗?

4

1 回答 1

2

概括地说,您需要下载正在运行的 GPDB 版本的源代码。您可以通过从 GitHub 发布页面下载 tarball 或克隆存储库并签出发布标签来执行此操作。

完成此操作后,greenplum_path.sh从您的 GPDB 安装中获取源代码,切换到contrib/pg_trgm目录并运行

USE_PGXS=true make
USE_PGXS=true make install

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

如果 GPDB 的安装位置不归gpadmin用户所有,make install则会因权限问题而失败;usingsudo make install很可能会失败,因为pg_config在路径上找不到。在这种情况下,我只是运行make -n install然后手动运行前缀为sudo.

以下是 psuedo-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 一起工作,只是它可以构建和编译。

于 2021-09-15T21:12:13.820 回答