見出し画像

コンピュータシステムの中心にあるのはどんなもの? 〜データベース, PostgreSQL, CRUD〜

プログラム自学案内の26回目です。今回からはPostgreSQLを使って、データベース技術の案内を始めます。

これまで(3回目から25回目まで)、この連載ではひたすらWeb技術を案内してきましたが、データベースは、Webとは別の趣きのある、面白くかつ重要な技術です。どのようなコンピュータシステムでも、たいてい、その中心にはデータベースが位置しています。

データベースにはWebの知識は不要ですから、前回までのWeb技術の記事を読んでいない方、途中で挫折した方も、ぜひこの記事から始めてみてください。

なお、前回までの記事はこちらをどうぞ。

PostgreSQLって?

まずは今回の記事で扱う PostgreSQL を紹介します。

PostgreSQLとは何者か

PostgreSQL は無料で使えるデータベース製品で、RDBMSというジャンルに属しています。データベースはしばしばDBとも略されます(この記事でも以降はDBと略記します)。DBとは何か、RDBMSとは何か、といったところは、このあとPostgreSQLの実物を使いながら理解していきましょう。

PostgreSQLをどう読めばよいか

PostgreSQLは ポスグレ と読みます。ただ、違う読み方をする人もいます。正式な読み方は「ポストグレスキューエル」らしいのですが、日本でこの長い発音を聞くことは滅多にないはずです。

ついでですが、日本のITの現場の多くでは、DBデービー と読まれます。日本のIT従事者には、Dをデーと読み、Tをテーと読む人が多いからです(私もそのひとりです)。これは、業界の慣例に従っているだけですので、どうかバカにしないでください。

PostgreSQLの構成

ちょっと前置きが続きますが、PostgreSQLの構成をカンタンに説明しておきましょう。

PostgreSQLは、DBサーバとして動きます。DBサーバとはなんでしょう? サーバ、という言葉は21回目の記事でクライアントという言葉とともに「Webサーバ」として登場しました。聖徳太子的なヤツですね。

サーバの例(Webの場合)

この「サーバ」に似た役割をDBサーバは持ちます。

DBサーバは、DBクライアントから受け取った要求に従い、データを読んだり書いたりして、その結果を応答します。

psqlというDBクライアントが、PostgreSQLには付属しています。これは、コマンドラインで操作するアプリケーションです。この記事ではコマンドラインからpsqlを使って読み書きの要求文をPostgreSQLに送信し、PostgreSQLを操作するということをします。

以上を図解すると次のとおりになります。

コマンドラインからpsqlを使ってPostgreSQLを利用する

ちなみにですが、第24回の記事の最後にちらっとほのめかしましたが、Webサーバはデータの永続化にRDBMSであるPostgreSQLを使うことができます。

ちょっと先走った話をすると、Express.jsアプリとPostgreSQLを下の図のように連携させることが、この連載の最終的なゴールになる、というわけです。

この連載のゴール

説明が長くなりました。能書きはこのくらいにして、とにかく実物を使ってみましょう。

PostgreSQLの準備

PostgreSQLの実物を使うための準備が、まずは必要になります。ちょっとだけ道のりが長いです。

PCにPostgreSQLをインストール

まずはインストールです。

グーグルとか、PostgreSQLの公式サイトでその方法を調べても良いですが、例によって第2回の記事でパッケージマネージャをインストールしている人は、それを使うのがラクですね。

Windowsの場合

Chocolateyを使います。コマンドプロンプトかPowerShellを「管理者として実行」で開いてこうです。

choco install -y postgresql

インストール中にこんなメッセージが出るので、メッセージをコピペしてどっかにとっておきましょう。

WARNING: You did not specify a password for the postgres user so an insecure one has been generated for you. Please change it immediately.
WARNING: Generated password: xxxxxxxxxxxxxxxxxxx

インストールがおわったら、コマンドプロンプトを閉じて、開きなおします(こんどは管理者権限でなくても構いません)。 次のコマンドで postgres, psql コマンドが使えることを確認します。

postgres -V
psql -V

それぞれバージョンが表示されたら、インストールは終わりです。

Macの場合

homebrewを使います。ターミナルでこうです。

brew install postgresql

次に、PostgreSQLが自動起動するように次のコマンドを実行しておきます。

brew services start postgresql

