🍇

Dockerを使用したPostgreSQL環境の構築とpsqlによる接続確認方法

2024/04/06に公開

1. はじめに

この記事では、Dockerを使用してPostgreSQLのデータベース環境を構築し、その接続をpsqlコマンドラインツールを使って確認する方法について解説します。Dockerを利用することで、開発環境のセットアップを簡単かつ迅速に行うことができます。また、psqlを使用することで、データベースの状態を直接確認し、SQLクエリの実行などの基本的な操作を行うことが可能になります。

この記事は、DockerやPostgreSQL、psqlに初めて触れる方を対象としています。

1.1 記事の目的

  • Dockerを使用してPostgreSQLのデータベース環境を構築する方法を学ぶ。
  • psqlコマンドラインツールを使用して、Dockerコンテナ内のPostgreSQLデータベースに接続し、基本的な操作を行う方法を理解する。

1.2 対象読者

  • DockerやPostgreSQLに興味があるが、どのように始めればよいかわからない初心者。
  • 既にDockerやPostgreSQLの基本を理解しているが、psqlを使ったデータベース操作についてもっと学びたい中級者。

この記事を通じて、DockerとPostgreSQLを使ったデータベース環境の構築と管理の基礎を身につけ、実際の開発プロジェクトに応用できる知識を獲得していただければ幸いです。

2. DockerでPostgreSQLを構築する

この章では、Dockerを使用してPostgreSQLのデータベース環境を構築する手順について詳しく解説します。Dockerを利用することで、環境依存の問題を避けながら、一貫した方法でデータベース環境をセットアップできます。

2.1 Dockerとは?

Dockerは、アプリケーションをコンテナと呼ばれる隔離された環境で実行するためのオープンソースプラットフォームです。これにより、アプリケーションが動作する環境を一貫して保つことができ、開発からテスト、本番環境まで、どこでも同じ環境でアプリケーションを実行できます。

2.2 Docker Composeとは?

Docker Composeは、複数のコンテナを定義し、実行するためのツールです。docker-compose.ymlファイルを使用して、サービス、ネットワーク、ボリュームなどの設定を行い、単一のコマンドでこれらのコンテナを管理できます。

2.3 PostgreSQLコンテナの構築

2.4 docker-compose.ymlファイルの作成

PostgreSQLのコンテナを構築するためには、まずdocker-compose.ymlファイルを作成します。以下は、PostgreSQLを使用するための基本的なdocker-compose.ymlの例です。

docker-compose.yml
version: '3.9'

services:
  db:
    image: postgres:16
    volumes:
      - ./data:/var/lib/postgresql/data:/docker-entrypoint-initdb.d
    ports:
      - "5432:5432"
    environment:
      - POSTGRES_DB: exampledb
      - POSTGRES_USER: exampleuser
      - POSTGRES_PASSWORD: examplepass
docker-compose up -d

このコマンドは、docker-compose.ymlファイルに基づいてコンテナをバックグラウンドで起動します。

2.5 コンテナの確認

コンテナが正しく起動しているかを確認するには、以下のコマンドを実行します。

docker-compose ps

このコマンドは、現在起動しているコンテナの一覧を表示します。

この章を通じて、Dockerを使用してPostgreSQLのデータベース環境を構築する基本的な方法を学びました。次の章では、psqlコマンドラインツールを使用して、このデータベース環境に接続し、基本的な操作を行う方法について解説します。

3. psqlを使用したPostgreSQLへの接続と基本操作

この章では、psqlコマンドラインツールを使用して、Dockerで構築したPostgreSQLデータベースに接続し、基本的な操作を行う方法について説明します。psqlはPostgreSQLの強力な対話型端末であり、データベースに対するクエリの実行、管理タスクの実行、サーバーの監視などが可能です。

3.1 psqlとは?

psqlはPostgreSQLデータベースに接続するためのコマンドラインツールです。SQLクエリの実行、データベースの作成と削除、ユーザー権限の管理など、データベースに関するほとんどの操作を行うことができます。

3.2 psqlへの接続

Dockerコンテナで動作しているPostgreSQLデータベースに接続するには、以下のコマンドを実行します。

docker exec -it <コンテナ名> psql -U <データベースユーザー名> -d <データベース名>

ここで、<コンテナ名>docker-compose psで確認したPostgreSQLコンテナの名前(例: example-db-1)、<データベースユーザー名>はデータベースユーザー名(例: postgres)、<データベース名>はデータベース名(例: exampledb)です。

example

docker-compose psを実行して表示されるNAME列の値を<コンテナ名>の部分に指定してください。例えば、docker-compose psの結果が以下のように表示された場合、

NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
example-db-1 postgres:16 "docker-entrypoint.s…" db 58 minutes ago Up 58 minutes 0.0.0.0:5432->5432/tcp

以下のコマンドを使用してPostgreSQLデータベースに接続します。

docker exec -it example-db-1 psql -U postgres -d exampledb

