我有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

我使用这个文件与docker-compose.ymldocker-compose up -d命令.我可以访问数据库,但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

如何使用Docker为PostgreSQL添加指定的扩展名?

推荐答案

您缺少安装的clang-11包,我添加了这个包和postgresql-server-dev-14也:

Dockerfile_gzip

FROM postgres:14.0

ENV DEBIAN_FRONTEND=noninteractive

RUN apt-get update && \
    apt-get install -y \
        build-essential \
        zlib1g-dev \       
        pkg-config \
        git \
        mc \
        postgresql-server-dev-14 \ 
        clang-11

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

docker-compose up -d个commad使用这个docker-compose文件:

version: "3"

services:
    pg14:
        build: 
            context: .
            dockerfile: Dockerfile_gzip
        container_name: pg14-gzip
        ports:
            - 15566:5432
        env_file: pgsecrets.env

pgsecrets.env行文件

POSTGRES_PASSWORD=postgres
POSTGRES_USER=postgres
POSTGRES_INITDB_ARGS="-A trust"

我能够创建扩展

docker exec -it pg14-gzip bash
root@98ceed5151c0:/# su - postgres
postgres@98ceed5151c0:~$ psql
psql (14.0 (Debian 14.0-1.pgdg110+1))
Type "help" for help.

postgres=# create extension gzip ;
CREATE EXTENSION
postgres=# \dx
                 List of installed extensions
  Name   | Version |   Schema   |         Description          
---------+---------+------------+------------------------------
 gzip    | 1.0     | public     | gzip and gunzip functions.
 plpgsql | 1.0     | pg_catalog | PL/pgSQL procedural language
(2 rows)

postgres=# 

Postgresql相关问答推荐

在Docker Compose中获取CSV文件数据?

如何在Postgres中对分区表使用Hibernate验证?

如何在PostgreSQL中更改分区的表空间?

使用 pgAdmin 4 v7.4 在 Windows 11 上全新安装 PostgreSQL 15.3-3 无法启动 - 卡在正在加载 pgAdmin 4 v7.4...

我想优化查询SQL

在连接字符串并将其附加到 PostgreSQL 中的 where 子句时出现语法错误.怎么修?

在 postgres/presto/AWS-Athena 中,与 array_agg( (col1, col2) ) 相反的是什么来获得每组多行?

有没有办法共享数据或监控复杂 PostgresQL 事务的进度?

ST_Intersects 太慢

Windows上的psql:错误:编码UTF8的字节序列无效:0xc8 0x20

新数据未保存到 Postgres 上的 Rails 数组列

处理 sqlalchemy 断开连接的更好方法

如何从 WSL 连接到 windows postgres 数据库

PostgreSQL ,从 2 个表中 Select ,但仅从表 2 中 Select 最新的元素

整数除法返回 0

PostgreSQL CASE 在函数中的使用

Postgres NOT IN (null) 没有结果

如何判断 PostgreSQL 事务中的待处理操作

POSTGRESQL 中的 CHARINDEX (SQL SERVER) 相似函数是什么?

为什么 rake db:migrate 有时会在 structure.sql 中添加尾随空格?