前書き

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

  • PostgreSQL *またはPostgresは、SQLクエリ言語の実装を提供するリレーショナルデータベース管理システムです。 多くの小規模および大規模プロジェクトで人気のある選択肢であり、標準に準拠し、信頼できるトランザクションや読み取りロックなしの同時実行性などの多くの高度な機能を備えているという利点があります。

このガイドでは、CentOS 7にPostgresをインストールする方法を示し、基本的な使用方法について説明します。

インストール

CentOSのデフォルトのリポジトリにはPostgresパッケージが含まれているため、 `+ yum +`パッケージシステムを使用して手間をかけずにインストールできます。

postgresql-serverパッケージと「contrib」パッケージをインストールします。これにより、追加のユーティリティと機能が追加されます。

sudo yum install postgresql-server postgresql-contrib

`+ y +`で応答して、プロンプトを受け入れます。

ソフトウェアがインストールされたので、使用する前にいくつかの手順を実行する必要があります。

新しいPostgreSQLデータベースクラスターを作成します。

sudo postgresql-setup initdb

デフォルトでは、PostgreSQLはパスワード認証を許可しません。 ホストベース認証(HBA)構成を編集することにより、これを変更します。

お気に入りのテキストエディターでHBA構成を開きます。 viを使用します。

sudo vi /var/lib/pgsql/data/pg_hba.conf

ファイルの下部近くにある次のような行を見つけます。

pg_hba.confの抜粋(オリジナル)

host    all             all             127.0.0.1/32            ident
host    all             all             ::1/128                 ident

次に、「ident」を「md5」に置き換えて、次のようにします。

pg_hba.confの抜粋(更新)

host    all             all             127.0.0.1/32            md5
host    all             all             ::1/128                 md5

保存して終了。 PostgreSQLはパスワード認証を許可するように設定されました。

PostgreSQLを起動して有効にします。

sudo systemctl start postgresql
sudo systemctl enable postgresql

PostgreSQLを使用する準備ができました。 それがどのように機能するのか、そしてあなたが使用したかもしれない同様のデータベース管理システムとどのように異なるのかを検討することができます。

PostgreSQLのロールとデータベースの使用

デフォルトでは、Postgresは「ロール」と呼ばれる概念を使用して認証と承認を支援します。 これらはいくつかの点で通常のUnixスタイルのアカウントに似ていますが、Postgresはユーザーとグループを区別せず、代わりに「ロール」というより柔軟な用語を好みます。

インストール時に、Postgresは「ident」認証を使用するように設定されます。つまり、Postgresロールを一致するUnix / Linuxシステムアカウントに関連付けます。 Postgresロールが存在する場合、関連付けられたLinuxシステムアカウントにログインすることでログインできます。

インストール手順により、デフォルトのPostgresロールに関連付けられた `+ postgres +`というユーザーアカウントが作成されました。 Postgresを使用するには、そのアカウントにログインする必要があります。 次のように入力して、それを行うことができます。

sudo -i -u postgres

通常のユーザーパスワードを求められ、その後、 `+ postgres +`ユーザーのシェルプロンプトが表示されます。

次のように入力すると、すぐにPostgresプロンプトが表示されます。

psql

自動ログインされ、データベース管理システムとすぐに対話できるようになります。

ただし、他のロールとデータベースの使用方法について少し説明し、どのユーザーとデータベースを使用するかについてある程度の柔軟性を持たせるようにします。

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

\q

これで、 `+ postgres +`ユーザーコマンドプロンプトに戻るはずです。

新しい役割を作成する

+ postgres + Linuxアカウントから、データベースシステムにログインすることができます。 ただし、追加の役割を作成する方法も示します。 + postgres + Linuxアカウントは、Postgres管理ロールに関連付けられており、ユーザーとデータベースを作成するためのいくつかのユーティリティにアクセスできます。

次のように入力して、新しいロールを作成できます。

createuser --interactive

これは基本的に、正しいPostgresコマンドを呼び出して仕様に合ったユーザーを作成するインタラクティブなシェルスクリプトです。 ロールの名前と、スーパーユーザーにする必要があるかどうかという2つの質問のみが表示されます。 いくつかの追加フラグを渡すことで、より多くの制御を取得できます。 `+ man +`ページを見てオプションを確認してください:

man createuser

新しいデータベースを作成する

Postgresがデフォルトで設定される方法(一致するシステムアカウントによって要求される役割の認証)には、接続する役割に対して一致するデータベースが存在するという前提もあります。

そのため、「+ test1 」というユーザーがいる場合、そのロールはデフォルトで「 test1 +」というデータベースに接続しようとします。

`+ postgres +`ユーザーとしてこのコマンドを呼び出すだけで適切なデータベースを作成できます:

createdb

新しいユーザーでPostgresに接続する

`+ test1 `というLinuxシステムアカウント( ` sudo adduser test1 `と入力して作成できます)があり、 ` test1 +`というPostgresロールとデータベースを作成したと仮定します。

次のように入力して、Linuxシステムアカウントに変更できます。

sudo -i -u

次に、次のように入力して、 + test1 + Postgresロールとして `+ test1 +`データベースに接続できます。

