PostgreSQLのDockerイメージにPLV8を適用

PostgreSQLのDockerイメージにPLV8を適用

PostgreSQLのDockerイメージにPLV8の言語拡張を適用

PLV8はPostgreSQL用のJavaScript言語拡張機能です。
ちょっと探してみたんですがPLV8適用済のDockerイメージがなかったんで作ります。

PostgreSQLのdocker環境作ります

dockerfile-postgres

FROM postgres:12.9
ARG DB_LANG=en_US
RUN localedef -i $DB_LANG -c -f UTF-8 -A /usr/share/locale/locale.alias $DB_LANG.UTF-8
ENV LANG $DB_LANG.utf8

compose.yml

version: '3.4'

services:
  db:
    build:
      context: .
      dockerfile: ./dockerfile-postgres
      args:
        - DB_LANG=ja_JP
    container_name: postgres
    environment:
      POSTGRES_USER: "root"
      POSTGRES_PASSWORD: "passw0rd"
      POSTGRES_INITDB_ARGS: "--encoding=UTF-8"
      TZ: 'Asia/Tokyo'
    ports:
      - 0.0.0.0:5432:5432
    hostname: postgres
    user: root

docker起動します。

> docker-compose build
> docker-compose up -d

PLV8適用

> docker exec -it postgres /bin/bash
# apt update
# apt install vim python g++ wget git make pkg-config libtinfo5 ninja-build libc++-dev libc++abi-dev libglib2.0-dev
# apt install postgresql-server-dev-12
# cd /usr/local/src
# wget https://github.com/plv8/plv8/archive/v3.0.0.tar.gz
# tar -zxvf v3.0.0.tar.gz
# cd plv8-3.0.0
# make
# make install
# cd ..
# rm -rf *
# apt purge postgresql-server-dev-12
# apt autoremove postgresql-server-dev-12
# apt purge vim g++ wget git make
# apt autoremove vim g++ wget git make
# exit
> docker stop postgres

後はPLV8を適用したDockerイメージをコミットして自分のところにプッシュすればいつでも使えます。

> docker commit postgres xxxxx/postgresql-12.9-plv8:latest
> docker login
> docker push xxxxx/postgresql-12.9-plv8:latest

xxxxxの部分は自分のアカウントですね。

PLV8を適用したDockerイメージを使う

dockerfile-postgres

FROM xxxxx/postgresql-13.9-plv8:latest
ARG DB_LANG=en_US
RUN localedef -i $DB_LANG -c -f UTF-8 -A /usr/share/locale/locale.alias $DB_LANG.UTF-8
ENV LANG $DB_LANG.utf8

compose.yml

version: '3.4'

services:
  db:
    build:
      context: .
      dockerfile: ./dockerfile-postgres
      args:
        - DB_LANG=ja_JP
    container_name: postgres
    environment:
      POSTGRES_USER: "root"
      POSTGRES_PASSWORD: "passw0rd"
      POSTGRES_INITDB_ARGS: "--encoding=UTF-8"
      TZ: 'Asia/Tokyo'
    ports:
      - 0.0.0.0:5432:5432
    hostname: postgres
    volumes:
      - pgdata:/var/lib/postgresql/data
      - ./pginit:/docker-entrypoint-initdb.d
    user: root
    shm_size: 2g

volumes:
    pgdata:

compose.ymlのあるフォルダ直下に pginit/init.sql を作成します。
このファイルでdocker起動時にplv8を有効にします。

init.sql

create extension plv8;

ただこの手順で作ったDockerイメージ・・・滅茶苦茶でかいです。3GBくらい?
やり方あってるのかなぁ、でも特に問題起きてないし「ヨシ!」ということで。

コメント

このブログの人気の投稿

(真)ESP32の開発環境をVSCodeで作る

ESP32にmicroSD接続

ESP32でデバッグ