You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Postgres9.4.24的Greenplum集群安装pg_trgm扩展故障咨询

问题解答

1. 为什么yum安装postgresql-contrib后找不到pg_trgm.control

你通过yum安装的是CentOS官方源自带的PostgreSQL contrib包,文件会写入系统默认的PostgreSQL路径,而Greenplum 6.13自带的PostgreSQL兼容层独立部署在/usr/local/greenplum-db-6.13.0目录下,和系统级PostgreSQL路径不互通,所以安装后无法被Greenplum识别。

2. 编译pg_trgm报错的解决方法

你直接在pg_trgm目录下执行make,走的是Greenplum全源码编译的路径,你只下载了contrib目录源码,自然找不到上层的Makefile.global。正确编译方法如下:

  • 先加载Greenplum环境变量:source /usr/local/greenplum-db/greenplum_path.sh
  • 进入pg_trgm源码目录,执行指定PGXS的编译命令:make USE_PGXS=1
  • 编译完成后执行安装:make USE_PGXS=1 install
    不需要手动修改Makefile,也不需要手动复制文件。

3. 主节点安装后仍报错的原因

Greenplum是分布式架构,扩展的所有文件(.so动态库、.control控制文件、.sql升级文件)必须同步到集群内所有节点,包括主节点、备节点、Segment节点、镜像节点。只在主节点安装的话,Segment节点执行查询时找不到对应文件就会报错。
你可以用Greenplum自带的gpscp工具批量分发,无需每台节点单独编译:

# all_hosts为包含所有集群节点主机名的列表文件
gpscp -f all_hosts /usr/local/greenplum-db-6.13.0/lib/postgresql/pg_trgm.so =:/usr/local/greenplum-db-6.13.0/lib/postgresql/
gpscp -f all_hosts /usr/local/greenplum-db-6.13.0/share/postgresql/extension/pg_trgm* =:/usr/local/greenplum-db-6.13.0/share/postgresql/extension/

4. 0A000报错的解决方法

pg_trgm本身支持Greenplum 6.x版本,该报错是调用方式不符合Greenplum分布式执行规则导致的:

  • 原因:pg_trgm的默认函数属性为VOLATILE,在分布式表查询中调用这类函数,或者触发了多segworker组的执行计划,就会触发该限制。
  • 解决方法:
    • 调整用到的pg_trgm函数属性为STABLE/IMMUTABLE,示例:ALTER FUNCTION similarity(text,text) STABLE;
    • 不要在分布式表上直接使用pg_trgm的GIN/GIST索引,建议将需要做模糊匹配的字段数据存入复制表(REPLICATED表)后再执行查询,避免生成多工作进程组的执行计划。
    • 优先使用对应Greenplum版本预编译的contrib包,避免自行编译出现版本不兼容问题。

内容的提问来源于stack exchange,提问作者Matias

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 19:30:00