対象
- 自分用備忘録
- とりあえず docker で postgresql 動かしたい人
環境
- OS: windows11 の WSL2 ubuntu
- editor: VSCode
本編
wsl, docker 編
wsl2 で docker 環境構築については以下の記事を参考にしました。
- Windows11 で Docker Desktop を使わずに Docker
- 【プロキシ対応】Docker Desktop for Windows を使わず、WSL2 / Ubuntu に apt で Docker を入れる
Docker Desktop は個人だと無料ですが、仕事だと有料なので汎用性あるかもしれないこの方法で作成。
VSCode の Remote Development を入れると、VSCode の端末から WSL2 の Ubuntu を触れるので便利。
postgresql 編
postgresql 用のディレクトリを作成します。
ディレクトリ構成は以下です。
└── postgresdata
├── compose.yml
└── init
│ └── init.sql
└── data
│ └── ...
└── work
└── persondata.sql
compose.yml にて作成したディレクトリをバインドしています。
ディレクトリの役割としては
- init: 最初に実行される init.sql 置き場
- data: postgresql のデータ場所
- work: 作業ファイル置き場
となります。
compose.yml の内容は以下。
version: "3.8"
services:
db:
image: postgres:14
container_name: postgres
environment:
- POSTGRES_DB=test
- POSTGRES_USER=user
- POSTGRES_PASSWORD=xxxx
ports:
- "5432:5432"
volumes:
- ./init:/docker-entrypoint-initdb.d
- ./data:/var/lib/postgresql/data
- ./work:/work
working_dir: /work
environment のPOSTGRES_DB
でデータベースを指定できます。
working_dir
を指定して psql 実行時のファイルパス指定を端折りやすくしました。
用意した sql ファイルは以下。
- init.sql
CREATE TABLE person (name varchar(50), birthday date);
- persondata.sql
INSERT INTO
person (name, birthday)
VALUES
('渋沢栄一', '1840-03-16'),
('徳川慶喜', '1837-10-28'),
('西郷隆盛', '1828-01-23'),
('坂本龍馬', '1836-01-03');
上記ファイル準備後は、docker compose up -d
でコンテナを起動、docker compose exec db psql -U user test
で psql を起動できます。
docker compose exec db /bin/bash
で入ってから、psql -U user test
でも OK.
簡単にコマンドチェック
- テーブル一覧、構造の確認
test=# \dt
List of relations
Schema | Name | Type | Owner
--------+--------+-------+-------
public | person | table | user
(1 row)
test=# \d person;
Table "public.person"
Column | Type | Collation | Nullable | Default
----------+-----------------------+-----------+----------+---------
name | character varying(50) | | |
birthday | date | | |
- データ投入、確認
test=# \i personaldata.sql
INSERT 0 4
test=# select * from person;
name | birthday
----------+------------
渋沢栄一 | 1840-03-16
徳川慶喜 | 1837-10-28
西郷隆盛 | 1828-01-23
坂本龍馬 | 1836-01-03
(4 rows)
おわりに
SQL を打ちたいだけなら SQL Fiddle などのサービスでもいいかも。
postgresql の復習環境としては〇.