開発者ドキュメント

Ubuntu16.04にPostgreSQLをインストールして使用する方法

序章

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

PostgreSQL 、またはPostgresは、SQLクエリ言語の実装を提供するリレーショナルデータベース管理システムです。 これは、多くの小規模および大規模プロジェクトで人気のある選択肢であり、標準に準拠し、信頼性の高いトランザクションや読み取りロックのない同時実行性などの多くの高度な機能を備えているという利点があります。

このガイドでは、PostgresをUbuntu 16.04 VPSインスタンスにインストールする方法と、それを使用するためのいくつかの基本的な方法について説明します。

インストール

UbuntuのデフォルトリポジトリにはPostgresパッケージが含まれているため、aptパッケージシステムを使用してこれらを簡単にインストールできます。

このセッションでaptを使用するのはこれが初めてなので、ローカルパッケージインデックスを更新する必要があります。 次に、Postgresパッケージと、いくつかの追加のユーティリティと機能を追加する-contribパッケージをインストールできます。

  1. sudo apt-get update
  2. sudo apt-get install postgresql postgresql-contrib

ソフトウェアがインストールされたので、それがどのように機能するか、そしてそれがあなたが使用したかもしれない同様のデータベース管理システムとどのように異なるかを調べることができます。

PostgreSQLの役割とデータベースの使用

デフォルトでは、Postgresは「ロール」と呼ばれる概念を使用して認証と承認を処理します。 これらは、いくつかの点で通常のUnixスタイルのアカウントに似ていますが、Postgresはユーザーとグループを区別せず、代わりに、より柔軟な用語「ロール」を好みます。

インストール時に、Postgresは ident 認証を使用するように設定されます。これは、Postgresの役割を一致するUnix/Linuxシステムアカウントに関連付けることを意味します。 Postgres内にロールが存在する場合、同じ名前のUnix/Linuxユーザー名がそのロールとしてサインインできます。

このアカウントを利用してPostgresにアクセスする方法はいくつかあります。

postgresアカウントに切り替えます

インストール手順により、デフォルトのPostgresロールに関連付けられたpostgresというユーザーアカウントが作成されました。 Postgresを使用するために、そのアカウントにログインできます。

次のように入力して、サーバーのpostgresアカウントに切り替えます。

  1. sudo -i -u postgres

次のように入力すると、Postgresプロンプトにすぐにアクセスできます。

  1. psql

ログインすると、データベース管理システムとすぐに対話できるようになります。

次のように入力して、PostgreSQLプロンプトを終了します。

  1. \q

これで、postgresLinuxコマンドプロンプトに戻るはずです。

アカウントを切り替えずにPostgresプロンプトにアクセスする

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

たとえば、最後の例では、Postgresプロンプトを表示したかっただけです。 次のようにsudoを使用してpostgresユーザーとして単一のコマンドpsqlを実行することにより、これを1つのステップで実行できます。

  1. sudo -u postgres psql

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

ここでも、次のように入力して、インタラクティブなPostgresセッションを終了できます。

  1. \q

新しい役割を作成する

現在、データベース内で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

いくつかの追加のフラグを渡すことで、より詳細な制御を取得できます。 manページを見て、オプションを確認してください。

  1. man createuser

新しいデータベースを作成する

デフォルトでは、Postgres認証システムが行う別の仮定は、ログインに使用されているロールと同じ名前のデータベースがあり、そのロールがアクセスできるというものです。

したがって、前のセクションでsammyというユーザーを作成した場合、そのロールはデフォルトでsammyとも呼ばれるデータベースへの接続を試みます。 createdbコマンドを使用して、適切なデータベースを作成できます。

postgresアカウントとしてログインしている場合は、次のように入力します。

  1. createdb sammy

代わりに、通常のアカウントから切り替えずに各コマンドにsudoを使用する場合は、次のように入力します。

  1. sudo -u postgres createdb sammy

新しい役割でPostgresプロンプトを開く

identベースの認証でログインするには、Postgresの役割およびデータベースと同じ名前のLinuxユーザーが必要です。

一致するLinuxユーザーが利用できない場合は、adduserコマンドを使用して作成できます。 これは、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".

