PostgreSQL(Postgresとも)は言うなれば、オブジェクトリレーショナルデータベース管理の礎石です。Postgresは、開発に何十年も費やされたデータベースであり、高いパフォーマンスを支える信頼性と柔軟性を兼ね備えています。
今回の記事では、Postgresでデータベースとテーブルを作成、削除する方法をご説明します。さらに、Adminerのようなデータベース管理ツールを使用して、同じタスクを処理する方法も扱いたいと思います。
PostgreSQLを利用する
まず始めに、システムにPostgresがインストールされていることを確認してください。インストールされていない場合は、必要なファイルをダウンロードし、インストール手順に従ってください。
ここで紹介するコマンドはmacOSを想定して実演していますが、どのOS上でもシームレスに動作するはずです。
Postgresがインストールできたら、ターミナルで次のコマンドを入力し、すべてが問題なく稼働していることを確認してください。
postgres -V
このコマンドにより、Postgresのバージョン番号が返されるはずです。

PostgreSQLデータベースサーバーへの接続方法
Postgresをシステムにインストールし、データベースを作成する準備ができました。続いてはどうやってデータベースにアクセスするのかです。そこでPostgresの対話型ターミナル、通称psqlの出番です。PsqlはPostgresのターミナルベースのフロントエンドで、Postgresにクエリを出し、クエリ結果を表示することができます。
インストール時に、Postgresはデータベース内で最上のアクセス権を持つデフォルトのスーパーユーザーをオペレーティングシステム(OS)上に作成します。このコマンドを使用すると、デフォルトのスーパーユーザーとしてpsqlターミナルにログインすることができます。
psql postgres
このコマンドを実行すると、ターミナルがpostgres=#
に変わり、デフォルトのスーパーユーザーとしてログインしていることがわかります。
psqlを使用する最大の利点の1つがメタコマンドです。この機能により、正確なSQLコマンドを知らなくても、データベースへの接続やテーブルの表示などのデータベース管理タスクを実行することができます。
psqlでメタコマンドを使用するには、バックスラッシュ(\
)の後にコマンドを続けます。以下はその例です。
\c <database-name>
─特定のデータベースに接続\l
─サーバー上のすべてのデータベースを一覧表示\dt
─データベース内のすべてのテーブルを表示
PostgreSQLデータベースの作成方法
データベースを扱う際には、特定の権限を持つユーザーを新規に作成し、最小権限の原則に従うのが得策です。とはいえ、この記事ではシンプルに説明できるように、デフォルトのスーパーユーザーを使用してデータベースを作成し、管理することにします。
まず、以下のメタコマンドを実行し、Postgresサーバー上の全ユーザを一覧表示します。
\du
新しいユーザーを特に追加していない場合は、デフォルトのスーパーユーザーのみが表示されるはずです。

デフォルトのスーパーユーザーは、システムの設定によってはPostgresまたはOSのユーザー名として表示されます。
デフォルトでは、スーパーユーザーはパスワードを持ちません。後でデータベースを管理するために、以下のコマンドを使用してパスワードを設定しましょう。
\password <superuser-name>
プロンプトが表示されたらパスワードを入力し、確認してください。これで、Postgresサーバーにデータベースを作成する準備ができました。データベースを作成する構文としてCREATE DATABASE <database-name>
を使用します。
まずはsales
という名前のデータベースを作成してみましょう。
CREATE DATABASE sales;
データベースの作成が完了すると、次のように表示されます。

次に、以下のコマンドでさらに2つのデータベース、customers
とemployees
を作成します。
CREATE DATABASE customers;
CREATE DATABASE employees;
これで、ローカルのPostgresサーバに3つのデータベースが作成されました。作成した全てのデータベースを表示するには、次のメタコマンドを使用してください。
\l

これまでに作成した3つのデータベースが表示されています。複数のデータベースはデフォルトでPostgresのインストール時に付属するため、画像内の他のデータベースは無視して構いません。
次に、特定のデータベースを指定して接続することができます。どのデータベースであっても、接続するためのメタコマンドは\c <database-name>
を使います。
以下のコマンドを実行して、sales
データベースに接続してみます。
\c sales
ターミナルに以下のメッセージが表示されるはずです。

一度データベースに接続すれば、同じコマンドで簡単にサーバー上の別のデータベースに切り替えることができます。例えば、sales
データベースから、customers
データベースに接続するには、次のコマンドを実行します。
\c customers
テーブルの作成
データベースにデータを入れるためには、まずテーブルを作成する必要があります。Postgresでテーブルを作成する構文は以下の通りです。
CREATE TABLE <table-name> (
<column1-name> <column1-datatype> <column1-constraint>,
<column2-name> <column2-datatype> <column2-constraint>,
<column3-name> <column3-datatype> <column3-constraint>,
…
…
<columnN-name> <columnN-datatype> <columnN-constraint>
);
sales
データベースに接続するところから始めます。
\c sales
次に、products
テーブルを作成します。カラムはproduct_id
、product_name
、quantity_sold
です。
CREATE TABLE products(
Product_id INT NOT NULL,
Product_name TEXT NOT NULL,
Quantity_sold INT NOT NULL
);
操作が完了すると、次のような出力が表示されます。