最後に、次のコマンドで postgres, psql コマンドが使えることを確認します。

postgres -V
psql -V

それぞれバージョンが表示されたら、インストールは終わりです。

試しにPostgreSQLにログイン

ちょっと面倒な話ですが、PostgreSQLを使うには、まずはPostgreSQLにログインしなければいけません。で、ログインに必要なものといえば、ユーザ名とパスワードです。

インストール直後にログインに使えるユーザー名とパスワードは、chocoでインストールした場合と、brewでインストールした場合で変わります。

chocoでインストールした場合

ユーザー名はpostgres、パスワードはインストール中にコピっておいたやつです。 postgresという 管理用DBに接続するために、つぎのコマンドを入力します。

psql -U postgres -d postgres

パスワードが求められますので、インストール時にコピーしておいたメッセージから、パスワードをコピペして(ペーストされたパスワードは表示されませんが、ペーストされています)、Enterを押せば、PostgreSQLにログインできます。

brewでインストールした場合

ユーザー名はインストールしたときのMacOSのユーザー名です。これは、入力を省略できます。 postgresという 管理用DBに接続するために、つぎのコマンドを入力します。

psql -d postgres

パスワード入力は求められず、ログインできるはずです。

ログインできたらログアウト

postgres=#

これが表示されたら、ログインできたあかしです。

ここに、exit または quit または \q のどれかのコマンドを入力すると、PostgreSQLのDBからログアウトし、psqlが終了します。

さらに準備:ユーザ作成とDB作成

さきほどのお試しログインは、管理用のユーザで管理用のDBにログインしたわけですが、普段はこのユーザ、DBはあまり使いたくありません。そこで、普段使い用のユーザと、普段使い用のDBを作ります。

あらかじめ、次の3つを決めます。

  • ユーザ名

  • ユーザパスワード

  • DB名

この記事ではユーザ名をwatanabe, ユーザパスワードをpass, DB名をmydb としますが、お好きな名前に変えていただいて構いません。

さきほど同様、psql -U postgres -d postgres (または psql -d postgres) でログインしたあと、psqlに対して次のコマンドを入力し、ユーザとDBを作成します。

CREATE USER watanabe WITH CREATEDB CREATEROLE PASSWORD 'pass';
CREATE DATABASE mydb OWNER watanabe;

いったんPostgreSQLからログアウトしたあと、こんどは先ほど作成したユーザで作成したDBにログインできるかどうか確認します。

psql -U watanabe -d mydb

これでログイン出来たらようやく準備完了です(Macの場合はパスワードが無くてもログインできてしまいますが、気にしないでください)。 これから先は、作成したDBにpsqlでログインしていることを前提として話を進めます。

psqlでmydbにログインしたところ

体験!データベースへの読み書き

準備が終わったところで、DBの機能を体験してみましょう。DBの主機能は、永続化されたデータの読み書きです。永続化というのは 「電源を切っても失われないように取っておくこと」くらいに理解しておけばいいでしょう。

コマンド(SQL文)を入力してみる

psqlの画面に、次のコマンドを一行づつ、上から順にコピペしてEnterを押してみてください。なお、これらのコマンドはすべて、SQLという言語の文法で書かれているSQL文です。SQLについては次回の記事で突っ込んで紹介したいと思います。

/* データの読み書きの下準備として、
   『磯野家』というデータの入れ物をつくっておく */
CREATE TABLE isono_family (full_name text, age integer);

/* データの読み書き(CRUD)をする */
-- データの作成(Create)
INSERT INTO isono_family VALUES ('磯野波平', 54);

-- データの読みだし(Read)
SELECT * FROM isono_family;

-- データの作成(Create) その2
INSERT INTO isono_family VALUES ('磯野フネ', 51);
INSERT INTO isono_family VALUES ('磯野カツオ', 11);
INSERT INTO isono_family VALUES ('磯野ワカメ', 9);
INSERT INTO isono_family VALUES ('フグ田サザエ', 24);
INSERT INTO isono_family VALUES ('フグ田マスオ', 28);
INSERT INTO isono_family VALUES ('フグ田タラオ', 3);
INSERT INTO isono_family VALUES ('タマ', 4);

-- データの読みだし(Read) その2
SELECT * FROM isono_family;

-- データの更新(Update) フネさん、1つ歳をとる
UPDATE isono_family SET age = age + 1 WHERE full_name = '磯野フネ';

