dockerでPostgresqlを準備したら初期データが反映されなかった話

## ことの背景
今まで個人開発の勤怠管理アプリで、DBにH2databaseを使用していた。
SpringBootでは、特段H2をローカルに必要することなく起動できてしまうので重宝していた。
しかしテストデータを作成する際に、込み入ったSQLを作成しようとすると、どうもh2は情報が少ない。。。（私が公式ドキュメントを読めないだけ）
でもPostgresqlを導入するにも面倒だよなあ、、、
というわけで、使ったこともないDockerにチャレンジした！
ところが、compose upで、データベースせずできるも、なぜか初期データが投入されない、、、困った。。。
そんな私の備忘録です。

## 先に結論
SQLが間違ってた。Dockerの設定は何も間違っていなかった。

## 環境

```
dynabook G83/M
windows11
wsl:Ubuntu 22.04.3 LTS
```
## 事象
それぞれファイルを準備
```
├── .env
├── docker-compose.yml
├── initdb
│   ├── init.sql
```


```yml:docker-compose.yml
version: "3"
services:
  appdb:
    image: postgres:10
    container_name: "appdb"
    environment:
      - POSTGRES_USER
      - POSTGRES_PASSWORD
      - POSTGRES_DB
    ports:
      - "15432:5432"
    volumes:
      - database:/var/lib/postgresql/data
      - ./initdb:/docker-entrypoint-initdb.d

volumes:
  database:
    driver: local
```


```:.env
POSTGRES_USER=feeuser
POSTGRES_PASSWORD=feeuser
POSTGRES_DB=feeuser
```
init.sqlファイルは、2000行に及ぶハードコーディングですので省略です。
```sql:init.sql
CREATE TABLE if not exists fee(
    id integer NOT NULL,
    fee_seq integer NOT null,
    round_trip character varying(5),
    total_fee integer,
    use_date date not null,
    PRIMARY KEY(id, fee_seq, use_date)
);
insert ,,,,,,
```

それでは、dockerで立ち上げていきます。
```bash
docker-compose up -d
```

```bash
[+] Running 15/15
 ✔ appdb 14 layers [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿]      0B/0B      Pulled                                                                          15.6s 
   ✔ bff3e048017e Pull complete                                                                                                      3.9s 
   ✔ e3e180bf7c2b Pull complete                                                                                                      6.9s 
   ✔ 62eff3cc0cff Pull complete                                                                                                      0.7s 
   ✔ 3d90a128d4ff Pull complete                                                                                                      2.1s 
   ✔ ba4ce0c5ab29 Pull complete                                                                                                      4.1s 
   ✔ a8f4b87076a9 Pull complete                                                                                                      3.4s 
   ✔ 4b437d281a7e Pull complete                                                                                                      4.1s 
   ✔ f1841d9dcb17 Pull complete                                                                                                      4.6s 
   ✔ b05674a6c170 Pull complete                                                                                                      9.3s 
   ✔ d59b5be914c6 Pull complete                                                                                                      4.8s 
   ✔ 901d5d9b0beb Pull complete                                                                                                      5.5s 
   ✔ 4a7aa9546b2c Pull complete                                                                                                      5.6s 
   ✔ 0a0d389be22f Pull complete                                                                                                      6.2s 
   ✔ fb7bd7cfbcd2 Pull complete                                                                                                      6.3s 
[+] Running 3/3
 ✔ Network feemanage_default    Created                                                                                              0.1s 
 ✔ Volume "feemanage_database"  Created                                                                                              0.0s 
 ✔ Container appdb              Started                                                                                              0.6s 
```

あれ、起動してない、、、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821194/82eee3fe-efa9-0d02-528d-2d9a98a0a343.png)

dockerが理解できてないので、きちんと理解しよう！と
２時間格闘の末、わからず、、、、
明日の自分に託すことに、、、


## 原因
docker云々ではなく、SQLの文法が間違っていた。

dockerの拡張機能より、ログを確認。（こんな機能あるんだ、ということに気づいていませんでした）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821194/a74c9d1a-37eb-1d2c-39bb-08615816a401.png)

ログが出てくるので、文末を抜粋
```bash

/usr/local/bin/docker-entrypoint.sh: running /docker-entrypoint-initdb.d/init.sql
CREATE TABLE
CREATE TABLE
CREATE TABLE
CREATE TABLE
CREATE TABLE
CREATE TABLE
2023-12-29 05:45:00.565 UTC [83] ERROR:  null value in column "fee_seq" violates not-null constraint
2023-12-29 05:45:00.565 UTC [83] DETAIL:  Failing row contains (1, null, piyo, pipupu, PPU, PPA).
psql:/docker-entrypoint-initdb.d/init.sql:65: ERROR:  null value in column "fee_seq" violates not-null constraint
DETAIL:  Failing row contains (1, null, piyo, pipupu, PPU, PPA).
2023-12-29 05:45:00.565 UTC [83] STATEMENT:  insert into
            worker (
                id,
                first_name,
                last_name,
                dept,
                team
            )
        VALUES
            (
                '1',
                'piyo',
                'pipupu',
                'PPU',
                'PPA'
            );
 *  ターミナルはタスクで再利用されます、閉じるには任意のキーを押してください。 
```

fee_seqっていうカラムあるはずなんだけどどうしたの？と聞かれているようでした。


## 解決策

sqlファイルをきちんとしたものにするとOKでした。
docker-compose downでコンテナ停止し、imageとvolumeを念のため削除。
そして、docker-compose up -dを実施。

```
[+] Running 15/15
 ✔ appdb 14 layers [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿]      0B/0B      Pulled                                                                          16.1s 
   ✔ bff3e048017e Pull complete                                                                                                      4.9s 
   ✔ e3e180bf7c2b Pull complete                                                                                                      1.8s 
   ✔ 62eff3cc0cff Pull complete                                                                                                      0.7s 
   ✔ 3d90a128d4ff Pull complete                                                                                                      1.9s 
   ✔ ba4ce0c5ab29 Pull complete                                                                                                      4.3s 
   ✔ a8f4b87076a9 Pull complete                                                                                                      3.1s 
   ✔ 4b437d281a7e Pull complete                                                                                                      5.0s 
   ✔ f1841d9dcb17 Pull complete                                                                                                      9.5s 
   ✔ b05674a6c170 Pull complete                                                                                                      9.9s 
   ✔ d59b5be914c6 Pull complete                                                                                                      5.7s 
   ✔ 901d5d9b0beb Pull complete                                                                                                      5.8s 
   ✔ 4a7aa9546b2c Pull complete                                                                                                      6.5s 
   ✔ 0a0d389be22f Pull complete                                                                                                      8.0s 
   ✔ fb7bd7cfbcd2 Pull complete                                                                                                      7.4s 
[+] Running 3/3
 ✔ Network feemanage_default    Created                                                                                              0.1s 
 ✔ Volume "feemanage_database"  Created                                                                                              0.0s 
 ✔ Container appdb              Started
 ```
コマンド実施のみで起動済みになった。
### ログはちゃんと読みましょう
というお話でした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821194/ae9f1ff1-8573-a54a-d9bf-4102f1cbd1d8.png)

## 参考にさせていただいたサイト
https://qiita.com/asylum/items/17e655d8369c19affbc3