在使用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是一个非常有趣的扩展功能,可以自动更新材料化视图。
请参照以下内容。