PostgreSQL を使用したデータベース管理の基礎

PostgreSQLBeginner
オンラインで実践に進む

はじめに

この実験 (lab) では、PostgreSQL を使用したデータベース管理の基礎を学びます。この実験 (lab) では、新しいデータベースの作成、既存のデータベースの一覧表示と接続、不要になったデータベースの削除など、データベースを管理するための重要な操作について説明します。

まず、createdb コマンドを使用して新しいデータベースを作成し、psql コマンドを通じてその作成を確認します。次に、利用可能なすべてのデータベースを一覧表示し、特定のデータベースに接続する方法を学びます。最後に、データベースを削除し、データベースのメタデータを表示する方法を検討します。この実験 (lab) では、PostgreSQL における基本的なデータベース管理タスクの実践的な入門を提供します。

新しいデータベースの作成

このステップでは、PostgreSQL で新しいデータベースを作成する方法を学びます。データベースの作成は、データを整理して保存するための最初のステップです。

始める前に、データベースとは何かを理解しましょう。データベースとは、アクセス、管理、および更新が容易になるように編成された、構造化されたデータの集合です。PostgreSQL では、データベースはテーブル、ビュー、およびその他のデータベースオブジェクトのコンテナです。

新しいデータベースを作成するには、createdb コマンドを使用します。このコマンドは、SQL コマンド CREATE DATABASE のラッパーです。

  1. ターミナルを開く (Open a terminal): まだ開いていない場合は、ターミナルウィンドウを起動します。

  2. 新しいデータベースを作成する (Create a new database): createdb コマンドの後に、データベースに付けたい名前を入力します。たとえば、mydatabase という名前のデータベースを作成するには、次のコマンドを実行します。

    createdb mydatabase

    このコマンドは、mydatabase という名前の新しいデータベースを作成します。コマンドが成功すると、何も出力されません。

  3. データベースの作成を確認する (Verify the database creation): データベースが作成されたことを確認するには、psql コマンドを使用してすべてのデータベースを一覧表示できます。まず、デフォルトの postgres データベースに接続します。

    psql -d postgres

    postgres=# プロンプトが表示されます。

  4. データベースを一覧表示する (List databases): postgres=# プロンプトで、次の SQL コマンドを実行して、すべてのデータベースを一覧表示します。

    \l
    PostgreSQL のデータベースのリスト

    このコマンドは、作成したデータベース (mydatabase) を含むデータベースのリストを表示します。次のような出力が表示されます。

                                     データベース一覧 (List of databases)
       名前 (Name)    |  所有者 (Owner)   | エンコーディング (Encoding) |   照合順序 (Collate)   |    Ctype    |   アクセス権限 (Access privileges)
    -----------+----------+----------+-------------+-------------+-----------------------
     mydatabase| labex    | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
     postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
     template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
               |          |          |             |             | postgres=CTc/postgres
     template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
               |          |          |             |             | postgres=CTc/postgres
    (4 行 (rows))

    mydatabase がリストにあることに注目してください。

  5. psql を終了する (Exit psql): psql プロンプトを終了するには、次のように入力します。

    \q

    Enter キーを押します。通常のターミナルプロンプトに戻ります。

これで、PostgreSQL で新しいデータベースを作成できました。

データベースの一覧表示と接続

このステップでは、利用可能なデータベースを一覧表示し、psql コマンドラインツールを使用して特定のデータベースに接続する方法を学びます。

  1. ターミナルを開く (Open a terminal): まだ開いていない場合は、ターミナルウィンドウを起動します。

  2. 利用可能なデータベースを一覧表示する (List available databases): すべてのデータベースを一覧表示するには、-l オプション(小文字の「L」)を指定して psql コマンドを使用します。このオプションは、サーバー上のすべてのデータベースを一覧表示します。接続するデータベースを指定していないため、psql は現在のユーザー名を使用して接続を試みます。

    psql -l

    このコマンドは、データベースのリストを、所有者、エンコーディング、およびその他の情報とともに表示します。次のような出力が表示されます。

                                     データベース一覧 (List of databases)
       名前 (Name)    |  所有者 (Owner)   | エンコーディング (Encoding) |   照合順序 (Collate)   |    Ctype    |   アクセス権限 (Access privileges)
    -----------+----------+----------+-------------+-------------+-----------------------
     mydatabase| labex    | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
     postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
     template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
               |          |          |             |             | postgres=CTc/postgres
     template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
               |          |          |             |             | postgres=CTc/postgres
    (4 行 (rows))

    この出力は、データベースの名前、所有者、およびその他の詳細を示しています。前のステップで作成した mydatabase データベースが表示されるはずです。

  3. 特定のデータベースに接続する (Connect to a specific database): 特定のデータベースに接続するには、-d オプションの後にデータベースの名前を指定して psql コマンドを使用します。たとえば、mydatabase データベースに接続するには、次のコマンドを実行します。

    psql -d mydatabase

    接続が成功すると、mydatabase=# プロンプトが表示されます。これは、mydatabase データベースに接続されていることを示します。

  4. 接続を確認する (Verify the connection): 正しいデータベースに接続されていることを確認するには、次のような簡単な SQL コマンドを実行します。

    SELECT version();
    SELECT version コマンドの出力

    このコマンドは、接続している PostgreSQL サーバーのバージョンを表示します。出力は次のようになります。

                                                     version
    ----------------------------------------------------------------------------------------------------------------
     PostgreSQL 14.7 (Debian 14.7-1.pgdg110+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 10.2.1-6) 10.2.1 20210110, 64-bit
    (1 行 (row))
  5. psql を終了する (Exit psql): psql プロンプトを終了するには、次のように入力します。

    \q

    Enter キーを押します。通常のターミナルプロンプトに戻ります。

