はじめに
リレーショナルデータベース管理システムは、多くのウェブサイトやアプリケーションの重要なコンポーネントです。これらは、情報を格納し、整理し、アクセスするための構造化された方法を提供します。
PostgreSQL、またはPostgresは、SQLクエリ言語の実装を提供するリレーショナルデータベース管理システムです。これは標準に準拠しており、信頼性の高いトランザクションや読み取りロックなしの並行性などの多くの高度な機能を備えています。
このガイドでは、Ubuntu 22.04サーバーにPostgresをインストールする方法を示します。また、一般的なデータベース管理の手順も提供します。
前提条件
このチュートリアルに従うには、Ubuntu 22.04の初期サーバー設定ガイドに従って構成されたUbuntu 22.04サーバーが1台必要です。この前提条件のチュートリアルを完了すると、サーバーにはsudo権限を持つノン-rootユーザーと基本的なファイアウォールが設定されます。
ステップ1 — PostgreSQLのインストール
UbuntuのデフォルトリポジトリにはPostgresパッケージが含まれていますので、apt
パッケージングシステムを使用してこれらをインストールできます。
最近行っていない場合は、サーバーのローカルパッケージインデックスを更新してください:
次に、Postgresパッケージといくつかの追加ユーティリティと機能を追加する-contrib
パッケージをインストールします:
サーバーが実行されていることをsystemctl start
コマンドを使用して確認してください:
ソフトウェアがインストールされ、実行されているので、それがどのように機能し、他のリレーショナルデータベース管理システムとどのように異なるかを説明します。
ステップ2 — PostgreSQLロールとデータベースの使用
デフォルトでは、Postgresは認証と認可を処理するためにロールという概念を使用します。これらはある意味で通常のUnixスタイルのアカウントに似ていますが、Postgresはユーザーとグループを区別せず、代わりにより柔軟な用語「ロール」を好みます。
インストール時、Postgresはピア認証を使用するように設定されます。つまり、Postgresの役割をUnix/Linuxシステムアカウントと関連付けます。Postgres内に役割が存在する場合、同じ名前のUnix/Linuxユーザー名でその役割としてサインインできます。
インストール手順では、デフォルトのPostgres役割に関連付けられたpostgresというユーザーアカウントが作成されます。Postgresを使用するために、そのアカウントにログインできます。
このアカウントを使用してPostgresにアクセスする方法はいくつかあります。
postgresアカウントに切り替える
サーバーでpostgresアカウントに切り替えるには、次のように入力します:
次に、次のように入力してすぐにPostgreSQLプロンプトにアクセスできます:
そこから必要に応じてデータベース管理システムとやり取りできます。
PostgreSQLプロンプトを終了するには、次のように入力します:
これで、postgres Linuxユーザーのコマンドプロンプトに戻ります。
アカウントを切り替えずにPostgresプロンプトにアクセスする
あなたはsudo
を使って直接postgresアカウントでコマンドを実行することもできます。
たとえば、前の例では、最初にpostgresユーザーに切り替えてpsql
を実行してPostgresプロンプトに移動するよう指示されました。これをpostgresユーザーとしてsudo
を使って1つのステップで行うことができます。以下のようにpsql
を実行します:
これにより、中間のbash
シェルなしで直接Postgresにログインできます。
再び、インタラクティブなPostgresセッションを終了するには、次のように入力します:
多くのユースケースでは1つ以上のPostgresロールが必要です。これらを設定する方法について学びます。
ステップ3 — 新しいロールの作成
現在、データベースにはpostgresロールが設定されています。新しいロールをcreateuser
コマンドを使用してコマンドラインから作成できます。--interactive
フラグを使用すると、新しいロールの名前を入力するようにプロンプトが表示され、スーパーユーザー権限を持つかどうかを尋ねられます。
postgresアカウントでログインしている場合は、次のように新しいユーザーを作成できます:
代わりに、通常のアカウントから切り替えずに各コマンドでsudo
を使用する場合は、次のように入力します。
スクリプトはいくつかの選択肢を提示し、あなたの回答に基づいて、指定した仕様に従ってユーザーを作成するための正しいPostgresコマンドを実行します。
OutputEnter name of role to add: sammy
Shall the new role be a superuser? (y/n) y
いくつかの追加フラグを渡すことで、より多くの制御が可能です。createuser
コマンドのman
ページを見て、オプションを確認してください。
Postgresのインストールには新しいユーザーが追加されましたが、まだデータベースは追加されていません。次のセクションでこのプロセスを説明します。
ステップ4 — 新しいデータベースの作成
Postgresの認証システムがデフォルトで行うもう1つの仮定は、ログインに使用される役割に対して、その役割がアクセスできる同じ名前のデータベースがあるというものです。
これはつまり、前のセクションで作成したユーザーがsammyという名前の場合、その役割はデフォルトで「sammy」という名前のデータベースに接続しようとします。適切なデータベースはcreatedb
コマンドで作成できます。
もしpostgresアカウントでログインしている場合、次のように入力します。
代わりに、通常のアカウントから切り替えることなく、各コマンドにsudo
を使用する場合は、次のように入力します。
この柔軟性により、必要に応じて複数の方法でデータベースを作成することができます。
ステップ5 — 新しいロールでPostgresプロンプトを開く
ピア認証でログインするには、Postgresロールとデータベースと同じ名前のLinuxユーザーが必要です。
一致するLinuxユーザーがない場合は、adduser
コマンドを使用して作成できます。これは、rootユーザーとしてログインしていない、sudo
特権を持つ非postgresユーザーアカウントから行う必要があります:
この新しいアカウントが利用可能になったら、次のように入力してデータベースに切り替えて接続できます:
または、次のようにインラインで行うこともできます:
このコマンドは、すべてのコンポーネントが適切に構成されていると仮定して、自動的にログインします。
ユーザーを異なるデータベースに接続させたい場合は、次のようにデータベースを指定して行います:
ログイン後、次のように入力して現在の接続情報を確認できます:
OutputYou 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でテーブルを作成および管理する方法を参照してください。
デモンストレーション目的で、次のテーブルを作成します:
このコマンドは、遊具の在庫を記録するテーブルを作成します。テーブルの最初の列は、serial
型の装置ID番号を保持し、これは自動増分整数です。この列にはPRIMARY KEY
の制約もあります。これは、その値が一意であり、nullでないことを意味します。
次の2行は、それぞれ装置のtype
とcolor
の列を作成します。どちらもnullであってはなりません。これらの後に続く行は、location
列を作成し、その値が8つの可能な値の1つであることを要求する制約を持ちます。最後の行は、装置をインストールした日付を記録するdate
列を作成します。
2つの列(equip_id
およびinstall_date
)については、フィールドの長さが指定されていません。これは、一部のデータ型は長さを必要としないためです。長さまたは形式が暗示されているからです。
新しいテーブルを調べるには、次のように入力します:
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
型の表現です。これは、シーケンス内の次の番号を追跡し、この型の列に自動的に作成されます。
シーケンスなしでテーブルのみを表示したい場合は、次のように入力します:
Output List of relations
Schema | Name | Type | Owner
--------+------------+-------+-------
public | playground | table | sammy
(1 row)
テーブルが準備できたので、データの管理の練習に使いましょう。
ステップ7 — テーブル内のデータの追加、クエリ、削除
テーブルができたので、いくつかのデータを挿入できます。例として、スライドとスイングを追加するには、追加したいテーブルを呼び出し、列の名前を付け、それぞれの列にデータを提供します。次のように:
データを入力する際に、いくつかの一般的なトラブルを避けるために注意する必要があります。まず、列名を引用符で囲まないでくださいが、入力する列の値は引用符で囲む必要があります。
もう一つの注意点は、equip_id
列に値を入力しないことです。これは、新しい行をテーブルに追加するたびに自動的に生成されるためです。
追加した情報を取得するには、次のように入力します:
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
が正常に埋め込まれ、他のすべてのデータが正しく整理されていることに注意してください。
プレイグラウンドのスライドが壊れて取り外す必要がある場合、次のように入力してテーブルから行を削除することもできます:
テーブルを再度クエリしてください:
Output equip_id | type | color | location | install_date
----------+-------+--------+-----------+--------------
2 | swing | yellow | northwest | 2018-08-16
(1 row)
slide
行がテーブルの一部でなくなったことに注意してください。
ステップ8 — テーブルからの列の追加と削除
テーブルを作成した後、列を追加または削除して変更することができます。次のように入力して、各機器の最終メンテナンス訪問を表示する列を追加します:
テーブル情報を再度確認してください。新しい列が追加されましたが、データは入力されていません:
Output equip_id | type | color | location | install_date | last_maint
----------+-------+--------+-----------+--------------+------------
2 | swing | yellow | northwest | 2018-08-16 |
(1 row)
作業クルーがメンテナンス履歴を追跡するために別のツールを使用していることがわかった場合、次のように入力して列を削除できます:
これにより、last_maint
列とその中にある値が削除されますが、他のすべてのデータはそのままです。
ステップ9 — テーブル内のデータの更新
これまでに、テーブルにレコードを追加する方法とそれらを削除する方法を学びましたが、このチュートリアルではまだ既存のエントリを変更する方法について説明していません。
既存のエントリの値を更新するには、更新したいレコードをクエリして、列を使用したい値に設定します。 swing
レコードをクエリし(これにより、テーブル内のすべてのスイングが一致します)、その色を red
に変更できます。これは、スイングセットにペイントを施した場合に便利です:
操作が成功したかどうかは、データを再度クエリして確認できます:
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