序章

リレーショナルデータベース管理システムは、多くのWebサイトやアプリケーションの重要なコンポーネントです。 これらは、情報を保存、整理、およびアクセスするための構造化された方法を提供します。

PostgreSQL は、Postgresとも呼ばれ、SQLとしてよく知られている構造化クエリ言語の実装を提供するリレーショナルデータベース管理システムです。 これは、大小を問わず多くの人気のあるプロジェクトで使用されており、標準準拠であり、信頼性の高いトランザクション読み取りロックなしの同時実行性などの多くの高度な機能を備えています。

このガイドに従うことで、最新バージョンのPostgreSQLをCentOS8サーバーにインストールします。

前提条件

このチュートリアルを完了するには、CentOS8を実行しているサーバーが必要です。 このサーバーには、管理者権限を持つroot以外のユーザーと、で構成されたファイアウォールが必要です。 firewalld. これを設定するには、CentOS8初期サーバーセットアップガイドを参照してください。

ステップ1—PostgreSQLのインストール

PostgreSQLはCentOS8のデフォルトのAppStreamソフトウェアリポジトリから入手でき、インストールできるバージョンは複数あります。 インストールするバージョンに一致するパッケージと依存関係の適切なコレクションを有効にすることで、これらのバージョンから選択できます。各コレクションは、モジュールストリームと呼ばれます。

DNFでは、CentOS8のデフォルトのパッケージマネージャーであるmodules は、より大きなアプリケーションを構成するRPMパッケージの特別なコレクションです。 これは、パッケージとその依存関係のインストールをユーザーにとってより直感的にすることを目的としています。

利用可能なストリームを一覧表示します postgresql モジュールを使用して dnf 指図:

  1. dnf module list postgresql
Output
postgresql 9.6 client, server [d] PostgreSQL server and client module postgresql 10 [d] client, server [d] PostgreSQL server and client module postgresql 12 client, server PostgreSQL server and client module

この出力では、AppStreamリポジトリから利用できるPostgreSQLの3つのバージョンがあることがわかります。 9.6, 10、 と 12. Postgresバージョン10を提供するストリームは、 [d] それに続いて。 そのバージョンをインストールしたい場合は、実行することができます sudo dnf install postgresql-server 次のステップに進みます。 ただし、バージョン10は引き続き維持されていますが、このチュートリアルでは、この記事の執筆時点で最新のリリースであるPostgresバージョン12をインストールします。

PostgreSQLバージョン12をインストールするには、そのバージョンのモジュールストリームを有効にする必要があります。 モジュールストリームを有効にすると、デフォルトストリームを上書きし、有効なストリームに関連するすべてのパッケージをシステムで使用できるようにします。 システムで同時に有効にできるのは、特定のモジュールの1つのストリームのみであることに注意してください。

Postgresバージョン12のモジュールストリームを有効にするには、次のコマンドを実行します。

  1. sudo dnf module enable postgresql:12

プロンプトが表示されたら、を押します y その後 ENTER ストリームを有効にすることを確認するには:

Output
==================================================================== Package Architecture Version Repository Size ==================================================================== Enabling module streams: postgresql 12 Transaction Summary ==================================================================== Is this ok [y/N]: y

バージョン12のモジュールストリームを有効にした後、 postgresql-server PostgreSQL 12とそのすべての依存関係をインストールするためのパッケージ:

  1. sudo dnf install postgresql-server

プロンプトが表示されたら、を押してインストールを確認します y それから ENTER:

Output
. . . Install 4 Packages Total download size: 16 M Installed size: 62 M Is this ok [y/N]: y

ソフトウェアがインストールされたので、いくつかの初期化手順を実行して、PostgreSQL用の新しいデータベースクラスターを準備します。

ステップ2—新しいPostgreSQLデータベースクラスターを作成する

テーブルの作成とデータのロードを開始する前に、新しいPostgreSQLデータベースクラスターを作成する必要があります。 データベースクラスターは、単一のサーバーインスタンスによって管理されるデータベースのコレクションです。 データベースクラスターの作成は、データベースデータが配置されるディレクトリの作成、共有カタログテーブルの生成、およびデータベースクラスターの作成で構成されます。 template1postgres データベース。

