Ubuntu 18.04にPostgreSQLをインストールして使用する方法

前書き

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

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

このガイドは、Ubuntu 18.04 VPSインスタンスにPostgresをインストールする方法を示し、基本的なデータベース管理の手順も提供します。

前提条件

このチュートリアルを進めるには、https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-18-04 [Initial Ubuntu 18.04のサーバーセットアップ]ガイド。 この前提条件のチュートリアルを完了すると、サーバーにはsudo権限と基本的なファイアウォールを持つ* root *以外のユーザーが必要になります。

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

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

このセッションで初めて `+ apt `を使用するので、ローカルパッケージインデックスを更新します。 次に、いくつかの追加のユーティリティと機能を追加する ` -contrib +`パッケージとともにPostgresパッケージをインストールします。

sudo apt update
sudo apt install postgresql postgresql-contrib

これでソフト​​ウェアがインストールされたので、それがどのように機能し、使用した可能性のある類似のデータベース管理システムとどのように異なるかを検討することができます。

ステップ2-PostgreSQLのロールとデータベースの使用

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

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

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

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

postgresアカウントへの切り替え

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

sudo -i -u postgres

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

psql

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

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

\q

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

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

また、 `+ sudo +`を使用して* postgres *アカウントで直接コマンドを実行することもできます。

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

sudo -u postgres psql

これにより、中間の `+ bash +`シェルを介さずにPostgresに直接ログインできます。

ここでも、次のように入力して、Postgresの対話型セッションを終了できます。

\q

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

ステップ3-新しい役割の作成

現在、データベース内で設定されているのは* postgres *ロールのみです。 `+ createrole `コマンドを使用して、コマンドラインから新しいロールを作成できます。 `-interactive +`フラグは、新しいロールの名前の入力を求め、スーパーユーザー権限が必要かどうかを尋ねます。

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

createuser --interactive

代わりに、通常のアカウントから切り替えずに各コマンドに「+ sudo +」を使用する場合は、次のように入力します。

sudo -u postgres createuser --interactive

スクリプトはいくつかの選択を促し、応答に基づいて正しいPostgresコマンドを実行し、仕様に合ったユーザーを作成します。

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

いくつかの追加フラグを渡すことで、より多くの制御を取得できます。 `+ man +`ページを見てオプションを確認してください:

man createuser

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

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

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

つまり、最後のセクションで作成したユーザーの名前が* sammy *の場合、そのロールはデフォルトで「sammy」とも呼ばれるデータベースへの接続を試行します。 `+ createdb +`コマンドで適切なデータベースを作成できます。

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

createdb

代わりに、通常のアカウントから切り替えずに各コマンドに「+ sudo +」を使用する場合は、次のように入力します。

sudo -u postgres createdb

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

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

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

一致するLinuxユーザーがいない場合は、 `+ adduser `コマンドで作成できます。 ` sudo +`権限(つまり、* postgres ユーザーとしてログインしていない)を持つ非 root *アカウントからこれを行う必要があります。

sudo adduser

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

sudo -i -u
psql

または、このインラインで行うことができます:

sudo -u  psql

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

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

psql -d

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

\conninfo
OutputYou are connected to database "sammy" as user "sammy" via socket in "/var/run/postgresql" at port "5432".

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

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

PostgreSQLデータベースシステムへの接続方法がわかったので、いくつかの基本的なPostgres管理タスクを学習できます。

最初に、いくつかのデータを保存するテーブルを作成します。 例として、いくつかの遊具を説明する表。

このコマンドの基本的な構文は次のとおりです。

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つの列( + equip_id +`および `+ install_date +)の場合、コマンドはフィールドの長さを指定しません。 これは、一部の列タイプでは長さがタイプによって暗示されているため、長さを設定する必要がないためです。

次の2つのコマンドは、機器「+ type 」と「 color 」の列を作成します。それぞれを空にすることはできません。 これらの後のコマンドは、 ` location +`カラムを作成し、値が8つの可能な値の1つである必要がある制約を作成します。 最後のコマンドは、機器を設置した日付を記録する日付列を作成します。

次のように入力して、新しいテーブルを表示できます。

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

プレイグラウンドテーブルはここにありますが、タイプが「+ sequence 」の「 playground_equip_id_seq 」と呼ばれるものもあります。 これは、 ` equip_id `カラムに与えた ` serial +`タイプの表現です。 これは、シーケンス内の次の番号を追跡し、このタイプの列に対して自動的に作成されます。

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

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

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

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

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

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

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

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

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

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 +`が正常に入力され、他のすべてのデータが正しく構成されていることがわかります。

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

DELETE FROM playground WHERE type = 'slide';

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

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

スライドがテーブルの一部ではなくなったことがわかります。

手順8-テーブルの列の追加と削除

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

ALTER TABLE playground ADD last_maint date;

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

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

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

ALTER TABLE playground DROP last_maint;

これにより、 `+ last_maint +`カラムとその中にある値が削除されますが、他のすべてのデータはそのまま残ります。

ステップ9-テーブル内のデータの更新

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

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

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)

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

結論

これで、Ubuntu 18.04サーバーでPostgreSQLがセットアップされました。 ただし、Postgresで学ぶべきことはまだまだあります。 Postgresの使用方法をカバーするガイドがいくつかあります。

Related