PostgreSQL のソースコードからビルドする軽量な本番環境を提供します。
マルチステージビルドにより、コンパイル済みバイナリのみを含む最適化されたイメージを構築します。
この Dockerfile は以下の機能を提供します:
- PostgreSQL の最新ソースコードからのマルチステージビルド
- PL/Python 拡張のサポート
- (New!) PgBouncer のサポート
- 軽量な本番環境用コンテナ(ビルドツール含まない)
- 自動データベース初期化機能
詳細は以下の記事をご覧ください。
# 開発 (ソースコード修正、DB機能検証)
$ docker build -t pg-src-plpy:dev --target dev .
$ docker run -d --name postgres -p 5432:5432 -v pg_data:/pgsql -v pg_wal:/wal pg-src-plpy:dev
# 本番 (ソースコード反映、DB本番利用)
$ docker build -t pg-src-plpy:prod --target prod .
$ docker run -d --name postgres -p 5432:5432 -v pg_data:/pgsql -v pg_wal:/wal pg-src-plpy:prod# 開発 (ソースコード修正、DB機能検証)
$ podman build -t pg-src-plpy:dev --target dev .
$ podman run -d --name postgres -p 5432:5432 -v pg_data:/pgsql -v pg_wal:/wal pg-src-plpy:dev
# 本番 (ソースコード反映、DB本番利用)
$ podman build -t pg-src-plpy:prod --target prod .
$ podman run -d --name postgres -p 5432:5432 -v pg_data:/pgsql -v pg_wal:/wal pg-src-plpy:prodコンテナ起動後、以下の方法で PostgreSQL に接続できます:
$ docker exec -it postgres bash
# コンテナ内でpsqlを使用
$ psql -h localhost -p 5432 -U postgres
# または外部から接続 (ローカルにpsqlがインストールされていること)
$ psql -h localhost -p 5432 -U postgres$ podman exec -it postgres bash
# コンテナ内でpsqlを使用
$ psql -h localhost -p 5432 -U postgres
# または外部から接続 (ローカルにpsqlがインストールされていること)
$ psql -h localhost -p 5432 -U postgres-- PL/Python拡張を有効化
CREATE EXTENSION plpython3u;
-- サンプル関数の作成
CREATE FUNCTION pymax(a integer, b integer)
RETURNS integer
AS $$
if a > b:
return a
return b
$$ LANGUAGE plpython3u;
-- 使用例
SELECT pymax(5, 10); -- 結果: 10