psql

これは、すべてのコンポーネントが構成されていると仮定して自動的にログインします。

ユーザーが別のデータベースに接続するようにしたい場合は、次のようにデータベースを指定して接続できます(コマンドプロンプトに「+ \ q +」を入力してください)。

psql -d

次のように入力すると、ログインしているPostgresユーザーと現在接続しているデータベースに関する情報を取得できます。

\conninfo
Output:You are connected to database "postgres" as user "postgres" via socket in "/var/run/postgresql" at port "5432".

これは、デフォルト以外のデータベースまたはデフォルト以外のユーザーに接続している場合、現在の設定を思い出させるのに役立ちます。

テーブルの作成と削除

PostgreSQLデータベースシステムへの接続方法がわかったところで、いくつかの基本的なタスクを完了する方法について説明します。

まず、データを保存するためのテーブルを作成しましょう。 遊具を説明するテーブルを作成しましょう。

このコマンドの基本的な構文は次のようなものです。

CREATE TABLE  (
    () ,
    (),
    ()
);

ご覧のように、テーブルに名前を付けてから、必要な列、列データ型、フィールドデータの最大長を定義します。 オプションで、各列にテーブル制約を追加することもできます。

Postgresでテーブルを作成および管理する方法の詳細をご覧ください。ここに。

この目的のために、次のような単純なテーブルを作成します。

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

所有している機器の目録を作成する遊び場テーブルを作成しました。 これは、「+ serial 」タイプの機器IDで始まります。 このデータ型は自動インクリメント整数です。 この列に ` primary key +`の制約を与えました。これは、値が一意であり、nullではないことを意味します。

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

次に、機器の種類と色の列を指定します。それぞれを空にすることはできません。 次に、場所の列を作成し、値が8つの可能な値のいずれかである必要がある制約を作成します。 最後の列は、機器を設置した日付を記録する日付列です。

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

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

ご覧のとおり、プレイグラウンドテーブルがありますが、タイプが「+ sequence 」の「 playground_equip_id_seq 」と呼ばれるものもあります。 これは、 ` equip_id +`カラムに与えた「シリアル」タイプの表現です。 これにより、シーケンス内の次の番号が追跡されます。

テーブルのみを表示する場合は、次のように入力できます。

\dt
Output:           List of relations
Schema |    Name    | Type  |  Owner
--------+------------+-------+----------
public | playground | table | postgres
(1 row)

テーブル内のデータの追加、クエリ、および削除

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

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

INSERT INTO playground (type, color, location, install_date) VALUES ('slide', 'blue', 'south', '2014-04-28');
INSERT INTO playground (type, color, location, install_date) VALUES ('swing', 'yellow', 'northwest', '2010-08-16');

いくつかのことに気付くはずです。 まず、列名は引用符で囲まないでくださいが、入力する列の_values_には引用符が必要です。

もう1つ注意すべきことは、 `+ equip_id +`カラムに値を入力しないことです。 これは、テーブルの新しい行が作成されるたびに、これが自動生成されるためです。

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

SELECT * FROM playground;
Output: equip_id | type  | color  | location  | install_date
----------+-------+--------+-----------+--------------
       1 | slide | blue   | south     | 2014-04-28
       2 | swing | yellow | northwest | 2010-08-16
(2 rows)

ここで、「+ equip_id +」が正常に入力され、他のすべてのデータが正しく構成されていることがわかります。

スライドが壊れてプレイグラウンドから削除した場合、次のように入力してテーブルから行を削除することもできます。

DELETE FROM playground WHERE type = 'slide';

テーブルを再度クエリすると、スライドがテーブルの一部ではなくなっていることがわかります。

SELECT * FROM playground;
Output: equip_id | type  | color  | location  | install_date
----------+-------+--------+-----------+--------------
       2 | swing | yellow | northwest | 2010-08-16
(1 row)

テーブルから列を追加および削除する方法

追加の列を追加するためにテーブルを作成した後にテーブルを変更したい場合、簡単にできます。

次のように入力して、各機器の最後のメンテナンス訪問を示す列を追加できます。

ALTER TABLE playground ADD last_maint date;

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

SELECT * FROM playground;
Output: equip_id | type  | color  | location  | install_date | last_maint
----------+-------+--------+-----------+--------------+------------
       2 | swing | yellow | northwest | 2010-08-16   |
(1 row)

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

ALTER TABLE playground DROP last_maint;

テーブル内のデータを更新する方法

レコードをテーブルに追加する方法と削除する方法は知っていますが、既存のエントリを変更する方法についてはまだ説明していません。

既存のエントリの値を更新するには、必要なレコードをクエリし、使用する値に列を設定します。 「swing」レコードを照会して(これはテーブル内の_every_ swingと一致します)、色を「赤」に変更できます。 これは、ペイントジョブを与えた場合に便利です。

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

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

SELECT * FROM playground;
Output: equip_id | type  | color | location  | install_date
----------+-------+-------+-----------+--------------
       2 | swing | red   | northwest | 2010-08-16
(1 row)

ご覧のとおり、スライドは赤で登録されています。