DEV Community

kaede
kaede

Posted on • Edited on

SQL 基礎 Part 03 -- docker-compose で立てたコンテナで立ち上げ時に DB と全権力ユーザーを作成して、外部からログインする

why

Spring で実際につなぐために、接続情報があり、テーブルが自動生成される PostgreSQL サーバーを Docker で立てたくなった。


Docker Compose で ログイン情報を書いて SQL ファイルでテーブル作成を試す

https://zenn.dev/msksgm/articles/20220603-kotlin-jdbc-postgresql#db

この記事を参考に、docker-compose.yml に

  • DB の名前
  • ユーザー名
  • パスワード

これらを書いて

読み込まれる SQL でテーブルの作成を擦るように書いてみた。

しかし、これだと DB と USER が作られていないので
DB にログインしてテーブルができているか確認することができなかった。


SQL でユーザーと DB の作成を行い、DB の権限をユーザーに渡す

https://amateur-engineer.com/docker-compose-postgresql/

この記事を参考に

version: '3.2' services: # # PostgreSQL # person-db: image: postgres:14-bullseye container_name: person-db ports: - 5444:5432 volumes: - ./postgresql/init:/docker-entrypoint-initdb.d environment: POSTGRES_USER: kaede POSTGRES_PASSWORD: pass POSTGRES_DB: person-db POSTGRES_INIT_DB_ARGS: --encoding=UTF-8 
Enter fullscreen mode Exit fullscreen mode

init を初期位置の *.sql として

00-init.sql を作り(名前はなんでもOK)

CREATE USER kaede; CREATE DATABASE person-db; GRANT ALL PRIVILEGES ON DATABASE person-db TO kaede; 
Enter fullscreen mode Exit fullscreen mode

user と db と権限作ったら

dc up WARNING: Found orphan containers (psql_pgadmin_1, postgres_dc, psql_postgres_1, sample-pg) for this project. If you removed or renamed this service in your compose file, you can run this command with the --remove-orphans flag to clean it up. Starting person-db ... done Attaching to person-db person-db | person-db | PostgreSQL Database directory appears to contain a database; Skipping initialization person-db | person-db | 2022-12-18 16:36:57.296 UTC [1] LOG: starting PostgreSQL 14.6 (Debian 14.6-1.pgdg110+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 10.2.1-6) 10.2.1 20210110, 64-bit person-db | 2022-12-18 16:36:57.296 UTC [1] LOG: listening on IPv4 address "0.0.0.0", port 5432 person-db | 2022-12-18 16:36:57.296 UTC [1] LOG: listening on IPv6 address "::", port 5432 person-db | 2022-12-18 16:36:57.298 UTC [1] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432" person-db | 2022-12-18 16:36:57.303 UTC [26] LOG: database system was shut down at 2022-12-18 16:36:14 UTC person-db | 2022-12-18 16:36:57.309 UTC [1] LOG: database system is ready to accept connections 
Enter fullscreen mode Exit fullscreen mode

ちゃんと起動して DB が作られて

psql -h localhost -p 5444 -U kaede -d person-db Password for user kaede: psql (12.12 (Ubuntu 12.12-0ubuntu0.20.04.1), server 14.6 (Debian 14.6-1.pgdg110+1)) WARNING: psql major version 12, server major version 14. Some psql features might not work. Type "help" for help. person-db=# 
Enter fullscreen mode Exit fullscreen mode

user kaede
db person-db

これで接続することができた。

Top comments (0)