Ubuntu 22.04でのPostgreSQLのインストールと使用方法

はじめに

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

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

このガイドでは、Ubuntu 22.04サーバーにPostgresをインストールする方法を示します。また、一般的なデータベース管理の手順も提供します。

前提条件

このチュートリアルに従うには、Ubuntu 22.04の初期サーバー設定ガイドに従って構成されたUbuntu 22.04サーバーが1台必要です。この前提条件のチュートリアルを完了すると、サーバーには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プロンプトにアクセスする

あなたはsudoを使って直接postgresアカウントでコマンドを実行することもできます。

たとえば、前の例では、最初にpostgresユーザーに切り替えてpsqlを実行してPostgresプロンプトに移動するよう指示されました。これをpostgresユーザーとしてsudoを使って1つのステップで行うことができます。以下のようにpsqlを実行します:

  1. sudo -u postgres psql

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

再び、インタラクティブなPostgresセッションを終了するには、次のように入力します:

  1. \q

多くのユースケースでは1つ以上のPostgresロールが必要です。これらを設定する方法について学びます。

ステップ3 — 新しいロールの作成

現在、データベースにはpostgresロールが設定されています。新しいロールをcreateuserコマンドを使用してコマンドラインから作成できます。--interactiveフラグを使用すると、新しいロールの名前を入力するようにプロンプトが表示され、スーパーユーザー権限を持つかどうかを尋ねられます。

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

いくつかの追加フラグを渡すことで、より多くの制御が可能です。createuserコマンドの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)
);

このコマンドは、テーブルに名前を付け、列を定義し、列のタイプとフィールドデータの最大長さを定義します。必要に応じて、各列に制約を追加することもできます。

テーブルの作成について詳しくは、SQLでテーブルを作成および管理する方法を参照してください。

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

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

このコマンドは、遊具の在庫を記録するテーブルを作成します。テーブルの最初の列は、serial型の装置ID番号を保持し、これは自動増分整数です。この列にはPRIMARY KEYの制約もあります。これは、その値が一意であり、nullでないことを意味します。

次の2行は、それぞれ装置のtypecolorの列を作成します。どちらもnullであってはなりません。これらの後に続く行は、location列を作成し、その値が8つの可能な値の1つであることを要求する制約を持ちます。最後の行は、装置をインストールした日付を記録するdate列を作成します。

2つの列(equip_idおよびinstall_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型です。これは、あなたがequip_id列に与えたserial型の表現です。これは、シーケンス内の次の番号を追跡し、この型の列に自動的に作成されます。

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

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

データを入力する際に、いくつかの一般的なトラブルを避けるために注意する必要があります。まず、列名を引用符で囲まないでくださいが、入力する列の値は引用符で囲む必要があります。

もう一つの注意点は、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)

スライドは今、赤で登録されています。

結論

これで、Ubuntu 22.04 サーバーで PostgreSQL がセットアップされました。Postgres の詳細と使用方法についてさらに学びたい場合は、次のガイドを参照することをお勧めします:

Source:
https://www.digitalocean.com/community/tutorials/how-to-install-and-use-postgresql-on-ubuntu-22-04