2022/08/08

仕事で、ECサイトの DB が PostgreSQL で開発されていました。
Docker で PostgreSQL 環境を構築しようと試みたのですが、記事が中々ありませんでした。
あっても部分的にしかなかったので、今回、備忘録としてエントリーしたいと思います。
環境
Docker for Windows で Docker Compose を使います。
PostgreSQL は 9.3 で pgAdmin は 4 で構築します。
Docker の環境は Git Hub に公開しています。
また、コンテナ作成と同時にテストで DB の articles という TABLE も作成されます。
コンテナ実行後、http://localhost/test.php
にアクセスすると Postgres の接続テストができます。
pgAdmin は http://localhost:81 にアクセスすると pgAdmin のログイン画面にアクセスできます。
前提条件
Windows の方はすでに Docker for Windows をインストールしているものとします。
まだ Docker for Windows をインストールされていない方は以下をご参考ください。
ファイル構成
手順
1)Git Hub から Docker 環境をダウンロード
Git Hub に Docker 環境を UP しています。
git clone をするか ZIP でダウンロードしてください。
2)コンテナを起動
docker-compose を使ってコンテナを起動させます。
3)PostgreSQL接続テストをする
ブラウザを開いて
にアクセス。
以下のような画面になれば接続 OK です。
4)PostgreSQLコンテナにアクセス
前提として、PostgreSQL のコンテナが起動していることが条件になります。
起動しているかは docker-compose ps
で確認できます。
実践画面
5)PostgreSQLの中身を見る(対話モード)
対話モード(psql)の中でデータベースの中身を参照するためによく使うコマンドは以下になります。
コマンドは冒頭に \
(¥マークを一回クリック)ことに注意してください。
コマンド | 内容 | 補足 |
---|---|---|
\l | DB一覧 | list |
\c DB名 | DBに接続 | change。プロンプトがDB名になる |
\dt | テーブル一覧(タイプ、オーナー) | display table |
\z | テーブル一覧(アクセス権一覧) | \dpと同じ(display privilage) |
\s | \コマンド実行結果の履歴 | sequence |
\q | 対話モードの終了 | quit |
「\?」
でコマンド一覧を表示することができます。
6)PostgreSQLの中身を見る(対話モードに入らないケース)
なお、psql の対話モードで実行する一部のコマンドは、対話モードに入らずとも実行することができます。
コマンド | 内容 |
---|---|
$ psql -? | ヘルプ表示。--help と同じ |
$ psql -l | データベース一覧 |
$ psql -V | PostgreSql バージョン表示 |
$ psql -d DB名 | DBに接続 |
7)PostgreSQLコンテナ上でダンプ&リストア
ダンプのやり方
PostgreSQLコンテナを起動した状態で以下のコマンドを打ちます。
実践画面
以下のように生成されていればOKです。
リストアのやり方
実践画面
8)PostgreSQL永続化
PostgreSQL を永続化する場合は以下のように docker-compose.yml の volumes でマウントする箇所を変更してください。
Sampleのテーブル(articlesテーブル)を確認する場合
PostgreSQL 永続化する場合
PostgreSQLの場合、vloumeマウント、データの永続化をしようとすると「うまく行かない」ってことがあるかと思います。解決策としては上記のように docker-compose.yml の volume 指定時にzフラグを追加するだけで OK です。
9)pgAdmin4でアクセス
http://localhost:81/ にアクセスすると pgAdmin4 にアクセスできます。
id : pgadmin@laraweb.net
pass : password
※docker-compose.yml に記述している情報になります。
10)PostgreSQLのダンプコマンド(pg_dump)
pg_dump コマンドは、データベースのバックアップを行う PostgreSQL のコマンドです。
個人的には本番環境とローカル環境の DB を同期させるときによく使います。
・pg_dumpallコマンド … すべてのデータベースのバックアップやユーザー(=ロールという)を取得
(※ pg_dump は内部的に pg_dump を複数回、実行している形になります。)
formatで指定できるのは4パターンです。
① --format=p:SQL文のテキストファイルで出力される(データも含みます)※p=plain
② --format=c:カスタム形式(=簡単にいうと圧縮されたバックアップファイルのこと)
③ --format=t:tar形式
④ --format=d:ディレクトリ形式(テーブル単位でのカスタム形式)
※ ①がデフォルト値(formatを指定しない場合は=pと同じ意味になります。)
※ ④のみ--jobsというオプションを使うと並列バックアップが可能
① テキスト形式:「.sql」
② カスタム形式:「.dump」、「.custom」、「.backup」、「.dmp」
③ tar形式:拡張子をつけない、「.tar」
④ ディレクトリ形式:拡張子をつけない
実例
11)サーバにアクセスして PostgreSQL のダンプコマンド
DBを操作する際は、rootユーザや一般ユーザではなく、postgresユーザに切り替える必要があります。
例
postgresユーザに切り替えたあと、PostgreSQL のダンプコマンドを実行します。
実例
以上です。
Udemyを使ったLaravel学習方法


仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら。