PostgreSQL の導入~ ラズベリーパイ研究室

PostgreSQL は、オープンソースの RDBMS(リレーショナル・データベース・マネジメント・システム)ではとても有名なデータベースです。主に「ポスグレ」または「ポストグレス(postgres)」という略称で呼ばれるこのデータベースは「Oracle」を使うほど厳密ではない商業の現場等で比較的よく利用されています。

ここではRaspberry PiでのPostgreSQLの導入について触れます。

おススメ!記事
Raspberry Pi 用「HAL」で、
カップラーメン・タイマーを作ってみよう!
ラズパイDIYの決定版! ソケットサーバー「HAL」をご紹介します。

PostgreSQL の導入

PostgreSQL は、オープンソースの RDBMS(リレーショナル・データベース・マネジメント・システム)ではとても有名なデータベースです。主に「ポスグレ」または「ポストグレス(postgres)」という略称で呼ばれるこのデータベースは「Oracle」を使うほど厳密ではない商業の現場等で比較的よく利用されています。それは Oracle に劣る、という意味ではなく、メーカーによる様々なサポートを必要としない場合、という意味です。Oracle を使ったからといって手厚いサポートが受けられるわけではないようですが、少なくとも、メーカーのサポートが受けられるという名目は、商業の場ではかなりの意味を持ったりします。

PostgreSQL は MySQL と違って振る舞いがとても紳士的です。勝手に型を変換して「よしなに」処理をしてくれることはなく、間違っている時は「あなた、多分間違ってますよ?」と教えてくれます。

また、MySQL との大きな違いは PostgreSQL が追記型であるということです。

PostgreSQLのストレージアーキテクチャ(基本編)PostgreSQL Deep Dive

をご覧いただくと良いかもしれませんが、レコードの更新を行う際には、前のレコードを上書きするのではなく、別のレコードとして追加します。このため、新規レコードの追加や更新が MySQL に比べて、多くの場合に早くなります。テーブルの生成なども MySQL よりも高速であったりします。

その代わりに古いレコードがどんどん残っていくので「バキューム」と呼ばれる、不要なレコードの一括削除を行う必要があります。

MySQL はテーブル構造の変更などがとても容易です。あるテーブルにおいて、カラムとカラムの間に新しいカラムを追加したい場合などMySQL ではとても簡単で1つの SQL を実行するだけで済みますが、PostgreSQL や他の多くの RDBMS では一大作業であったりします。

カジュアルな MySQL、トラディショナルな PostgreSQL という印象が適切かもしれません。

PostgreSQL のインストール

さて、では PostgreSQL をインストールしてみましょう。やはり apt-get です。現在(2016-07-06)apt-get でインストールされる PostgreSQL のバージョンは 9.4.8 のようです。

sudo apt-get install postgresql

バージョン確認は以下です。

psql --version
pi@raspberrypi:~ $ psql --version
psql (PostgreSQL) 9.4.8

アカウント情報の作成

さて、インストールが確認できたらルートユーザーにパスワードを設定しましょう。PostgreSQL のルートユーザーは、デフォルトでは postgres です。そこで、この postgres ユーザーに強固なパスワードを設定しましょう。

sudo passwd postgres

2 回パスワードの入力が求められるので、強固なパスワードを入力して下さい。絶対に忘れないようにしてくださいね。

正しくパスワードが更新されたら、su(substitute user=ユーザーの変更)コマンドで postgres ユーザーになってみましょう。

su - postgres

sudo をつけていないのでパスワードの入力を求められます。先ほど設定したパスワードを入力しましょう。

pi@raspberrypi:~ $ su - postgres
パスワード:
postgres@raspberrypi:~$

このように、プロンプトが pi から postgres に変われば postgres ユーザーとして OS にログインできました。

では今度は DB を操作するテストユーザーを作ってみましょう。次の文の feijoa のところはお好きな名前にして下さい。その名前でアカウントが作成されます。最初は、この後で作成するデータベース名と同じにしておくと便利です。

createuser -P feijoa

2 回パスワードの入力が求められ、一致するとユーザーが作成されます。

postgres@raspberrypi:~$ createuser -P feijoa
新しいロールのためのパスワード:
もう一度入力してください:
postgres@raspberrypi:~$

これで PostgreSQL にユーザーが作成されました。

データベースの作成

次はデータベースの作成です。まず、postgres ユーザーで、

psql

を実行し、PostgreSQL のシェルに入ります。ここで SQL が実行できるので、以下のようにデータベースを作成します。feijoa のところはデータベース名が入りますが、最初は先ほど作ったユーザーと同じ名前にしておくと良いでしょう。

CREATE DATABASE feijoa LC_COLLATE 'ja_JP.UTF-8' LC_CTYPE 'ja_JP.UTF-8' ENCODING 'UTF8' TEMPLATE template0;

少し時間がかかりますが、プロンプトが戻ってきたらデータベース生成完了です。確認してみましょう。

SELECT datname, datcollate FROM pg_database;

上記で、既存のデータベース名とその Collation(文字の照合順序)が表示されます。feijoa は無事有ったでしょうか?

なお、もっと簡単な方法として postgres=# のプロンプトが出ている状態で

\l

とするだけでリストが確認できます。(¥えん、lえる です)

なお、ターミナル等で先程から PostgreSQL のシェルに入ったままであった場合は

\q

で抜けることができます。(¥えん、qキュー です)

設定ファイルの編集

さて、PostgreSQL のシェルから抜けたら、今のうちに設定ファイルを修正しておきましょう。

sudo vi /etc/postgresql/9.4/main/postgresql.conf
#listen_addresses = 'localhost'         # what IP address(es) to listen on;
# comma-separated list of addresses;
# defaults to 'localhost'; use '*' for all
# (change requires restart)

という箇所を見つけて下さい。ここは、外部から TCP/IP で接続された場合の、内部での待受け IP アドレスです。カンマ区切りで複数記述できるので、この PostgreSQL がインストールされている Raspberry Pi の IP アドレスを指定しておいてください。(**の部分はお使いの Raspberry Pi にあわせてください)

listen_addresses = 'localhost,192.168.**.**'

保存したら次は pg_hba.conf です。

sudo vi /etc/postgresql/9.4/main/pg_hba.conf
# IPv4 local connections:
host all all 127.0.0.1/32 md5

という箇所があるので、この次の行に

host    all             all             192.168.**.**/32          trust

を追加して下さい。この IP アドレスは、Raspberry Pi の PostgreSQL に接続することのできるコンピューターに割り当てられている IP アドレスです。この後、GUI ツールをインストールしますが、その GUI ツールを動作させるコンピューターの IP アドレスです。

GUI ツールの利用

SQL はデータベースを操作するためのとても便利な言語ですが、とても沢山の命令がありすぐには覚えられないでしょう。そこで、GUI(グラフィカル・ユーザー・インタフェース)のデータベース操作アプリケーションを使うのが便利です。

PostgreSQL で有名な GUI ツールは、 PgAdminⅢ でしょう。Ⅳ は現在ベータ版しかないようなので、とりあえずは Ⅲ を使うことにします。

PgAdmin

PgAdminサイト

ここの Download のメニューからお使いの OS 用の PgAdmin 3 をダウンロードして下さい。Windows 版の最新は pgadmin3-1.22.1.zip のようですね。

バージョン選択

ダウンロード画面

ダウンロードしたら解凍しましょう。中に msi が入っていますので、それをダブルクリックです。

インストール1

インストール2

インストール3

インストール4

インストール5

インストールが終わったら起動してみましょう。

PgAdmin での DB 操作

PgAdmin 3 の起動画面はこんな感じです。(当サイトでは既にローカルに PostgreSQL がインストールされていて、それに対する接続が登録されているのでサーバに 3 つの接続が登録されています)

PgAdmin3の起動後の画面

まず、PostgreSQL サーバーへの接続ですが、画面左上に有るコンセントのアイコンが、データベースへの接続情報の新規作成です。クリックすると次のような画面が開きます。各設定項目を入力しましょう。

新しいサーバ登録

OK をクリックすると、オブジェクトブラウザで Raspberry Pi の PostgreSQL の情報が確認できるはずです。

※本当は SSH で接続したいのですが、どうも上手く生きませんでした。後日、良い方法が分かったら追記します。

登録されたサーバー情報

テーブルの作成

では、現在接続している feijoa データベースにテーブルを作成してみましょう。PostgreSQL にはデータベースの下に SCHEMA(スキーマ)という要素を持つことが出来ます。

例えば、プログラムで使うテーブルは public スキーマに入れ、ログを記録するテーブルは logs スキーマに入れるといった、一種のディレクトリ分けのようなことが可能です。

今回はとりあえず、public スキーマ内に test_table1 テーブルを作成してみましょう。public のテーブルを右クリックして「新しいテーブル...」です。

まず、プロパティタブでテーブルの概要を入力します。

テーブルの概要

次に、列タブに移ってカラムの定義をしていきます。id カラムと name カラムを定義しましょう。

id カラムに設定する serial 型は特殊な型で、レコードを追加する度に 1 ずつ自動で値が増えていきます。

id カラム

name カラムは character varying(45) としました。character varying は可変長の文字列が格納できる型で、この場合、最大で 45 文字までが格納できます。マルチバイトの文字も 1 文字としてカウントされます。

altテキスト

最後に、制約タブでこのテーブルの id カラムに対して「主キー」(プライマリ・キー)を設定します。プライマリ・キー(primary key)は、そこに記録される情報は一意であり、更にヌル(null)を許さないという特別な制約です。このため、あるプライマリ・キーを持つレコードは必ず 1 つであることが保証されます。

制約の登録

これで OK で確定させると、テーブルが登録されます。

登録された test_table1 テーブル

SQL の実行

次は SQL を発行してみましょう。画面上にある SQL ボタンをクリックして下さい。Query を入力する画面が開きます。

Query ウィンドウ

この SQL エディタに、次のように入力して下さい。

INSERT INTO test_table1(name) VALUES('テスト タロウ');
INSERT INTO test_table1(name) VALUES('テスト 二郎');
INSERT INTO test_table1(name) VALUES('テスト saburou');

入力したら、画面上の緑の▲ボタンで実行です。

画面下のメッセージタブに

Query returned successfully: one row affected, 31 msec execution time.

と表示されればクエリの実行は成功です。PgAdmin 3 の画面に戻って test_table1 が選択されている状態で、画面上の水色のテーブルアイコンをクリックしてみましょう。次の画像のようにレコードが追加されている事を確認して下さい。id についても、何も入力していなくても連番が自動でふられているのを確認して下さい。

テーブル内容確認

この後はいろいろと自由に操作してみましょう。

まとめ

PostgreSQL の導入から利用までを簡単に纏めてみました。

ソケットサーバー「HAL」では、MySQL、PostgreSQL、SQLite を簡単に扱うためのライブラリである DataMapper Lite を導入する事が決定しました。

DataMapper Lite を利用すれば、簡単な記述で SQL が発行できるようになります。近日中にリリースいたしますし、既に ソケットサーバー「HAL」をご購入されている方には無償で追加ファイルをご提供いたします。

また、さらに簡単に SQL が発行できる本製品 DataMapper(有償)も少し遅れてリリースされます。

ぜひ、DataMapper Lite をご利用いただき、データベースというものが如何に簡単に扱える便利なものであるのかをご実感ください。


SQL のバイブルを最後に紹介して締めさせて頂きます。

【改訂第3版】 SQLポケットリファレンス (POCKET REFERENCE) (技術評論社)

この記事へのコメント

※現在コメントはMarkdown記法が強制です。>>Markdown の書き方


この記事に返信

このコメントに返信