-- データの読みだし(Read) その3
SELECT * FROM isono_family;

-- データの削除(DELETE) タマ、サザエさんに踏まれて亡くなる
DELETE FROM isono_family WHERE full_name = 'タマ';

-- データの読みだし(Read) その4
SELECT * FROM isono_family;

最後のコマンド(データの読み出し(Read) その4)で、こんなふうに結果が返ってくるはずです。

データの読みだし(Read) その4 の結果

このサザエさん一家の情報は永続化されたデータですから、PostgreSQLに削除要求を出さない限り、ログアウトしてpsqlを終了させても、パソコンの電源を落としても、残りつづけます。

CRUDとは

上に示した一連のコマンドで、DBの代表的な4つの機能、Create(作成する)、Read(読み出す)、Update(更新する)、Delete(削除する)を体験しました。この4つをまとめて、その頭文字からCRUDと言うので、覚えておいて下さい。

PostgreSQL使うと何がうれしいの?

さて、体験した結果はいかがでしょうか。面倒くさい準備をしたわりには、SQL文もなんかまどろっこしいし、あんまり楽しくなかったかもしれません。

(——こんな面倒くさいことするより、表をExcelファイルで上書き保存するほうがラクじゃ?)

これは相当、ごもっともな感想です。ですが、RDBMSであるPostgreSQLには、さきほどの体験だけでは決して味わえない、次の3つの便利さがあるのです。

でっかい表に強い

DBはでっかい表に強いです。

もしExcelだと、100万行とかある表の、1行を更新しなきゃいけないなんていうときに、それ以外の全部の行を含んでファイルを読み込み、1行だけ変えて、もう一度全部ファイルに書き出す、みたいなことをしなければなりません。これは、けっこう非効率です。

ところが、DBの場合は、でっかい表のうち、必要な部分だけ読んだり、必要な部分だけ更新をかけたりすることが出来るのです。これが相当便利です。

登録・更新・削除がACID特性を持つ

RDBMSは登録・更新・削除の操作にACID特性を持っています。

ACID特性、この酸っぱそうな性質の説明は長くなるので割愛します。そのかわりにこの記事では、ACID特性がないふつうのファイル保存だと困るケースを1つ考えてみます。

「渡辺さん残高 $100,000」という内容をファイルに書き込もうとして、その途中、「渡辺さん残高 $10」まで書いたちょうどその瞬間に、停電が起きてしまった

レアケースですが無いとは言い切れないです。停電から回復したときに、渡辺さんの残高も$10から$100,000に回復する手立てがないと、これは相当ヤバいですよね。

ところが、PostgreSQLなどのACID特性があるRDBMSは、このような停電が起きたときにも、渡辺さんの残高が$10にならないようにする仕組みが備わっています。この仕組みがあると、相当に安心安全、便利なものです。

検索と集計と結合がラク

PostgreSQLは検索と集計と結合が超便利です。どんなDBでもだいたい検索はうまくやるのですが、PostgreSQLなどのRDBMSは、検索と組み合わせながら集計と結合をすることがさらに超得意なのです。

じつはここPostgreSQLの一番面白い機能なのですが、記事が長くなってしまったので、このRDBMSの超得意技の紹介は、次回の記事にゆずります。

PostgreSQLを学ぶには

さて、今回の記事での体験内容はわずかでしたが、これよりもはるかに豊富な機能が、PostgreSQLには備わっています。これをどのように知ればよいでしょうか?

もちろん入門書や入門記事を探すのも一つの手です。ですが、 ここ (https://www.postgresql.jp/docupage) に、PostgreSQL 公式サイトの文書の日本語訳や入門記事をはじめとした、相当豊富な文書があります。PostgreSQLやSQLを学習するにあたって、調べ事をするときには、まずはここを探してみると良いかと思います。

まとめと次回予告

今回の記事ではPostgreSQLのカンタンな紹介と導入、そしてCRUD体験をしてみました。

次回予告です。次回はPostgreSQLの一番面白い、RDBMSらしい機能、検索、集計、結合操作をSQLとともに紹介して、RDBMSの面白さを体験していただきたいと思います。

#コラム #プログラミング #独学 #案内 #DB #RDBMS #PostgreSQL #ポスグレ


この記事が気に入ったらサポートをしてみませんか?