次に、以下のメタコマンドを使用して、products
テーブルが正常に作成されたことを確認しましょう。
\dt
このコマンドにより、データベース内のすべてのテーブル(この場合は1つのテーブル)が一覧表示されます。sales
データベースに接続しているので、以下の出力が確認できるはずです。

次に、employees
データベースに2つのテーブルを作成します。最初のテーブルは給料のリストで、2番目は住所のリストです。これらのテーブルを作成するには、以下のコマンドを実行します。
\c employees
CREATE TABLE salary(
Employee_id INT NOT NULL,
Employee_name TEXT NOT NULL,
Employee_salary INT NOT NULL
);
CREATE TABLE address(
Employee_id INT NOT NULL,
Employee_country TEXT NOT NULL,
Employee_zipcode INT NOT NULL
);
最後に、\dt
メタコマンドを実行して、上記のテーブルが作成されたことを確認します。次のような出力が表示されるはずです。

PostgreSQLデータベースの削除方法
データベースの削除は作成と同じくらい簡単です。データベースを削除する構文にはDROP DATABASE <database-name>;
を使います。
データベースを削除するために、特定のデータベースに接続する必要はありません。例えば、customers
データベースを削除したい場合、どのデータベースに接続していても、以下のコマンドを実行することができます。
DROP DATABASE customers;
削除が完了すると、次の画面が表示されるはずです。

\l
メタコマンドを使用してローカルのPostgresサーバ上のデータベースを一覧表示することで、customers
データベースが存在しないことを確認できます。

AdminerによるPostgreSQLデータベース操作の実行
ここまでは、コマンドラインからデータベースやテーブルを作成し、またデータベースを削除することで、Postgresの基礎を学びました。
とは言え、コマンドラインでの操作は時に難しく感じられることもあるかもしれません。そこでAdminerのようなデータベース管理ツールが役立ちます。Adminerを使えば、上記のデータベース操作をすべてGUIで行うことができます。Adminerは単独で使用することもできますが、DevKinstaの標準コンポーネントでもあります。
Adminerでデータベースを管理するには、Adminer PHPファイルもダウンロードする必要があります。ターミナルを開き、PHPファイルを実行する組み込みのウェブサーバーを起動し、Adminer PHPファイルを配置した場所にコマンドで移動します。
cd path/to/Adminer php file
次に、以下のコマンドを使用してウェブサーバーを起動します。
php -S 127.0.0.1:8000
これでウェブブラウザでAdminer UIを使用するための準備は完了です。ウェブブラウザに(ファイル名の部分を変えた上で)「http://localhost:8000/<your-Adminer-php-file.php>」を入力してください。
ウェブブラウザにAdminerのユーザーインターフェース(UI)が表示されるはずです。

ローカルのPostgresサーバーにアクセスするには、以下の指示に従ってください。
- 「System」フィールドで「PostgreSQL」を選択
- 「Server」フィールドは「localhost」のまま編集しない
- 「Username」には、スーパーユーザー名を入力(「postgres」またはコンピュータのオペレーティングシステムのユーザー名)
- 「Password」には、「Postgresデータベースの作成方法」セクションで設定したスーパーユーザーのパスワードを入力
- 「Database」フィールドは空のままにしておく
認証に成功すると、以下のように以前に作成したすべてのデータベースが表示されます。Windows では、「None of the supported PHP extensions (PgSQL, PDO_PgSQL) is available.」というエラーが発生する可能性があります。これが発生した場合には、php.iniファイルを編集して該当する拡張モジュールを有効にしてください。

データベースを新規作成するには、「Create database」 のリンクをクリックします。

データベース名をcustomers
とし、「Save」ボタンをクリックします。
次に、以下に示す「Server」のリンクをクリックして、customers
データベースが作成されたことを確認することができます。

customers
データベースが表示されるはずです。customers
をクリックして接続します。
ご覧の通り、このデータベースにはまだテーブルがありません。「Create table」のリンクをクリックして、locations
というテーブルを新規作成します。

下の画像にあるように情報を入力したら、「Save」ボタンをクリックします。

これで、以下のようにcustomers
データベースにテーブルが表示されるはずです。

「Server」のリンクを再度クリックして、すべてのデータベースを表示できます。ここで「customers」にチェックを入れてください。customers
データベースにチェックを入れることで、下のドロップボタンが有効になります。「drop」をクリックしてデータベースを削除できます。これを選択するとデータベースの削除に関する確認メッセージが表示されます。

まとめ
今回の記事では、ローカルのPostgresサーバー上でコマンドラインからデータベース、そしてデータベースのテーブルを作成する方法、さらにデータベースを削除する方法をご紹介しました。加えて、Adminerのようなデータベース管理ツールを使用して、同じタスクを簡単に実行する方法も扱いました。
コマンドラインによるデータベースやテーブルの管理も機能的ですが、AdminerのUIを使用することでも、繰り返しの多いタスクを簡単に実行することができます。
WordPress開発者の皆さんには、DevKinstaのお試しをおすすめします。Adminerの利用やデータベースの管理が捗る機能が豊富に盛り込まれています。PostgreSQLデータベースの管理を効率化するには、DevKinstaをこちらからご確認ください。