0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

Posted at

ことの背景

今まで個人開発の勤怠管理アプリで、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
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行に及ぶハードコーディングですので省略です。

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で立ち上げていきます。

docker-compose up -d
[+] 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

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

原因

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

dockerの拡張機能より、ログを確認。(こんな機能あるんだ、ということに気づいていませんでした)
image.png

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


/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

参考にさせていただいたサイト

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?