【问题标题】:Install pg_trgm on postgres 9.4.24在 postgres 9.4.24 上安装 pg_trgm
【发布时间】:2021-11-10 17:54:34
【问题描述】:

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

我已经通过运行这个成功安装了 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 的 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 下创建了结构

更新: 我确实遵循了 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 组的查询计划 提示:可能是由读取或修改分布式表中数据的函数引起的

greenplum 不支持这个扩展吗?

【问题讨论】:

  • Greenplum 不是 PostgreSQL。您不能为一个安装扩展并期望它们为另一个工作。虽然已经将几个 PostgreSQL 扩展移植到 Greenplum,但 pg_trgm 似乎不是其中之一。

标签: greenplum pg-trgm


【解决方案1】:

概括地说,您需要下载您正在运行的 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 一起使用,只是它可以构建和编译。

【讨论】:

  • 谢谢!我确实按照您的建议进行了安装,然后运行命令完成安装。我添加了一条评论作为主要问题的更新,因为我仍然遇到问题,它没有找到 .control 文件,但它在那里......
猜你喜欢
  • 1970-01-01
  • 2021-03-19
  • 1970-01-01
  • 2015-03-24
  • 1970-01-01
  • 1970-01-01
  • 2011-01-16
  • 2016-01-01
  • 1970-01-01
相关资源
最近更新 更多