0
1

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/コンテナ仮想環境Advent Calendar 2023

Day 25

【docker-compose】DB起動時にSQLが実行されない

Last updated at Posted at 2023-12-25

事象

/docker-entrypoint-initdb.dにSQLファイルを配置した後、docker-compose up -dしてDockerコンテナを作成・起動した。

しかし、DBサーバを確認してもテーブル/データが作成されていない。

環境

  • ローカルPC内でdocker-compose.yamlを用いてDockerコンテナ起動
  • DB:PostgreSQL
  • docker-compose.yaml内でvolumes:オプションを用いて/docker-entrypoint-initdb.dをマウントし、起動時に実行してほしいDDLを配備してある。

解決法:DBサーバ起動時のログを確認する

下記コマンドで、DB起動時のログが出力される。SQL実行時のログも確認できる。

docker-compose logs <サービス名(:db)>

サービス名とは、docker-compose.yamlservices:の次階層に指定している名前のことを指す。

ログでエラーが吐かれている箇所を確認したら、エラー内容に合わせてデータを修正し、再度コンテナを作成すればOK。

エラーログ例
psql:/docker-entrypoint-initdb.d/ddl.sql:136: ERROR:  relation "table_name" does not exist

自分の場合よくあるエラー原因は、create tablecreate viewの実行順序の関係だったり、create tableで作成するテーブルとinsertするデータのDDLの間でカラムの不整合が生じている事だったりする。

起動時に実行してほしいSQLファイルが複数ファイル存在する場合は、外部参照の都合を考えつつ、SQLファイルのファイル名先頭を実行してほしい順番でナンバリングするようにしている。

おわりに

ネットで、「初期SQLは文法エラーがあった場合でもログ等に出力されないからDDLとにらめっこして原因を探すしかない」みたいな内容を見かけたので、そう思っている方を救うつもりで書きました。

0
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?