序章

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

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

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

前提条件

このチュートリアルに従うには、次のものが必要です。

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

Postgresは、デフォルトのCentOSリポジトリを使用してインストールできます。 ただし、このチュートリアルの執筆時点では、CentOS7Baseリポジトリで利用可能なバージョンは廃止されています。 したがって、このチュートリアルでは公式のPostgresリポジトリを使用します。

新しいリポジトリの設定に進む前に、次の検索を除外してください。 postgresql CentOS-Baseリポジトリからのパッケージ。 そうしないと、依存関係が解決される可能性があります postgresql ベースリポジトリによって提供されます。

好みのテキストエディタを使用してリポジトリ設定ファイルを開きます。 このチュートリアルでは、 vim:

  1. sudo vi /etc/yum.repos.d/CentOS-Base.repo

を見つける [base][updates] セクション、を押して挿入モードに入ります i、を挿入します exclude=postgresql* 両方のセクションの行。 その結果、ファイルは次のようになり、新しい行が強調表示されます。

/etc/yum.repos.d/CentOS-Base.repo
...
[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

exclude=postgresql*

#released updates
[updates]
name=CentOS-$releasever - Updates
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
exclude=postgresql*
...

終了したら、を押します ESC 挿入モードを終了するには、 :wqENTER ファイルを保存して終了します。 テキストエディタviとその後継のvimの詳細については、クラウドサーバーへのVimテキストエディタのインストールと使用チュートリアルをご覧ください。

次に、CentOSの公式PostgreSQLリポジトリを使用してリポジトリ構成パッケージをインストールします。

  1. sudo yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm

プロンプトが表示されたら、インストールを確認します y.

PostgreSQLリポジトリには、利用可能なすべてのPostgreSQLリリースの情報が含まれています。 次のコマンドを使用して、使用可能なすべてのパッケージとバージョンを確認できます。

  1. yum list postgresql*

目的のバージョンのPostgreSQLを選択してインストールします。 このガイドでは、PostgreSQL11リリースを使用します。

PostgreSQLサーバーをインストールするには、次のコマンドを使用します。

  1. sudo yum install postgresql11-server

インストールプロセス中に、次のようなプロンプトでGPGキーのインポートについて尋ねられます。

...
Importing GPG key 0x442DF0F8:
 Userid     : "PostgreSQL RPM Building Project <[email protected]>"
 Fingerprint: 68c9 e2b9 1a37 d136 fe74 d176 1f16 d2e1 442d f0f8
 Package    : pgdg-redhat-repo-42.0-5.noarch (installed)
 From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
Is this ok [y/N]:

で確認してください y これで、インストールを完了できます。

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

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

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

新しいデータベースを作成するには、template1データベースが必要です。 そこに保存されているものはすべて、作成時に新しいデータベースに配置されます。 A postgres databaseは、ユーザー、ユーティリティ、およびサードパーティアプリケーションが使用するために設計されたデフォルトのデータベースです。

を使用して新しいPostgreSQLデータベースクラスタを作成します initdb:

  1. sudo /usr/pgsql-11/bin/postgresql-11-setup initdb

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

Output
Initializing database ... OK

次に、systemctlを使用してPostgreSQLを起動して有効にします。

  1. sudo systemctl start postgresql-11
  2. sudo systemctl enable postgresql-11

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

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

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

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

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

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

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

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

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

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

  1. sudo -i -u postgres

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

  1. psql

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

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

  1. \q

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

  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 ユーザーを作成し、スーパーユーザー権限を付与します。

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

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

  1. man createuser

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

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

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

つまり、前のセクションで作成したユーザーが sammy と呼ばれる場合、そのロールは、この名前も呼ばれるデータベースへの接続を試みます。 sammy デフォルトでは。 あなたは適切なデータベースを作成することができます createdb 指図。

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

  1. createdb sammy

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

  1. sudo -u postgres createdb sammy

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

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

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

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

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

  1. sudo adduser sammy

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

  1. sudo -i -u sammy
  2. psql

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

  1. sudo -u sammy psql

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

ユーザーが別のデータベースに接続するようにする場合は、次のようにデータベースを指定することで接続できます。

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

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

あなたは私たちのでもっと学ぶことができますクラウドサーバー上のPostgreSQLでテーブルを作成、削除、管理する方法チュートリアル。

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

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で始まります。 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)

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

結論

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