template1 database は、新しいデータベースを作成するために使用される種類のテンプレートです。 に保存されているすべてのもの template1、自分で追加したオブジェクトでも、作成時に新しいデータベースに配置されます。 The postgres databaseは、ユーザー、ユーティリティ、およびサードパーティアプリケーションが使用するために設計されたデフォルトのデータベースです。

前の手順でインストールしたPostgresパッケージには、次のような便利なスクリプトが付属しています。 postgresql-setup これは、低レベルのデータベースクラスター管理に役立ちます。 データベースクラスターを作成するには、次を使用してスクリプトを実行します sudo--initdb オプション:

  1. sudo postgresql-setup --initdb

次の出力が表示されます。

Output
* Initializing database in '/var/lib/pgsql/data' * Initialized, logs are in /var/lib/pgsql/initdb_postgresql.log

次に、systemctlを使用してPostgreSQLサービスを開始します。

  1. sudo systemctl start postgresql

次に、 systemctl サーバーが起動するたびにサービスを起動できるようにするには、もう一度次の手順を実行します。

  1. sudo systemctl enable postgresql

これにより、次の出力が得られます

Output
Created symlink /etc/systemd/system/multi-user.target.wants/postgresql.service → /usr/lib/systemd/system/postgresql.service.

PostgreSQLが稼働しているので、ロールを使用して、Postgresがどのように機能し、過去に使用した可能性のある同様のデータベース管理システムとどのように異なるかを学習します。

ステップ3—PostgreSQLの役割とデータベースを使用する

PostgreSQLはrolesと呼ばれる概念を使用して、クライアントの認証と承認を処理します。 これらはいくつかの点で通常のUnixスタイルのアカウントに似ていますが、Postgresはユーザーとグループを区別せず、代わりにより柔軟な用語の役割を好みます。

インストール時に、Postgresは ident authentication を使用するように設定されます。つまり、Postgresの役割を一致するUnix/Linuxシステムアカウントに関連付けます。 Postgres内に役割が存在する場合、同じ名前のUnix/Linuxユーザー名がその役割としてサインインできます。

インストール手順により、デフォルトに関連付けられたpostgresというユーザーアカウントが作成されました postgres 役割。 PostgreSQLを使用するには、そのアカウントにログインできます。

このアカウントを使用してPostgreSQLプロンプトにアクセスする方法はいくつかあります。

postgresアカウントに切り替えます

次のように入力して、サーバーのpostgresアカウントに切り替えます。

  1. sudo -i -u postgres

次のように入力すると、Postgresプロンプトにすぐにアクセスできます。

  1. psql

これによりPostgreSQLプロンプトにログインし、ここからデータベース管理システムをすぐに自由に操作できます。

次のように入力して、PostgreSQLプロンプトを終了します。

  1. \q

これにより、postgresアカウントのLinuxコマンドプロンプトに戻ります。 次に、次のようにして元のアカウントに戻ります。

  1. exit

アカウントを切り替えずにPostgresプロンプトにアクセスする

postgresアカウントで直接コマンドを実行することもできます sudo.

たとえば、前の例では、最初に postgres ユーザーに切り替えてから実行することにより、Postgresプロンプトにアクセスするように指示されました。 psql Postgresプロンプトを開きます。 別の方法として、単一のコマンドを実行することにより、これを1つのステップで実行できます。 psql postgresユーザーとして sudo、 このような:

  1. sudo -u postgres psql

これにより、仲介なしでPostgresに直接ログインできます bash シェル。

ここでも、次のように入力して、インタラクティブなPostgresセッションを終了できます。

  1. \q

このステップでは、postgresアカウントを使用して psql 促す。 ただし、多くのユースケースでは複数のPostgresロールが必要です。 新しい役割を構成する方法を学ぶために読んでください。

ステップ4—新しい役割を作成する

現在、データベース内でpostgresロールが構成されているだけです。 コマンドラインから新しい役割を作成できます。 createrole 指図。 The --interactive flagは、新しい役割の名前の入力を求め、スーパーユーザー権限が必要かどうかも尋ねます。

postgres アカウントとしてログインしている場合は、次のように入力して新しいユーザーを作成できます。

  1. createuser --interactive

代わりに、 sudo 通常のアカウントから切り替えずにコマンドごとに、次のように入力します。

  1. sudo -u postgres createuser --interactive

