紹介
リレーショナルデータベース管理システムは、多くのウェブサイトやアプリケーションの重要なコンポーネントです。これらは情報を保存、整理、アクセスするための構造化された方法を提供します。
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
パッケージングシステムを使用してインストールできます。
最近行っていない場合は、サーバーのローカルパッケージインデックスを更新してください:
次に、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プロンプトにアクセスする
postgresアカウントで直接コマンドを実行することもできます。sudo
を使用して。
たとえば、前の例では、最初にpostgresユーザーに切り替えてからpsql
を実行してPostgresプロンプトを開くように指示されました。これを1つの手順で行うこともできます。 sudo
を使用してpostgresユーザーとしてpsql
を実行します。
これにより、中間のbash
シェルなしで直接Postgresにログインできます。
再び、インタラクティブなPostgresセッションから退出するには、次を入力します:
多くのユースケースでは、1つ以上のPostgresロールが必要です。これを設定する方法を学ぶには、次を読んでください。
ステップ3 — 新しいロールの作成
現在、データベース内でpostgresロールのみが構成されています。新しいロールをコマンドラインからcreaterole
コマンドで作成できます。--interactive
フラグを使用すると、新しいロールの名前を入力するように求められ、また、スーパーユーザー権限を持つかどうかを尋ねられます。
postgresアカウントでログインしている場合は、次のように新しいユーザーを作成できます:
代わりに、通常のアカウントから切り替えることなく、各コマンドにsudo
を使用したい場合は、次のように入力してください:
スクリプトはいくつかの選択肢を提示し、それに基づいて、指定した仕様に合わせてユーザーを作成するための正しいPostgresコマンドを実行します。
OutputEnter name of role to add: sammy
Shall the new role be a superuser? (y/n) y
追加のフラグを渡すことでさらなる制御が可能です。マニュアルページを確認してオプションを確認してください:
Postgresのインストールに新しいユーザーが追加されましたが、まだデータベースは追加されていません。次のセクションでこのプロセスについて説明します。
ステップ4 — データベースの作成
Postgresの認証システムがデフォルトで行うもう1つの仮定は、ログインに使用されるロールに対して、同じ名前のデータベースが存在し、アクセスできることです。
これは、前のセクションで作成したユーザーがsammyと呼ばれる場合、その役割はデフォルトで「sammy」とも呼ばれるデータベースに接続しようとすることを意味します。適切なデータベースは、createdb
コマンドで作成できます。
前述のように、postgresアカウントでログインしている場合は、次のように入力します:
代わりに、通常のアカウントから切り替えることなく、各コマンドにsudo
を使用する場合は、次のように入力します:
この柔軟性により、必要に応じて複数の方法でデータベースを作成できます。
ステップ 5 — 新しいロールで Postgres プロンプトを開く
ピア認証でログインするには、Postgres の役割とデータベースと同じ名前の Linux ユーザーが必要です。
一致する Linux ユーザーが利用できない場合は、adduser
コマンドで作成できます。これは、sudo
特権を持つ非rootアカウントから行う必要があります(つまり、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)
);
これらのコマンドでは、テーブルに名前を付け、列を定義し、列のタイプやフィールドデータの最大長を指定します。オプションで各列にテーブル制約を追加することもできます。
Postgresでテーブルの作成と管理方法について詳しくは、こちらをご覧ください。Postgresでテーブルの作成と管理方法
デモンストレーション目的で、次のテーブルを作成します:
このコマンドは、遊び場の機器の在庫を管理するテーブルを作成します。テーブルの最初の列には、serial
型の機器ID番号が格納され、これは自動インクリメントされる整数です。この列にはPRIMARY KEY
の制約もあり、これはその値が一意でnullでないことを意味します。
次の2行は、機器のタイプ
と色
の列を作成します。どちらも空であってはいけません。これらの後にある行は、場所
列を作成し、値が8つの可能な値の1つであることを要求する制約を作成します。最後の行は、装置をインストールした日付を記録する日付
列を作成します。
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
というものもあります。これは、equip_id
列に指定したシリアル
型の表現です。これはシーケンス内の次の数値を追跡し、この型の列に自動的に作成されます。
シーケンスなしでテーブルだけを表示したい場合は、次のように入力します:
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 20.04 サーバー上で PostgreSQL をセットアップしました。Postgres について詳しく学び、その使用方法を知りたい場合は、以下のガイドをご覧ください:
Source:
https://www.digitalocean.com/community/tutorials/how-to-install-and-use-postgresql-on-ubuntu-20-04