在使用Docker时,安装必需的PostgreSQL扩展功能时需要进行构建

首先

就像标题所说的那样。
由于经历了构建的时机选择和将SQL文件复制到特定位置等许多以前未曾做过的事情,因此留下了这些备忘录。

确认环境

    • WSL2(Ubuntu22.04.3 LTS)

 

    • PostgreSQL 14.10-1

 

    • Docker (24.0.6)

 

    pg_ivm(導入するextension)

文件夹结构


--
[projectfolder]
 ├─ compose.yml
 ├─ Dockerfile
 └─ docker-entrypoint-initdb.d
    └─ 90_pg_ivm.sql (extentionを登録するSQL)

獲得最好的選項只需以中文以及標準母語進行翻譯即可:

醬料

services:
  db:
    build:
      context: .
    restart: always
    volumes:
      - postgresql:/var/lib/postgresql/data
    ports:
      - "5432:5432"
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
      POSTGRES_DB: postgres
    tty: true

volumes:
  postgresql:
# postgresのバージョン14最新
from postgres:14

# パッケージ更新&パッケージのビルドで必要なもの
RUN apt-get update && apt-get install -y \
    git \ 
    make \ 
    gcc \
    postgresql-server-dev-14
# 必要なパッケージのインストール

# ------ pg_ivm導入
# git展開フォルダ
WORKDIR /tmp
# git で取得
RUN git clone https://github.com/sraoss/pg_ivm
# フォルダ移動
WORKDIR /tmp/pg_ivm
# make & install
RUN make USE_PGXS=1 
RUN make USE_PGXS=1 install

# EXTENTION登録SQLをコピー
COPY ./docker-entrypoint-initdb.d/90_pg_ivm.sql /docker-entrypoint-initdb.d
# (一応)ディレクトリはデフォルトに戻す
WORKDIR /

# 使わないので削除
RUN apt-get purge -y \
    git \ 
    make \ 
    gcc \
    postgresql-server-dev-14
# ファイルも使わないので一応削除
RUN rm -rf /tmp/pg_ivm

CREATE EXTENSION IF NOT EXISTS pg_ivm;

启动命令

docker compose up -d

粗略解释

    • Dockerfileでビルドして、拡張機能登録用のSQLファイルを/docker-entrypoint-initdb.d にコピーしてコンテナ作成時に実行している(バインドマウントでフォルダ共有しても良い)

 

    • Extensionには、以下の3つがあるみたい

デフォルトでPostgreSQLに入っているもの(CREATE EXTENSION だけすればよいもの)
Linuxのパッケージとしてインストールできるもの(aptやyum等で取得したあとにCREATE EXTENSIONするもの )
ソースをビルドしてインストールがひつようなもの(今回の対象)

docker-entrypoint-initdb.d で make はできない(makeの実行ユーザーがpostgresユーザーになるため、permissionエラーとなる)

请确认是否已经安装了Extension。

postgres=# SELECT * FROM pg_extension;
  oid  | extname | extowner | extnamespace | extrelocatable | extversion | extconfig | extcondition
-------+---------+----------+--------------+----------------+------------+-----------+--------------
 13766 | plpgsql |       10 |           11 | f              | 1.0        |           |
 16384 | pg_ivm  |       10 |           11 | f              | 1.7        | {16386}   | {""}

赠品

SELECT * FROM pg_available_extensions;

如果是这样,将显示可以导入的扩展(只需执行CREATE EXTENSION)和已导入扩展的列表(已导入的扩展在installed_version中有值)。

结束

由于我之前从未自行引入过扩展功能,因此我需要进行一番调查,这对我来说是一次非常有益的学习经历。
pg_ivm是一个非常有趣的扩展功能,可以自动更新材料化视图。

请参照以下内容。

 

广告
将在 10 秒后关闭
bannerAds