今回は、DockerでPostgresを立ち上げるときに、初期データを自動作成する方法について説明していきます。
Dockerを使うとコンテナを落とした時に保存されていたデータや、データベース、スキーマなどが全て削除されてしまいます。
Dockerを立ち上げる度にデータを準備するのは面倒だと思うので自動化していきましょう。
PostgresでCRUDのSQL操作を覚えよう
- 前提: Docker + Postgresの準備
- 初期データ用のSQL準備
- DockerfileでSQLをコピーする
1.前提: Docker + Postgresの準備
この記事の内容を試すにあたり、まだDockerの準備やPostgresの使い方が分からない方は以下の記事をご確認ください。
本記事は、以下の2つの記事が完了していることを前提としてます。
【エンジニア向け】Macbook + docker-composeでpostgresを動かす
【エンジニア初級】PostgresでCRUDのSQL操作を覚えよう
docker-compose.ymlの設定内容は、現在以下の通りになっています。
version: '3.1'
services:
db:
build:
context: .
dockerfile: postgres/Dockerfile
container_name: postgres
ports:
- 5432:5432
restart: always
environment:
POSTGRES_PASSWORD: example
2.初期データ用のSQL準備
今回は、以下の環境を自動で作成するための準備を行います。
- testdbというデータベースを作成
- employeeというテーブルを準備
- employeeテーブルに3件分のデータを準備
「init.sql」というDDLを準備します。
create database testdb ENCODING = 'UTF8';
\c testdb;
CREATE TABLE employee (
id bigint,
name varchar(50),
job varchar(20)
);
INSERT INTO employee (id, name, job) VALUES (1, '田中太郎', 'エンジニア');
INSERT INTO employee (id, name, job) VALUES (2, '鈴木花子', 'デザイナー');
INSERT INTO employee (id, name, job) VALUES (3, '山下哲也', '営業');
フォルダの構成は以下のようになっています。
docker-compose.yml
postgres
|-Dockerfile
|-init.sql
3.DockerfileでSQLをコピーする
最後に先ほど作成した「init.sql」をコンテナ内にコピーする処理を追加します。
「Dockerfile」を開いて以下を追加します。
FROM postgres:12
ENV TZ Asia/Tokyo
ENV LANG ja_JP.UTF-8
ENV LC_ALL "en_US.UTF-8"
ENV LC_TYPE "en_US.UTF-8"
#初期データ用のSQO追加
COPY postgres/*.sql /docker-entrypoint-initdb.d/
RUN chmod 755 /docker-entrypoint-initdb.d/*.sql
dockerが立ち上げっていたら一度落としましょう。
$ docker-compose down
再度、dockerを立ち上げます。
$ docker-compose up -d --build
データが追加されていることが確認しましょう。
まずはdockerにログインします。
$ docker exec --user postgres -it $(docker ps -aqf "name=postgres") /bin/bash
postgresにログインします。
$ psql
最後にデータを確認します。
postgres=# \c testdb
You are now connected to database "testdb" as user "postgres".
testdb=# \d
List of relations
Schema | Name | Type | Owner
--------+----------+-------+----------
public | employee | table | postgres
(1 row)
testdb=# select * from employee;
id | name | job
----+----------+------------
1 | 田中太郎 | エンジニア
2 | 鈴木花子 | デザイナー
3 | 山下哲也 | 営業
(3 rows)
無事、3件分のデータが作成されていれば成功です!
Postgresをこれから勉強したい方には、以下の書籍がおすすめです。
これからはじめる PostgreSQL入門【電子書籍】[ 高塚遙 ] 価格:3,278円 |
===============
以上、DockerでPostgres立ち上げ時に初期データを自動で作成する方法について解説してみました。
この情報が皆さんの人生のお役に立てれば幸いです。
エンジニアとして日本のITリテラシーを高めていきたいと共感して頂いた人は、是非このブログの拡散とyoutubeの方も見ていただけると嬉しいです。
記事を最後まで見ていただきありがとうございました。
執筆者: hiroエンジニア