これは、デフォルト以外のデータベースまたはデフォルト以外のユーザーに接続している場合に役立ちます。

テーブルの作成と削除

PostgreSQLデータベースシステムに接続する方法がわかったので、いくつかの基本的なタスクを完了する方法を確認できます。

まず、いくつかのデータを格納するためのテーブルを作成できます。 遊具を説明するテーブルを作成しましょう。

このコマンドの基本的な構文は次のようになります。

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

私達は私達が持っている装置を目録にする遊び場のテーブルを作りました。 これは、serialタイプの機器IDから始まります。 このデータ型は自動インクリメント整数です。 この列にprimary keyの制約を与えました。これは、値が一意であり、nullであってはならないことを意味します。

2つの列(equip_idinstall_date)については、フィールド長を指定していません。 これは、長さがタイプによって暗示されるため、一部の列タイプは設定された長さを必要としないためです。

次に、機器typeおよびcolorの列を示します。これらは、それぞれ空にすることはできません。 location列を作成し、値が8つの可能な値の1つである必要がある制約を作成します。 最後の列は、機器を設置した日付を記録した日付列です。

次のように入力すると、新しいテーブルが表示されます。

  1. \d
Output
List of relations Schema | Name | Type | Owner --------+-------------------------+----------+------- public | playground | table | sammy public | playground_equip_id_seq | sequence | sammy (2 rows)

私たちの遊び場のテーブルはここにありますが、タイプsequenceplayground_equip_id_seqと呼ばれるものもあります。 これは、equip_id列に指定したserialタイプを表したものです。 これにより、シーケンス内の次の番号が追跡され、このタイプの列に対して自動的に作成されます。

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

  1. \dt
Output
List of relations Schema | Name | Type | Owner --------+------------+-------+------- public | playground | table | sammy (1 row)

テーブル内のデータの追加、クエリ、および削除

これでテーブルができたので、そこにいくつかのデータを挿入できます。

スライドとスイングを追加しましょう。 これを行うには、追加するテーブルを呼び出し、列に名前を付けてから、各列のデータを提供します。 スライドとスイングは次のように追加できます。

  1. INSERT INTO playground (type, color, location, install_date) VALUES ('slide', 'blue', 'south', '2014-04-28');
  2. INSERT INTO playground (type, color, location, install_date) VALUES ('swing', 'yellow', 'northwest', '2010-08-16');

いくつかの一般的なハングアップを回避するために、データを入力するときに注意する必要があります。 まず、列名は引用符で囲まないでください。ただし、入力する列valuesには引用符が必要です。

もう1つ覚えておくべきことは、equip_id列に値を入力しないことです。 これは、テーブルに新しい行が作成されるたびにこれが自動生成されるためです。

次に、次のように入力して、追加した情報を取得できます。

  1. SELECT * FROM playground;
Output
equip_id | type | color | location | install_date ----------+-------+--------+-----------+-------------- 1 | slide | blue | south | 2014-04-28 2 | swing | yellow | northwest | 2010-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 | 2010-08-16 (1 row)

テーブルに列を追加および削除する方法

作成後にテーブルを変更して列を追加する場合は、簡単に行うことができます。

次のように入力することで、各機器の最後のメンテナンス訪問を示す列を追加できます。

  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 | 2010-08-16 | (1 row)

列を簡単に削除できます。 作業員が別のツールを使用してメンテナンス履歴を追跡していることがわかった場合は、次のように入力して列を削除できます。

  1. ALTER TABLE playground DROP last_maint;

テーブルのデータを更新する方法

テーブルにレコードを追加する方法とレコードを削除する方法はわかっていますが、既存のエントリを変更する方法についてはまだ説明していません。

必要なレコードを照会し、列を使用する値に設定することにより、既存のエントリの値を更新できます。 「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 | 2010-08-16 (1 row)

ご覧のとおり、スライドは赤として登録されています。

結論

これで、Ubuntu16.04サーバーでPostgreSQLがセットアップされました。 ただし、Postgresで学ぶべきことはまだはるかにあります。 Postgresの使用方法をカバーするその他のガイドは次のとおりです。

モバイルバージョンを終了