3.3 基本的なSQL操作

3.3.1 データベースのリスト表示

データベースのリストを表示するには、以下のコマンドを使用します。

\l

表示を終了するときは、qを押してください。

3.3.2 テーブルの作成

新しいテーブルを作成するには、以下のようなSQLコマンドを実行します。

CREATE TABLE users (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100),
    email VARCHAR(100) UNIQUE NOT NULL,
    created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);

3.3.3 テーブル一覧の表示

PostgreSQLデータベース内のテーブル一覧を表示するには、psqlコマンドラインツールで \dt コマンドを使用します。このコマンドは、現在接続しているデータベース内のすべてのテーブルの名前と所有者、およびテーブルのアクセス権限情報を表示します。

\dt
``

このコマンドを実行すると、以下のような出力が得られます(出力は実際のテーブル内容によって異なります):`

       List of relations

Schema | Name | Type | Owner
--------+------------+-------+----------
public | users | table | postgres
(1 row)


ここで、`Schema` はテーブルが属するスキーマを、`Name` はテーブルの名前を、`Type` はオブジェクトの種類(この場合はテーブル)を、`Owner` はテーブルの所有者を示します。

特定のスキーマ内のテーブルのみを表示したい場合は、`\dt <スキーマ名>.*` の形式でコマンドを実行します。例えば、`public` スキーマ内のテーブルのみを表示するには、以下のように実行します:

```bash
\dt public.*

3.3.3 データの挿入

テーブルにデータを挿入するには、以下のコマンドを使用します。

INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com');

3.3.4 データのクエリ

テーブルからデータを選択し、取得するには SELECT 文を使用します。 SELECT 文を使うことで、指定したテーブルから一つまたは複数の列のデータを取得できます。

例えば、usersテーブルからすべての列のデータを取得したい場合は、以下のように * を使用してすべての列を指定します。

SELECT * FROM users;

このコマンドは、users テーブルに存在するすべての列のデータを表示します。

特定の列のみを取得したい場合は、列名を明示的に指定します。例えば、nameemail 列のデータのみを取得したい場合は以下のようにします。

SELECT name, email FROM users;

このコマンドを実行すると、users テーブルの name 列と email 列のデータのみが表示されます。

また、条件を指定して特定のデータのみを取得することもできます。例えば、email'alice@example.com' のユーザーのデータのみを取得するには、WHERE 句を使用して条件を指定します。

SELECT * FROM users WHERE email = 'alice@example.com';

このように SELECT 文を使うことで、テーブルから必要なデータを柔軟に取得することができます。

3.3.5 データの更新

テーブルのデータを更新するには、以下のコマンドを使用します。

UPDATE users SET name = 'Alice Smith' WHERE email = 'alice@example.com';

3.3.6 データの削除

テーブルからデータを削除するには、以下のコマンドを使用します。

DELETE FROM users WHERE email = 'alice@example.com';

この章では、psqlを使用してPostgreSQLデータベースに接続し、基本的なSQL操作を行う方法を学びました。これらの基本的なコマンドをマスターすることで、PostgreSQLデータベースの管理と操作の基礎を固めることができます。

5. まとめ

この記事では、Dockerを使用してPostgreSQLのデータベース環境を構築し、psqlコマンドラインツールを使ってその接続を確認する方法について解説しました。Dockerを利用することで、開発環境のセットアップを簡単かつ迅速に行うことができ、psqlを使用することで、データベースの状態を直接確認し、SQLクエリの実行などの基本的な操作を行うことが可能になります。

Dockerを使ったPostgreSQL環境構築のメリット

  • 環境の統一: Dockerを使用することで、開発、テスト、本番環境を容易に統一できます。これにより、環境依存の問題を減らすことができます。
  • 迅速なセットアップ: Dockerイメージを使用することで、PostgreSQLのセットアップを迅速に行うことができます。また、Docker Composeを使用することで、複数のサービスを含むアプリケーションのセットアップも簡単になります。
  • 移植性の向上: Dockerコンテナは、さまざまな環境で同じように動作します。これにより、アプリケーションの移植性が向上します。

今後の学習ポイントや応用例の紹介

  • 高度なデータベース管理: バックアップの取得、リストア、パフォーマンスの監視など、より高度なデータベース管理技術を学ぶことができます。
  • セキュリティの強化: データベースのセキュリティを強化するための技術、例えばSSL/TLSによる接続の暗号化、アクセス制御の設定などを学ぶことができます。
  • マイクロサービスアーキテクチャ: DockerとPostgreSQLを使用して、マイクロサービスアーキテクチャを構築する方法を学ぶことができます。

最後に

この記事を最後まで読んでいただき、ありがとうございました。DockerとPostgreSQLを使用した環境構築から基本的な操作、応用的なテクニックに至るまで、幅広い内容をカバーしようと努めました。この記事が、皆さんの開発作業や学習に役立つ情報を提供できていれば幸いです。

Discussion