スクリプトはいくつかの選択を促し、応答に基づいて、必要なPostgresコマンドを実行して、指定したユーザーを作成します。 このチュートリアルでは、 sammy という名前のロールを作成し、次のように入力してスーパーユーザー権限を付与します。 y プロンプトが表示されたら:

Output
Enter name of role to add: sammy Shall the new role be a superuser? (y/n) y

いくつかの追加のフラグを渡すことで、より詳細な制御を取得できます。 を見てオプションをチェックしてください man のページ createuser:

  1. man createuser

Postgresのインストールに新しい役割が追加されましたが、データベースはまだ追加されていません。 次のセクションでは、このプロセスについて説明します。

ステップ5—新しいデータベースの作成

Postgres認証システムがデフォルトで行うもう1つの前提は、ログインに使用されるすべてのロールについて、そのロールにはアクセス可能な同じ名前のデータベースがあるということです。

これは、前のセクションで作成したユーザーが sammy と呼ばれる場合、そのロールは、このデータベースにも接続しようとすることを意味します。 sammy デフォルトでは。 あなたはそのようなデータベースを作成することができます createdb 指図。

postgres アカウントとしてログインしている場合は、次のように入力します。

  1. createdb sammy

代わりに、 sudo 通常のアカウントから切り替えずにコマンドごとに、次のように入力します。

  1. sudo -u postgres createdb sammy

この柔軟性により、必要に応じてデータベースを作成するための複数のパスが提供されます。

新しいデータベースを作成したので、新しい役割でデータベースにログインします。

ステップ6—新しい役割でPostgresプロンプトを開く

IDベースの認証でログインするには、Postgresの役割およびデータベースと同じ名前のLinuxユーザーが必要です。

一致するLinuxユーザーが利用できない場合は、 adduser 指図。 これは、root以外のアカウントから行う必要があります。 sudo 特権(つまり、 postgres ユーザーとしてログインしていない):

  1. sudo adduser sammy

この新しいアカウントが利用可能になったら、最初に次のように入力して、切り替えてからデータベースに接続できます。

  1. sudo -i -u sammy
  2. psql

または、これをインラインで実行できます。

  1. sudo -u sammy psql

このコマンドは自動的にログインします。

ユーザーが別のデータベースに接続するようにしたい場合は、 -d 次のように、フラグを立ててデータベースを指定します。

  1. psql -d postgres

ログインすると、次のように入力して現在の接続情報を確認できます。

  1. \conninfo

これにより、次の出力が表示されます。

Output
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)
);

これらのコマンドは、テーブルに名前を付けてから、列、列タイプ、およびフィールドデータの最大長を定義します。 オプションで、各列にテーブル制約を追加することもできます。

デモンストレーションの目的で、次のような単純なテーブルを作成します。

  1. CREATE TABLE playground (
  2. equip_id serial PRIMARY KEY,
  3. type varchar (50) NOT NULL,
  4. color varchar (25) NOT NULL,
  5. location varchar(25) check (location in ('north', 'south', 'west', 'east', 'northeast', 'southeast', 'southwest', 'northwest')),
  6. install_date date
  7. );

このコマンドは、遊具をインベントリするテーブルを作成します。 機器IDで始まります。 serial タイプ。 このデータ型は自動インクリメント整数です。 この列に次の制約も与えました PRIMARY KEY、これは、値が一意であり、nullであってはならないことを意味します。

2つの列について(equip_idinstall_date)、コマンドはフィールド長を指定しません。 これは、長さがタイプによって暗示されるため、一部の列タイプは設定された長さを必要としないためです。

次の2行は、機器の列を作成します typecolor それぞれ、それぞれを空にすることはできません。 これらの後の行は、 location 列と、値が8つの可能な値の1つである必要がある制約。 最後の行は、機器を設置した日付を記録する日付列を作成します。

次のように入力すると、新しいテーブルが表示されます。

  1. \d

これにより、次の出力が表示されます。

Output
List of relations Schema | Name | Type | Owner --------+-------------------------+----------+------- public | playground | table | sammy public | playground_equip_id_seq | sequence | sammy (2 rows)

