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

如何通过Docker安装PostgreSQL的gzip扩展?

解决PostgreSQL Docker容器中gzip扩展无法加载的问题

问题描述

使用以下Dockerfile构建PostgreSQL 14镜像并启动容器后,执行CREATE EXTENSION gzip命令时报错:

SQL Error [58P01]: ERROR: could not open extension control file "/usr/share/postgresql/14/extension/gzip.control": No such file or directory

原Dockerfile内容:

FROM postgres:14.0

ENV DEBIAN_FRONTEND=noninteractive

RUN apt-get update && \
    apt-get install -y \
        build-essential \
        zlib1g-dev       \
        pkg-config \
        git \
        mc \
    && echo "2" | apt-get install -y postgresql-server-dev-all \
    && rm -rf /var/lib/apt/lists/*

RUN git clone https://github.com/pramsey/pgsql-gzip.git \
    && cd pgsql-gzip \
    && make \
    && make install

解决方案

修正Dockerfile,确保扩展文件安装到PostgreSQL 14对应的extension目录,以下两种方式均可:

方式一:指定PG_CONFIG路径编译安装

在make和make install时指定容器内PostgreSQL 14的pg_config路径,让安装脚本自动将文件放到正确目录:

FROM postgres:14.0

ENV DEBIAN_FRONTEND=noninteractive

RUN apt-get update && \
    apt-get install -y \
        build-essential \
        zlib1g-dev       \
        pkg-config \
        git \
        mc \
    && echo "2" | apt-get install -y postgresql-server-dev-all \
    && rm -rf /var/lib/apt/lists/*

RUN git clone https://github.com/pramsey/pgsql-gzip.git \
    && cd pgsql-gzip \
    && PG_CONFIG=/usr/lib/postgresql/14/bin/pg_config make \
    && PG_CONFIG=/usr/lib/postgresql/14/bin/pg_config make install

方式二:手动复制扩展文件到目标目录

如果方式一无效,可手动将编译生成的扩展文件复制到PostgreSQL 14的extension目录:

FROM postgres:14.0

ENV DEBIAN_FRONTEND=noninteractive

RUN apt-get update && \
    apt-get install -y \
        build-essential \
        zlib1g-dev       \
        pkg-config \
        git \
        mc \
    && echo "2" | apt-get install -y postgresql-server-dev-all \
    && rm -rf /var/lib/apt/lists/*

RUN git clone https://github.com/pramsey/pgsql-gzip.git \
    && cd pgsql-gzip \
    && make \
    && make install \
    && cp gzip.control /usr/share/postgresql/14/extension/ \
    && cp gzip--1.0.sql /usr/share/postgresql/14/extension/

原因说明

PostgreSQL加载扩展时,会在对应主版本的extension目录(如14版本为/usr/share/postgresql/14/extension)寻找.control文件。原Dockerfile中默认的make install未指定PostgreSQL版本路径,导致扩展文件被安装到了通用目录而非14版本的专属目录,因此执行CREATE EXTENSION时无法找到文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 12:15:00