これで、利用可能なデータベースを一覧表示し、psql を使用して特定のデータベースに接続できました。

データベースの削除

このステップでは、PostgreSQL でデータベースを削除 (drop) する方法を学びます。データベースの削除は永続的な操作であるため、このコマンドを使用する際は注意が必要です。データベース内のすべてのデータが失われます。

  1. ターミナルを開く (Open a terminal): まだ開いていない場合は、ターミナルウィンドウを起動します。

  2. データベースを削除する (Drop the database): dropdb コマンドの後に、削除するデータベースの名前を入力します。たとえば、mydatabase データベースを削除するには、次のコマンドを実行します。

    dropdb mydatabase

    このコマンドは、mydatabase データベースを削除します。コマンドが成功すると、何も出力されません。

    重要 (Important): データベースを削除する前に、誰も接続していないことを確認してください。アクティブな接続がある場合、dropdb コマンドは失敗する可能性があります。

  3. データベースの削除を確認する (Verify the database deletion): データベースが削除されたことを確認するには、psql コマンドを使用してすべてのデータベースを一覧表示できます。まず、デフォルトの postgres データベースに接続します。

    psql -d postgres
    postgres への接続後のプロンプト

    postgres=# プロンプトが表示されます。

  4. データベースを一覧表示する (List databases): postgres=# プロンプトで、次の SQL コマンドを実行して、すべてのデータベースを一覧表示します。

    \l

    このコマンドは、データベースのリストを表示します。mydatabase がリストにないことを確認します。

                                     データベース一覧 (List of databases)
       名前 (Name)    |  所有者 (Owner)   | エンコーディング (Encoding) |   照合順序 (Collate)   |    Ctype    |   アクセス権限 (Access privileges)
    -----------+----------+----------+-------------+-------------+-----------------------
     postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
     template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
               |          |          |             |             | postgres=CTc/postgres
     template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
               |          |          |             |             | postgres=CTc/postgres
    (3 行 (rows))

    mydatabase がリストにない場合、正常に削除されています。

  5. psql を終了する (Exit psql): psql プロンプトを終了するには、次のように入力します。

    \q

    Enter キーを押します。通常のターミナルプロンプトに戻ります。

これで、PostgreSQL でデータベースを正常に削除できました。データベースの削除は元に戻せないため、実行する際は注意してください。

データベースのメタデータを表示

