序章

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

PostgreSQL 、またはPostgresは、SQLクエリ言語の実装を提供するリレーショナルデータベース管理システムです。 これは標準に準拠しており、信頼性の高いトランザクションや読み取りロックのない同時実行性など、多くの高度な機能を備えています。

このガイドは、Ubuntu20.04サーバーにPostgresをインストールする方法を示しています。 また、一般的なデータベース管理のためのいくつかの指示も提供します。

前提条件

このチュートリアルに従うには、 Ubuntu20.04の初期サーバーセットアップガイドに従って構成された1つのUbuntu20.04サーバーが必要です。 この前提条件のチュートリアルを完了すると、サーバーには、sudo権限と基本的なファイアウォールを持つ非rootユーザーが必要になります。

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

UbuntuのデフォルトリポジトリにはPostgresパッケージが含まれているため、これらを使用してインストールできます。 apt 包装システム。

最近行っていない場合は、サーバーのローカルパッケージインデックスを更新します。

  1. sudo apt update

次に、Postgresパッケージを -contrib いくつかの追加のユーティリティと機能を追加するパッケージ:

  1. sudo apt install postgresql postgresql-contrib

サーバーがを使用して実行されていることを確認します systemctl start 指図:

  1. sudo systemctl start postgresql.service

ソフトウェアがインストールされて実行されたので、ソフトウェアがどのように機能するか、および使用した他のリレーショナルデータベース管理システムとどのように異なるかを確認できます。

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

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

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

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

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

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

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

  1. sudo -i -u postgres

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

  1. psql

そこから、必要に応じてデータベース管理システムを自由に操作できます。

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

  1. \q

これにより、 postgres Linuxコマンドプロンプト。

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

postgres アカウントを使用して、必要なコマンドを直接実行することもできます。 sudo.

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

  1. sudo -u postgres psql

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

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

  1. \q

多くのユースケースでは、複数のPostgresロールが必要です。 これらを構成する方法を学ぶために読んでください。

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

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

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

  1. createuser --interactive

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

  1. sudo -u postgres createuser --interactive

スクリプトはいくつかの選択肢を表示し、応答に基づいて正しいPostgresコマンドを実行して、指定したユーザーを作成します。

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

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

  1. man createuser

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

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

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

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

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

  1. createdb sammy

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

  1. sudo -u postgres createdb sammy

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

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

ピア認証でログインするには、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".

これは、デフォルト以外のデータベースまたはデフォルト以外のユーザーに接続している場合に役立ちます。

ステップ6—テーブルの作成と削除

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

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

Postgres でテーブルを作成および管理する方法について詳しくは、こちらをご覧ください。

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

  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行は、機器の列を作成します typecolor それぞれ、どちらも空にすることはできません。 これらの後の行は、 location 列と、値が8つの可能な値の1つである必要がある制約。 最後の行は date 機器を設置した日付を記録する列。

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

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

  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)

テーブルの準備ができたら、それを使用してデータの管理を練習しましょう。

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

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

  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)

に注意してください slide 行はテーブルの一部ではなくなりました。

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

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

  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 列とその中にあるすべての値。ただし、他のすべてのデータはそのまま残ります。

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

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

必要なレコードを照会し、列を使用する値に設定することにより、既存のエントリの値を更新できます。 クエリを実行できます 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 | 2018-08-16 (1 row)

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

結論

これで、Ubuntu20.04サーバーでPostgreSQLがセットアップされました。 Postgresとその使用方法について詳しく知りたい場合は、次のガイドを確認することをお勧めします。