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

紹介

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

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

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

DigitalOcean Managed Databasesを使用して、PostgreSQLデータベースを1クリックでデプロイします。DigitalOceanによるデータベースのスケーリング、メンテナンス、アップグレードに焦点を当てましょう。

前提条件

このチュートリアルに従うには、初期サーバーセットアップガイド for Ubuntu 20.04に従って構成されたUbuntu 20.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プロンプトにアクセスする

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

たとえば、前の例では、最初にpostgresユーザーに切り替えてからpsqlを実行してPostgresプロンプトを開くように指示されました。これを1つの手順で行うこともできます。 sudoを使用してpostgresユーザーとしてpsqlを実行します。

  1. sudo -u postgres psql

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

再び、インタラクティブなPostgresセッションから退出するには、次を入力します:

  1. \q

多くのユースケースでは、1つ以上のPostgresロールが必要です。これを設定する方法を学ぶには、次を読んでください。

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

現在、データベース内でpostgresロールのみが構成されています。新しいロールをコマンドラインからcreateroleコマンドで作成できます。--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

追加のフラグを渡すことでさらなる制御が可能です。マニュアルページを確認してオプションを確認してください:

  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コマンドで作成できます。これは、sudo特権を持つ非rootアカウントから行う必要があります(つまり、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でテーブルの作成と管理方法について詳しくは、こちらをご覧ください。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. );

このコマンドは、遊び場の機器の在庫を管理するテーブルを作成します。テーブルの最初の列には、serial型の機器ID番号が格納され、これは自動インクリメントされる整数です。この列にはPRIMARY KEYの制約もあり、これはその値が一意でnullでないことを意味します。

次の2行は、機器のタイプの列を作成します。どちらも空であってはいけません。これらの後にある行は、場所列を作成し、値が8つの可能な値の1つであることを要求する制約を作成します。最後の行は、装置をインストールした日付を記録する日付列を作成します。

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というものもあります。これは、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');

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

もう一つ注意することは、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 20.04 サーバー上で PostgreSQL をセットアップしました。Postgres について詳しく学び、その使用方法を知りたい場合は、以下のガイドをご覧ください:

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