このステップでは、PostgreSQL でデータベースのメタデータを表示する方法を学びます。メタデータとは、「データに関するデータ」のことです。データベースのコンテキストでは、メタデータは、テーブル、カラム、データ型、制約などの情報を含む、データベース自体の構造と特性を記述します。

  1. ターミナルを開く (Open a terminal): まだ開いていない場合は、ターミナルウィンドウを起動します。

  2. postgres データベースに接続する (Connect to the postgres database): 前のステップで mydatabase を削除したため、デフォルトの postgres データベースに接続してメタデータを調べます。

    psql -d postgres

    postgres=# プロンプトが表示されます。

  3. テーブルを一覧表示する (List tables): 現在接続されているデータベース内のすべてのテーブルを一覧表示するには、\dt コマンドを使用します。

    \dt

    まだテーブルを作成していないため、出力は空であるか、システムテーブルが表示されるはずです。次のように表示される場合があります。

    リレーションが見つかりませんでした (Did not find any relations).

    または

                 リレーション一覧 (List of relations)
     スキーマ (Schema) |         名前 (Name)          | 型 (Type)  |  所有者 (Owner)
    --------+-----------------------+-------+----------
     pg_catalog | pg_aggregate          | table | postgres
     pg_catalog | pg_am               | table | postgres
     pg_catalog | pg_amop             | table | postgres
    ...

    出力には、各テーブルのスキーマ、名前、型、および所有者が表示されます。

  4. テーブルを記述する (Describe a table): 特定のテーブルに関する詳細情報を表示するには、\d コマンドの後にテーブル名を入力します。ユーザーが作成したテーブルがないため、システムテーブルの例として pg_class を調べてみましょう。

    \d pg_class
    pg_class テーブルの構造の出力

    このコマンドは、カラム名、データ型、および制約を含む、pg_class テーブルの構造を表示します。出力は非常に広範囲になりますが、テーブルの定義の包括的な概要を提供します。

                                         テーブル "pg_catalog.pg_class" (Table "pg_catalog.pg_class")
          カラム (Column)       |   型 (Type)    | 照合順序 (Collation) | Nullable | デフォルト (Default) | 格納 (Storage)  | 統計ターゲット (Stats target) | 説明 (Description)
    -------------------+-----------+-----------+----------+---------+----------+--------------+-------------
     oid               | oid       |           | not null |         | plain    |              |
     relname           | name      |           | not null |         | plain    |              |
     relnamespace      | oid       |           | not null |         | plain    |              |
     reltype           | oid       |           | not null |         | plain    |              |
     reloftype         | oid       |           | not null |         | plain    |              |
     relowner          | oid       |           | not null |         | plain    |              |
     relam             | oid       |           | not null |         | plain    |              |
     relfilenode       | oid       |           | not null |         | plain    |              |
     reltablespace     | oid       |           | not null |         | plain    |              |
     relpages          | integer   |           | not null |         | plain    |              |
     reltuples         | real      |           | not null |         | plain    |              |
     relallvisible     | boolean   |           | not null |         | plain    |              |
     reltoastrelid     | oid       |           | not null |         | plain    |              |
     relhasindex       | boolean   |           | not null |         | plain    |              |
     relhasrules       | boolean   |           | not null |         | plain    |              |
     relhastriggers    | boolean   |           | not null |         | plain    |              |
     relhassubclass    | boolean   |           | not null |         | plain    |              |
     relrowsecurity    | boolean   |           | not null |         | plain    |              |
     relforcerowsecurity| boolean   |           | not null |         | plain    |              |
     relispopulated    | boolean   |           | not null |         | plain    |              |
     relreplident      | character |           | not null |         | plain    |              |
     relispartition    | boolean   |           | not null |         | plain    |              |
     relrewrite        | oid       |           | not null |         | plain    |              |
     relacl            | aclitem[] |           |          |         | plain    |              |
     reloptions        | text[]    |           |          |         | plain    |              |
     relpartbound      | pg_node_tree |           |          |         | extended |              |
    インデックス (Indexes):
        "pg_class_oid_index" UNIQUE, btree (oid)
        "pg_class_relname_nsp_index" UNIQUE, btree (relname, relnamespace)
    外部キー制約 (Foreign-key constraints):
        "pg_class_relam_fkey" FOREIGN KEY (relam) REFERENCES pg_am(oid)
        "pg_class_relnamespace_fkey" FOREIGN KEY (relnamespace) REFERENCES pg_namespace(oid)
        "pg_class_relowner_fkey" FOREIGN KEY (relowner) REFERENCES pg_authid(oid)
        "pg_class_reltoastrelid_fkey" FOREIGN KEY (reltoastrelid) REFERENCES pg_class(oid)
    参照元 (Referenced by):
        テーブル (TABLE) "pg_statistic_ext" 制約 (CONSTRAINT) "pg_statistic_ext_relid_fkey" FOREIGN KEY (relid) REFERENCES pg_class(oid)
        テーブル (TABLE) "pg_rewrite" 制約 (CONSTRAINT) "pg_rewrite_ev_class_fkey" FOREIGN KEY (ev_class) REFERENCES pg_class(oid)
        テーブル (TABLE) "pg_trigger" 制約 (CONSTRAINT) "pg_trigger_tgrelid_fkey" FOREIGN KEY (tgrelid) REFERENCES pg_class(oid)
  5. psql を終了する (Exit psql): psql プロンプトを終了するには、次のように入力します。

    \q

    Enter キーを押します。通常のターミナルプロンプトに戻ります。

これで、psql を使用して PostgreSQL でデータベースのメタデータを正常に表示できました。これにより、データベースとテーブルの構造とプロパティを理解できます。

まとめ

この実験 (lab) では、新しいデータベースの作成から始めて、PostgreSQL でのデータベース管理の基本を学びました。このプロセスには、ターミナルで createdb コマンドの後に目的のデータベース名を入力することが含まれます。実行が成功すると、出力なしでデータベースが作成されます。

作成を確認するには、psql -d postgres を使用してデフォルトの postgres データベースに接続し、\l コマンドを使用して利用可能なすべてのデータベースを一覧表示し、新しく作成されたデータベースが存在することを確認します。