あなたの遊び場のテーブルはここにありますが、 playground_equip_id_seq それはタイプです sequence. これは、 serial あなたがあなたに与えたタイプ equip_id 桁。 これにより、シーケンス内の次の番号が追跡され、このタイプの列に対して自動的に作成されます。

シーケンスなしでテーブルだけを表示したい場合は、次のように入力できます。

  1. \dt

これにより、次のようになります。

Output
List of relations Schema | Name | Type | Owner --------+------------+-------+------- public | playground | table | sammy (1 row)

このステップでは、サンプルテーブルを作成しました。 次のステップでは、そのテーブルのエントリの追加、クエリ、および削除を試してみます。

ステップ8—テーブル内のデータの追加、クエリ、および削除

これでテーブルができたので、そこにデータを挿入できます。

例として、追加するテーブルを呼び出し、列に名前を付けてから、次のように各列のデータを提供することにより、スライドとスイングを追加します。

  1. INSERT INTO playground (type, color, location, install_date) VALUES ('slide', 'blue', 'south', '2017-04-28');
  2. INSERT INTO playground (type, color, location, install_date) VALUES ('swing', 'yellow', 'northwest', '2018-08-16');

いくつかの一般的なハングアップを回避するために、データを入力するときに注意する必要があります。 1つは、列名を引用符で囲まないでください。ただし、入力する列の値には引用符が必要です。

覚えておくべきもう一つのことは、あなたがの値を入力しないということです equip_id 桁。 これは、テーブルに新しい行が作成されるたびに自動的に生成されるためです。

次のように入力して、追加した情報を取得します。

  1. SELECT * FROM playground;

次の出力が表示されます。

Output
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 正常に入力され、他のすべてのデータが正しく整理されていること。

遊び場のスライドが壊れて削除する必要がある場合は、次のように入力してテーブルから行を削除することもできます。

  1. DELETE FROM playground WHERE type = 'slide';

テーブルを再度クエリします。

  1. SELECT * FROM playground;

次のように表示されます。

Output
equip_id | type | color | location | install_date ----------+-------+--------+-----------+-------------- 2 | swing | yellow | northwest | 2018-08-16 (1 row)

スライドがテーブルの一部ではなくなったことに注意してください。

テーブルのエントリを追加および削除したので、列の追加と削除を試すことができます。

ステップ9—テーブルへの列の追加と削除

テーブルを作成したら、テーブルを変更して列を追加または削除できます。 次のように入力して、各機器の最後のメンテナンス訪問を示す列を追加します。

  1. ALTER TABLE playground ADD last_maint date;

テーブル情報をもう一度表示すると、新しい列が追加されていることがわかります(ただし、データは入力されていません)。

  1. SELECT * FROM playground;

次のように表示されます。

Output
equip_id | type | color | location | install_date | last_maint ----------+-------+--------+-----------+--------------+------------ 2 | swing | yellow | northwest | 2018-08-16 | (1 row)

列の削除も同様に簡単です。 作業員が別のツールを使用して保守履歴を追跡していることがわかった場合は、次のように入力して列を削除できます。

  1. ALTER TABLE playground DROP last_maint;

これにより、 last_maint 列とその中にあるすべての値。ただし、他のすべてのデータはそのまま残ります。

列を追加および削除したら、最後のステップで既存のデータの更新を試すことができます。

ステップ10—テーブル内のデータを更新する

これまで、テーブルにレコードを追加する方法とレコードを削除する方法を学習しましたが、このチュートリアルでは、既存のエントリを変更する方法についてはまだ説明していません。

必要なレコードを照会し、列を使用する値に設定することにより、既存のエントリの値を更新できます。 クエリを実行できます swing 記録し(これはテーブルのすべてのスイングに一致します)、その色を次のように変更します red:

  1. UPDATE playground SET color = 'red' WHERE type = 'swing';

データを再度クエリすることで、操作が成功したことを確認できます。

  1. SELECT * FROM playground;

次のように表示されます。

Output
equip_id | type | color | location | install_date ----------+-------+-------+-----------+-------------- 2 | swing | red | northwest | 2010-08-16 (1 row)

ご覧のとおり、スライドは現在、 red.

結論

これで、CentOS8サーバーでPostgreSQLがセットアップされました。 ただし、Postgresで学ぶことはまだまだたくさんあります。 Postgresの使用方法をカバーするその他のガイドは次のとおりです。