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)