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-composeでPostgreSQLを実行したらinit.sqlが実行されなかった

Posted at

今回の事象

docker-compose.ymlに記述したPostgreSQLのinit.sqlが起動時に実行されなかった。
下記の記事を見てvolumesの削除を試みたが、何も変わらなかった状態。
https://qiita.com/kondo0602/items/ab0a85fb1e731234eb1a

(抜粋)docker-compose.yml
postgres:
    image: postgres:latest
    container_name: my_postgres
    ports:
      - "5432:5432"
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
    volumes:
      - ./data:/var/lib/postgresql/data
      - ./init:/docker-entrypoint-initdb.d
init.sql
-- テーブル作成
CREATE TABLE my_table (
    id serial PRIMARY KEY,
    name VARCHAR (100) NOT NULL
);

-- サンプルデータの登録
INSERT INTO my_table (name) VALUES ('John Doe');

原因

どうやら下記の記事によるとdataディレクトリ配下にファイルがあるとinit.sqlは実行されないとのこと。
恐らくパスの指定ミスでdocker-compose up時にinit.sqlが実行されずdataディレクトリ配下にファイルが作成されたことが原因。コンテナを再実行しても初期化がスキップされていた。
https://stackoverflow.com/questions/59715622/docker-compose-and-create-db-in-postgres-on-init

補足

docker-compose logsで下記のエラーが表示されていたら初期化はスキップされています。(dataディレクトリ配下にファイルが存在する状態)
PostgreSQL Database directory appears to contain a database; Skipping initialization

対処

data配下のファイルを全て削除した上で、docker-compose upを再実行。
→psqlを叩くと無事解消されていた。

postgres=# \dt
             リレーション一覧
 スキーマ |   名前   |  タイプ  |  所有者  
----------+----------+----------+----------
 public   | my_table | テーブル | postgres
(1 行)
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?