docker PostgreSQLを起動してアクセスする

dockerでPostgreSQLのコンテンをコンテナイメージから起動します。

PostgreSQLのコンテナイメージを取得

docker pull postgres

タグを指定しない場合、デフォルトの”latest”が設定されます。

コンテナイメージの確認

❯ docker images 
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
postgres            latest              adf2b126dda8        8 days ago          313MB
ubuntu              latest              1d622ef86b13        4 weeks ago         73.9MB

上記の”postgres”が取得したPostgreSQLのコンテナイメージです。

コンテナ起動

# create dir
mkdir /data/postgres
# docker run
docker run -d \
    --name postgres \
    -e POSTGRES_PASSWORD=postgres \
    -p 5432:5432 \
    -v /data/postgres:/var/lib/postgresql/data \
    postgres

PostgreSQLを起動するには、”-e”オプションを指定して環境変数の”POSTGRES_PASSWORD”に初期パスワードを設定します。※起動だけなら、このパスワードの設定でOKです。

その他オプションでは、”-v”オプションを指定して、PostgreSQLのデータ保存先としてホストマシンの”/data/postgres”を指定しており、”-p”オプションを指定してホストマシンとのポート接続を指定しています。

クライアントからアクセス

以下の初期設定でPostgreSQLへアクセスします。

HOST:コンテナのIPアドレス
PORT:5432
DATABASE:postgres
USER:postgres
PASSWORD:postgres

※パスワードは、コンテナ起動時に環境変数に指定した値となります

PostgreSQL よく使うコマンド

よく使うコマンドを記載します。


PostgreSQLの起動、停止

PostgreSQLの起動

pg_ctl start -D "C:\Program Files\PostgreSQL\11\data"

PostgreSQLの停止

pg_ctl stop -D "C:\Program Files\PostgreSQL\11\data"

PostgreSQLの起動確認

pg_ctl status -D "C:\Program Files\PostgreSQL\11\data"

psql ログイン

psql -U <USERNAME> -d <DB_NAME> -h <HOST> -p <PORT>

例)
psql -U postgres -d postgres -h localhost -p 5432

psql ログアウト

\q


ユーザーロール一覧

\du

データベース一覧

\l

現在のデータベースを確認

select current_database();

データベース切り替え

\c <DB_NAME>

スキーマ一覧

\l

現在のスキーマを確認

select current_database();

スキーマ切り替え

set search_path = <SCHEMA_NAME>;

PostgreSQL psqlでログインするコマンド パスワード省略(パスワードあり/なし)

よく使うのでメモ。

コマンドラインからpsqlに接続する(パスワードあり)

パターン1

psql “postgresql://{ユーザー名}:{パスワード}@{ホスト名}:{ポート番号}/{データベース名}”

パターン2

psql “user={ユーザー名} password={パスワード} host={ホスト名} port={ポート番号} dbname={データベース名}”


コマンドラインからpsqlに接続する(パスワードなし)

パターン1

psql “postgresql://{ユーザー名}@{ホスト名}:{ポート番号}/{データベース名}”

パターン2

psql “user={ユーザー名} host={ホスト名} port={ポート番号} dbname={データベース名}”

パターン3

psql -U {ユーザー名} -h {ホスト名} -p {ポート番号} -d {データベース名}


psqlからログアウトする

\q

PostgreSQL psqlで引数とSQLファイルを指定して実行する

psqlとはPostgreSQLのターミナル型SQLクライアントです。

引数に指定した値をSQLファイルの変数にバインドします。

psqlで引数とSQLファイルを指定して実行する サンプルコード

sample.sql

実行するSQLファイル、”:変数”の箇所を置き換えます。

select :foo,
       :bar,
       :hoge;

p_exec_file.sh

実行するshellです。psqlを呼び出し、”-f”オプションでSQLファイルを指定し、”-v”オプションで引数名と値を設定します。”–echo-all”は実行したSQLを結果と一緒に出力します。

#!/bin/bash

DB_USER="{user_name}"
DB_PWD="{password}"
DB_SERVER="{db_server_url}"
DB_PORT="{db_port}"
DB_NAME="{db_name}"

psql \
    -d "postgresql://$DB_USER:$DB_PWD@$DB_SERVER:$DB_PORT/$DB_NAME" \
    -f "sample.sql" \
    -v foo="now()" \
    -v bar="1" \
    -v hoge="'test_str'" \
    --echo-all


実行結果

p_exec_file.shを実行します。実行したSQL文と結果が出力されます。”foo”に”now()”、”bar”に”1″(数値)、”hoge”に”test_str”(文字)が設定されています。

$ ./p_exec_file.sh
select :foo,
       :bar,
       :hoge;
              now              | ?column? | ?column?
-------------------------------+----------+----------
 2019-12-28 16:10:25.343578+09 |        1 | test_str
(1 行)

PostgreSQL pg_ctlコマンドで起動、停止、起動確認する Windows

PostgreSQLをpg_ctlコマンドで起動する

# PostgreSQLをpg_ctlコマンドで起動する
pg_ctl start -D "C:\Program Files\PostgreSQL\11\data"

※データベースクラスタディレクトリ(”C:\Program Files\PostgreSQL\11\data”) は、環境に併せて変更する

※また、コマンドプロンプトを管理者として実行する必要があります


PostgreSQLをpg_ctlコマンドで停止する

#  PostgreSQLをpg_ctlコマンドで停止する
pg_ctl stop -D "C:\Program Files\PostgreSQL\11\data"


PostgreSQLをpg_ctlコマンドで起動確認する

# PostgreSQLをpg_ctlコマンドで起動確認する 
pg_ctl status -D "C:\Program Files\PostgreSQL\11\data"


起動コマンドの実行結果 例


サーバの起動完了を待っています....2019-11-27 02:23:00.130 JST [4728] LOG:  IPv6アドレス"::"、ポート5432で待ち受けています
2019-11-27 02:23:00.130 JST [4728] LOG:  IPv4アドレス"0.0.0.0"、ポート5432で待ち受けています
2019-11-27 02:23:00.149 JST [4728] LOG:  ログ出力をログ収集プロセスにリダイレクトしています
2019-11-27 02:23:00.149 JST [4728] ヒント:  ここからのログ出力はディレクトリ"log"に現れます。
完了
サーバ起動完了


停止コマンドの実行結果 例


サーバ停止処理の完了を待っています....完了
サーバは停止しました


起動確認コマンドの実行結果 例

pg_ctl: サーバが動作中です(PID: 4728)

pg_ctl: サーバが動作していません