Ubuntu18.04にPostgreSQLをインストールして使用する方法
序章
リレーショナルデータベース管理システムは、多くのWebサイトやアプリケーションの重要なコンポーネントです。 これらは、情報を保存、整理、およびアクセスするための構造化された方法を提供します。
PostgreSQL 、またはPostgresは、SQLクエリ言語の実装を提供するリレーショナルデータベース管理システムです。 これは、多くの小規模および大規模プロジェクトで人気のある選択肢であり、標準に準拠し、信頼性の高いトランザクションや読み取りロックのない同時実行性などの多くの高度な機能を備えているという利点があります。
このガイドでは、Ubuntu 18.04 VPSインスタンスにPostgresをインストールする方法を示し、基本的なデータベース管理の手順も示します。
前提条件
このチュートリアルに従うには、 Ubuntu18.04の初期サーバーセットアップガイドに従って構成された1つのUbuntu18.04サーバーが必要です。 この前提条件のチュートリアルを完了すると、サーバーには、sudo権限と基本的なファイアウォールを持つ非rootユーザーが必要になります。
ステップ1—PostgreSQLのインストール
UbuntuのデフォルトリポジトリにはPostgresパッケージが含まれているため、これらを使用してインストールできます。 apt
包装システム。
初めて使うので apt
このセッションでは、ローカルパッケージインデックスを更新します。 次に、Postgresパッケージを -contrib
いくつかの追加のユーティリティと機能を追加するパッケージ:
- sudo apt update
- sudo apt install postgresql postgresql-contrib
サーバーがを使用して実行されていることを確認します systemctl start
指図:
- sudo systemctl start postgresql.service
ソフトウェアがインストールされて実行されたので、それがどのように機能するか、そしてそれがあなたが使用したかもしれない同様のデータベース管理システムとどのように異なるかを調べることができます。
ステップ2—PostgreSQLの役割とデータベースを使用する
デフォルトでは、Postgresはrolesと呼ばれる概念を使用して認証と承認を処理します。 これらは、いくつかの点で通常の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プロンプトにアクセスする
最後の例では、最初に postgres ユーザーに切り替えてから実行することにより、Postgresプロンプトを表示するように指示されました。 psql
Postgresプロンプトを開きます。 または、単一のコマンドを実行することにより、これを1つのステップで実行することもできます。 psql
postgresユーザーとして sudo
、 このような:
- sudo -u postgres psql
これにより、仲介なしでPostgresに直接ログインできます bash
間にシェル。
ここでも、次のように入力して、インタラクティブなPostgresセッションを終了できます。
- \q
多くのユースケースでは、複数のPostgresロールが必要です。 これらを構成する方法を学ぶために読んでください。
ステップ3—新しい役割を作成する
現在、データベース内でpostgresロールが構成されているだけです。 コマンドラインから新しい役割を作成できます。 createrole
指図。 The --interactive
flagは、新しい役割の名前の入力を求め、スーパーユーザー権限が必要かどうかも尋ねます。
postgres アカウントとしてログインしている場合は、次のように入力して新しいユーザーを作成できます。
- createuser --interactive
代わりに、 sudo
通常のアカウントから切り替えずにコマンドごとに、次のように入力します。
- sudo -u postgres createuser --interactive
スクリプトはいくつかの選択肢を表示し、応答に基づいて正しいPostgresコマンドを実行して、仕様を満たすユーザーを作成します。
まず、プロンプトで新しい役割の名前を指定するように求められます。 次の例では、ロールに sammy という名前を付けていますが、好きな名前を付けることができます。
OutputEnter name of role to add: sammy
次に、新しい役割をスーパーユーザーにするかどうかを尋ねられます。 PostgreSQLでは、スーパーユーザーの役割には非常に幅広い特権があり、ほとんどすべての権限チェックをバイパスできます。
次の例では、 sammy ロールをスーパーユーザーにする必要があることを指定していますが、スーパーユーザーロールはデータベースを強力に制御できるため、新しいロールにスーパーユーザーステータスを軽く付与しないでください。
OutputEnter name of role to add: sammy
Shall the new role be a superuser? (y/n) y
新しいスーパーユーザーロールを作成できるのは、すでにスーパーユーザーであるロールとして作成する場合のみであることに注意してください。 デフォルトでは、postgresロールはスーパーユーザーです。
いくつかの追加のフラグを渡すことで、より詳細な制御を取得できます。 を見てオプションをチェックしてください man
ページ:
- man createuser
Postgresのインストールに新しい役割が追加されましたが、データベースはまだ追加されていません。 次のセクションでは、このプロセスについて説明します。
ステップ4—新しいデータベースの作成
Postgres認証システムがデフォルトで行うもう1つの前提は、ログインに使用されるすべてのロールについて、そのロールにはアクセス可能な同じ名前のデータベースがあるということです。
これは、前のセクションで作成したユーザーが sammy と呼ばれる場合、その役割はデフォルトで「sammy」とも呼ばれるデータベースへの接続を試みることを意味します。 あなたは適切なデータベースを作成することができます createdb
指図。
postgres アカウントとしてログインしている場合は、次のように入力します。
- createdb sammy
代わりに、 sudo
通常のアカウントから切り替えずにコマンドごとに、次のように入力します。
- sudo -u postgres createdb sammy
この柔軟性により、必要に応じてデータベースを作成するための複数のパスが提供されます。
ステップ5—新しい役割でPostgresプロンプトを開く
でログインするには ident
ベース認証では、Postgresの役割とデータベースと同じ名前のLinuxユーザーが必要です。
一致するLinuxユーザーが利用できない場合は、 adduser
指図。 これは、root以外のアカウントから行う必要があります。 sudo
特権(つまり、 postgres ユーザーとしてログインしていない):
- sudo adduser sammy
この新しいアカウントが利用可能になったら、次のように入力して、切り替えてデータベースに接続できます。
- sudo -i -u sammy
- psql
または、これをインラインで実行できます。
- sudo -u sammy psql
このコマンドは、すべてのコンポーネントが適切に構成されていることを前提として、自動的にログインします。
ユーザーが別のデータベースに接続するようにする場合は、次のようにデータベースを指定することで接続できます。
- psql -d postgres
ログインすると、次のように入力して現在の接続情報を確認できます。
- \conninfo
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 でテーブルを作成および管理する方法について詳しくは、こちらをご覧ください。
デモンストレーションの目的で、次のようなサンプルテーブルを作成します。
- 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
- );
これらのコマンドは、遊具をインベントリするテーブルを作成します。 これは、機器IDで始まります。 serial
タイプ。 このデータ型は自動インクリメント整数です。 この列に次の制約も与えました primary key
これは、値が一意であり、nullであってはならないことを意味します。
2つの列について(equip_id
と install_date
)、コマンドはフィールド長を指定しません。 これは、長さがタイプによって暗示されるため、一部の列タイプは設定された長さを必要としないためです。
次の2つのコマンドは、機器の列を作成します type
と color
それぞれ、それぞれを空にすることはできません( NOT NULL
それぞれに適用される制約)。 これらの後の行は、 location
列を追加し、この列の値が8つの可能な値の1つであることを要求する制約を追加します。 括弧内の最後の行は、 date
機器を設置した日付を記録する列。
SQLでは、すべてのステートメントはセミコロンで終了する必要があることに注意してください(;
).
入力した場合 CREATE TABLE
正しく動作すると、次の出力が返されます。
OutputCREATE TABLE
次のように入力すると、このデータベース内のテーブルのリストを見つけることができます。
- \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
. これは、 serial
あなたがあなたに与えたタイプ equip_id
桁。 これにより、シーケンス内の次の番号が追跡され、このタイプの列に対して自動的に作成されます。
シーケンスなしでテーブルのみを返したい場合は、次のように入力できます。
- \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)
列を削除するには、追加に使用したものと非常によく似たSQLステートメントを入力できます。 last_maint
桁。 作業員が別のツールを使用して保守履歴を追跡していることがわかった場合は、次のように入力して列を削除できます。
- ALTER TABLE playground DROP last_maint;
これにより、 last_maint
列とその中にあるすべての値。ただし、他のすべてのデータはそのまま残ります。
ステップ9—テーブル内のデータを更新する
これまで、テーブルにレコードを追加する方法とレコードを削除する方法を学習しましたが、このチュートリアルでは、既存のエントリを変更する方法についてはまだ説明していません。
必要なレコードを照会し、列を使用する値に設定することにより、既存のエントリの値を更新できます。 「スイング」レコードを照会して(これは、テーブル内のすべてのスイングに一致します)、その色を「赤」に変更できます。 これは、スイングセットにペイントジョブを与えた場合に役立ちます。
- 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)
この出力が示すように、スライドは赤として登録されています。
結論
これで、Ubuntu18.04サーバーでPostgreSQLがセットアップされました。 ただし、Postgresで学ぶべきことはまだはるかにあります。 Postgresの使用方法をカバーするその他のガイドは次のとおりです。