Rocky Linux 9にPostgreSQLをインストールして使用する方法
はじめに
リレーショナルデータベース管理システムは、多くのウェブサイトやアプリケーションの重要な要素です。情報を整理し、保存し、アクセスするための構造化された方法を提供します。
PostgreSQL、またはPostgresとしても知られるものは、SQLとしても知られる構造化クエリ言語の実装を提供するリレーショナルデータベース管理システムです。多くの人気プロジェクトで利用されており、大規模なものから小規模なものまで、標準に準拠しており頼りになるトランザクションや並行性などの高度な機能も備えています。
このガイドに従うことで、Rocky Linux 9 サーバーに最新バージョンの PostgreSQL をインストールすることができます。
前提条件
このチュートリアルを完了するには、Rocky Linux 9を実行しているサーバーが必要です。このサーバーには、管理者特権を持つ非ルートユーザーと、firewalldで構成されたファイアウォールが必要です。これを設定するには、Rocky Linux 9の初期サーバーセットアップガイドを参照してください。
ステップ1 – PostgreSQLのインストール
Rocky Linuxのデフォルトのソフトウェアリポジトリから、PostgreSQLをインストールすることができます。Rockyのパッケージマネージャーであるdnfを使用してインストールすることができます。また、Postgresの多言語サポートを改善するために、同時にglibc-all-langpacksという別のパッケージもインストールする必要があります。両方をdnf installコマンドを使用してインストールしてください。
- sudo dnf install postgresql-server glibc-all-langpacks
プロンプトが表示されたら、yを押してENTERキーを押してインストールを確認してください。
デフォルトでは、Rocky Linux 9はPostgreSQLのバージョン13をインストールします。ソフトウェアがインストールされたら、新しいデータベースクラスターを準備するための初期化手順を行います。
ステップ2 — 新しい PostgreSQL データベースクラスタの作成
テーブルを作成し、データを読み込む前に、新しいPostgreSQLデータベースクラスタを作成する必要があります。データベースクラスタとは、単一のサーバーインスタンスで管理されるデータベースのコレクションです。データベースクラスタを作成するには、データベースデータが配置されるディレクトリを作成し、共有カタログテーブルを生成し、template1とpostgresデータベースを作成する必要があります。
テンプレート1データベースは、新しいデータベースを作成するために使用されるテンプレートのようなものです。template1に保存されているすべてのもの(自身で追加したオブジェクトも含む)は、新しく作成されるデータベースに配置されます。Postgresデータベースは、ユーザー、ユーティリティ、サードパーティのアプリケーションが使用するために設計されたデフォルトのデータベースです。
前のステップでインストールしたPostgresパッケージには、低レベルのデータベースクラスタ管理をサポートする便利なスクリプト「postgresql-setup」が付属しています。データベースクラスタを作成するには、sudoを使用してスクリプトを実行し、–initdbオプションを指定します。
- sudo postgresql-setup –initdb
以下の出力結果が表示されます。
* Initializing database in ‘/var/lib/pgsql/data’ * Initialized, logs are in /var/lib/pgsql/initdb_postgresql.log
systemctlを使ってPostgreSQLサービスを起動してください。
- sudo systemctl start postgresql
それから、再びsystemctlを使用して、サーバー起動時にサービスを自動起動するように設定してください。
- sudo systemctl enable postgresql
これによって、以下の出力が得られます。
Created symlink /etc/systemd/system/multi-user.target.wants/postgresql.service → /usr/lib/systemd/system/postgresql.service.
PostgreSQLが稼働しているので、ロールの使用方法を学び、過去に使用したことがある同様のデータベース管理システムとの違いを理解していきましょう。
ステップ3 – PostgreSQLのロールとデータベースの使用
PostgreSQLは、クライアントの認証と認可を処理するために「ロール」という概念を使用しています。これは一部の点で通常のUnixスタイルのアカウントに似ていますが、Postgresではユーザーとグループを区別せず、代わりにより柔軟な「ロール」という用語を使用しています。
インストール時に、Postgresは ident 認証を使用するように設定されています。これは、Postgresのロールを一致するUnix/Linuxシステムアカウントに関連付けることを意味します。Postgres内にロールが存在する場合、同じ名前のUnix/Linuxのユーザー名でそのロールとしてサインインすることができます。
インストール手順によって、デフォルトのpostgresロールに関連付けられたpostgresというユーザーアカウントが作成されました。PostgreSQLを使用するためには、そのアカウントにログインすることができます。
このアカウントを使用して、PostgreSQLのプロンプトにアクセスする方法はいくつかあります。
“ポストグレスアカウントに切り替える。”
サーバー上で「ポストグレスのアカウントに切り替えるために、以下のように入力してください。」
- sudo -i -u postgres
すぐにPostgresのプロンプトにアクセスするには、以下を入力してください。
- psql
これにより、PostgreSQLのプロンプトにログインされ、ここからデータベース管理システムと自由にやり取りすることができます。
ポストグレSQLプロンプトを終了するには、入力して終了します。
- \q
これにより、あなたはポストグレスのアカウントのLinuxのコマンドプロンプトに戻ることができます。次のコマンドを使用して元のアカウントに戻ってください。
- exit
アカウントを切り替えずにPostgresのプロンプトにアクセスする方法を教えてください。
sudoを使用して、postgresアカウントで直接コマンドを実行することもできます。
例えば、前の例では、まずはpostgresユーザーに切り替えてからpsqlを実行してPostgresプロンプトにアクセスするよう指示されました。代わりに、次のようにsudoを使ってpostgresユーザーとして単一のコマンドpsqlを実行することで、これを1つのステップで行うこともできます。
- sudo -u postgres psql
これにより、中間のbashシェルなしで直接Postgresにログインします。
再び、インタラクティブなPostgresセッションを終了するには、入力することで退出することができます。
- \q
このステップでは、psqlプロンプトにアクセスするためにpostgresアカウントを使用しました。しかし、多くのユースケースでは1つ以上のPostgresロールが必要です。新しいロールを設定する方法を学ぶために続けて読んでください。
ステップ4- 新しい役割の作成
現在、データベース内ではPostgresの役割のみが設定されています。コマンドラインでcreateroleコマンドを使用して新しい役割を作成できます。–interactiveフラグを使用すると、新しい役割の名前を入力するように求められ、またスーパーユーザーの権限を持つかどうかも尋ねられます。
ポストグレスのアカウントでログインしている場合、次のように入力することで新しいユーザーを作成することができます。
- createuser –interactive
もしも、通常のアカウントから切り替える必要なく、各コマンドごとにsudoを使用したい場合は、次のコマンドを入力してください。
- sudo -u postgres createuser –interactive
このスクリプトは、いくつかの選択肢を提示し、あなたの回答に基づいて必要なPostgresのコマンドを実行して、指定した仕様に合うユーザーを作成します。このチュートリアルでは、sammyという名前のロールを作成し、yと求められた場合にはスーパーユーザー特権を付与してください。
Enter name of role to add: sammy Shall the new role be a superuser? (y/n) y
追加のフラグを指定することで、さらに制御を行うことができます。createuserのマンページを参照してオプションを確認してください。
- man createuser
あなたのPostgresのインストールには新しいロールが追加されましたが、まだデータベースは追加されていません。次のセクションではこのプロセスについて説明します。
ステップ5 — 新しいデータベースを作成する
Postgresの認証システムのデフォルト設定による別の仮定は、ログインに使用される役割に対して、その役割と同じ名前のデータベースにアクセスできることです。
前のセクションで作成したユーザーが「sammy」という名前の場合、そのロールはデフォルトで「sammy」という名前のデータベースに接続を試みます。createdbコマンドでそのようなデータベースを作成することができます。
もしもあなたがポストグレスアカウントにログインしている場合、以下のように入力します。
- createdb sammy
もしも、通常のアカウントを切り替えずにすべてのコマンドにsudoを使用したい場合は、次のように入力します。
- sudo -u postgres createdb sammy
この柔軟性により、必要に応じて複数のデータベースを作成するためのさまざまな選択肢が用意されています。
新しいデータベースを作成しましたので、新しい権限でログインしてください。
ステップ6 – 新しいロールでPostgresプロンプトを開く
identベースの認証でログインするには、Postgresの役割とデータベースと同じ名前を持つLinuxユーザーが必要です。
Linuxユーザーが一致しない場合は、adduserコマンドを使用してユーザーを作成することができます。これは、非ルートアカウントでsudo権限を持っている場合に実行する必要があります(postgresユーザーとしてログインしているわけではありません)。
- sudo adduser sammy
新しいアカウントが利用可能になると、切り替えた後に最初に「タイプする」としてデータベースに接続することができます。
- sudo -i -u sammy
- psql
それか、直接こちらで行うこともできます。
- sudo -u sammy psql
このコマンドを使用すれば、自動的にログインされます。
もしユーザーに別のデータベースへ接続してもらいたい場合は、-dフラグを含めてデータベースを指定する方法があります。例えば、こうです:
- psql -d sammy
ログインした後、次のように入力することで現在の接続情報を確認することができます。
- \conninfo
以下の出力が表示されます。
You are connected to database “sammy” as user “sammy” via socket in “/var/run/postgresql” at port “5432”.
デフォルト以外のデータベースに接続する場合や、デフォルト以外のユーザーで接続する場合には、これが便利です。
データベースに接続したら、テーブルの作成と削除を試すことができます。
ステップ7 – テーブルの作成と削除
PostgreSQLのデータベースシステムに接続する方法を知った今、いくつかの基本的なPostgresの管理タスクを学ぶことができます。
まず、いくつかのデータを格納するためのテーブルを作成します。例として、遊び場の装置を記述するテーブルを作ります。
このコマンドの基本的な構文は次の通りです。
CREATE TABLE table_name (
column_name1 col_type (field_length) column_constraints,
column_name2 col_type (field_length),
column_name3 col_type (field_length)
);
これらのコマンドは、表に名前を付け、列と列の型、フィールドデータの最大長さを定義します。また、オプションで各列にテーブル制約を追加することもできます。
デモンストレーション目的で、以下のようなテーブルを作成してください。 (Demonosutoreeshon mokuteki de, ika no you na teeburu o sakusei shite kudasai.)
- CREATE TABLE playground (
- equip_id serial PRIMARY KEY,
- type varchar (50) NOT NULL,
- color varchar (25) NOT NULL,
- location varchar(25) check (location in (‘north’, ‘south’, ‘west’, ‘east’, ‘northeast’, ‘southeast’, ‘southwest’, ‘northwest’)),
- install_date date
- );
このコマンドは、遊び場の設備を在庫管理するためのテーブルを作成します。まず、設備IDがありますが、これはシリアルタイプです。このデータ型は自動的に増加する整数です。また、この列にはPRIMARY KEYの制約が設定されており、値は一意であり、nullではないことを意味しています。
2つの列(equip_idとinstall_date)に対して、コマンドではフィールドの長さが指定されていません。これは、一部の列のタイプにおいては、タイプによって長さが暗示されているため、設定する必要がないためです。
次の2行は、それぞれ機器の種類と色の列を作成します。どちらの列も空にすることはできません。それらの後ろにある行は、場所の列を作成し、値が8つの可能な値の1つであることを要求する制約を設定します。最後の行は、機器を設置した日付を記録する日付の列を作成します。
「タイプすることで、新しいテーブルを見ることができます。」
- \d
次の出力は以下のようになります。
List of relations Schema | Name | Type | Owner ——–+————————-+———-+——- public | playground | table | sammy public | playground_equip_id_seq | sequence | sammy (2 rows)
あなたの遊び場のテーブルがここにありますが、playground_equip_id_seqという名前のものもあります。これはシーケンス型のテーブルです。これは、equip_id列に指定したシリアル型の表現です。このシーケンスは、次の番号を自動的に追跡し、この型の列のために自動的に作成されます。
シーケンス抜きでテーブルだけ見たい場合は、次のように入力できます。
- \dt
次の結果が得られます。 (Tsugi no kekka ga eraremasu.)
List of relations Schema | Name | Type | Owner ——–+————+——-+——- public | playground | table | sammy (1 row)
このステップでは、サンプルテーブルを作成しました。次のステップでは、そのテーブルにエントリを追加し、クエリを実行し、削除することを試してみます。
ステップ8 — テーブルにデータを追加、クエリ、削除する
テーブルを持っているので、データを挿入することができます。
例えば、追加したいテーブルを呼び出し、列の名前を指定し、それぞれの列にデータを提供することで、スライドとブランコを追加するスライドを追加する方法は、次のようになります。
- INSERT INTO playground (type, color, location, install_date) VALUES (‘slide’, ‘blue’, ‘south’, ‘2017-04-28’);
- INSERT INTO playground (type, color, location, install_date) VALUES (‘swing’, ‘yellow’, ‘northwest’, ‘2018-08-16’);
データを入力する際には、いくつかの一般的なミスを避けるために気を付ける必要があります。まず、列名を引用符で囲まず、列の値のみを引用符で囲んでください。
考慮すべき別のポイントは、equip_id列に値を入力しないことです。これは、テーブルの新しい行が作成されるたびに自動的に生成されるためです。
タイプして追加した情報を取得してください。
- SELECT * FROM playground;
以下の出力が表示されるでしょう。
equip_id | type | color | location | install_date ———-+——-+——–+———–+————– 1 | slide | blue | south | 2017-04-28 2 | swing | yellow | northwest | 2018-08-16 (2 rows)
こちらでは、あなたのequip_idが正常に入力され、他のすべてのデータが適切に整理されていることがわかります。
遊び場の滑り台が壊れて取り外さなければならない場合、テーブルの行もタイピングによって取り除くことができます。
- DELETE FROM playground WHERE type = ‘slide’;
テーブルを再度照会してください。
- SELECT * FROM playground;
以下のものが見えるでしょう。
equip_id | type | color | location | install_date ———-+——-+——–+———–+————– 2 | swing | yellow | northwest | 2018-08-16 (1 row)
スライドがテーブルから外れていることに気付いてください。
あなたがテーブルに項目を追加したり削除したりしたので、列の追加と削除も試してみることができます。
Step 9 — テーブルへの列の追加と削除
テーブルを作成した後、列を追加または削除することで変更することができます。 装置ごとに最後のメンテナンス訪問を表示するために、次のように入力して列を追加してください。
- ALTER TABLE playground ADD last_maint date;
もう一度テーブルの情報を確認すると、新しい列が追加されていることがわかりますが、データは入力されていません。
- SELECT * FROM playground;
あなたは以下を見ることができます。
equip_id | type | color | location | install_date | last_maint ———-+——-+——–+———–+————–+———— 2 | swing | yellow | northwest | 2018-08-16 | (1 row)
もし、あなたが自分の作業チームがメンテナンス履歴を追跡するために別のツールを使用していることに気付いた場合、次のように入力して列を削除することができます:
- ALTER TABLE playground DROP last_maint;
最後のメンテナンスカラムとその中にある値を削除しますが、他のデータはそのまま保持されます。
最終ステップでは、列を追加および削除した後で、既存のデータを更新することができます。
ステップ10 – テーブル内のデータを更新します。
これまでに、テーブルにレコードを追加する方法と削除する方法を学びましたが、このチュートリアルでは既存のエントリの修正方法についてはまだ説明されていません。
既存のエントリーの値を更新するには、必要なレコードをクエリして、使用したい値にカラムを設定することができます。テーブル内のすべてのスウィングに一致するスウィングレコードをクエリして、その色を赤に変更することができます。
- UPDATE playground SET color = ‘red’ WHERE type = ‘swing’;
データを再度クエリして操作が成功したことを確認できます。
- SELECT * FROM playground;
以下をご覧いただけます:
equip_id | type | color | location | install_date ———-+——-+——-+———–+————– 2 | swing | red | northwest | 2010-08-16 (1 row)
ご覧のように、スライドは今赤色として登録されています。
結論
あなたは現在、Rocky Linux 9 サーバー上に PostgreSQL をセットアップしました。しかし、Postgres にはまださらに学ぶべきことがあります。以下は、Postgres の使用方法をカバーしたいくつかの追加ガイドです。
- A comparison of relational database management systems
- Learn about running queries in PostgreSQL