はじめに
PostgreSQL(ポストグレスキューエル)はオープンソースのリレーショナルデータベース管理システム(RDBMS)です。Linux、macOSといったUNIX系OSはもちろんのこと、Windowsにも対応しています。すべてのソースは公開されており、用途を問わず無料で利用できます。またBSDライセンスという、オープンソースのライセンスの中でも非常に緩やかなライセンスを採用しているので、独自に機能の改変や追加を行っても公開義務はありません。
データベースは、簡単に言えばデータを保存しておく「箱」の集まりです。もっと言えば、その箱に仕切りをつけることで、簡単にデータを整理した状態でしまったり、そのデータをいろいろな場面で楽に取り出したりできるようにしたものがデータベースです。リレーショナルデータベース(RDB)は、その箱を、列と行を持つテーブルのセット、つまり表形式で持ち、1つの箱(=表)に入ったデータを別の箱のデータと関連付けることで、複雑なデータや大規模なデータを柔軟に取り扱うことができるようにしてくれます。RDBMSは、このRDBをコンピュータ上で操作できるようにした管理システムです。
1986年、カリフォルニア大学バークレイ校でPOSTGRES(POST-inGRES)プロジェクトが始まり、当初Postgres(ポストグレス)として誕生したデータベースは、1996年以降にはPostgreSQLへ名前を変えます。その後、インターネットを通じて世界中の研究者/ソフトウェア開発者などのボランティアらの手によって、多様な機能追加や絶え間ないバグ修正を20年以上に渡って施されてきたPostgreSQLは、現在では他の商用/オープンソースのRDBMS製品と比較してもまったく遜色のない、高い性能、機能性、そして信頼性を誇るRDBMSへと成長しました。
本書は、日頃からPostgreSQLと深く関わっている執筆陣が、豊富な経験と知識をもとに、そのインストール方法、SQLの使い方から、アプリケーションの作成、そして運用にいたるまでを、さまざまな分野/視点から紹介した解説書です。PostgreSQLの最新の機能であるロジカルレプリケーションやパラレルクエリに関しても解説しています。
本書を通じて、読者の皆さまにPostgreSQLの魅力をお伝えすることができればと願っております。
改訂にあたって
本書はPostgreSQL11を対象に執筆しました。前版は2010年にPostgreSQL9.0を対象に執筆しましたが、この間にPostgreSQLは8回のメジャーバージョンアップを経て、成長を続けてきました。
改めてこの間の進化を振り返ってみると、まず大規模データのOLAP系の処理について格段の機能・性能の向上が図られ、増大し続けるデータとその分析へのニーズに対応してきたことがわかります。一方、従来PostgreSQLをはじめとするRDBMSが得意としてきたOLTP(オンライントランザクション処理)系の処理についても着実な性能向上を実現しました。また、運用性やセキュリティなど非性能面についても世界中の開発者・ユーザーの努力によってPostgreSQL本体へ多様な改善が取り込まれました。
PostgreSQL本体以外に目を向けると、その高い拡張性を生かしてさまざまな野心的な機能がエクステンションとして実装されるとともに、クラウドベンダー各社によりPostgreSQLをベースにしたDBaaS(Database as a Service)が開発され一般的に利用されるようになるなど、PostgreSQLの利用の裾野はますます広がりを見せています。
このように目覚ましい発展を遂げているPostgreSQLですが、本書はPostgreSQLの入門書です。初版以来、初めてPostgreSQLに触れる、あるいはそもそもデータベースに触れるのが初めてという方から、ちょっと使ったことはあるけどもう少し詳しく知りたいという初心者の方に向けて執筆しています。
そのため、第4版でも新しさに焦点を当てるのではなく、新旧問わず今後もPostgreSQLの基本として初学者が押さえておくべきポイントを選別し、全面的に改訂を行いました。
本書序盤の第1章~第4章では、PostgreSQLの概要やインストール方法、基本的なSQLについて解説しています。PostgreSQL、データベースに触れるのが初めてという方は、まずここまで押さえることを目標にしてみてください。ある程度の前提知識がある方は不足している基礎知識がないかチェックしてみるとよいでしょう。
中盤の第5章、第6章では、PostgreSQLを使ったアプリケーションを構築します。プログラミングの経験があまりない方でも読み進められるよう、プログラムの詳細な解説とともにステップ・バイ・ステップでアプリケーションを作り上げていきます。
終盤の第7章~第13章では、PostgreSQLの基本的な仕組み、セキュリティ、運用、レプリケーションについて解説しています。PostgreSQLのDBA であれば押さえておきたいポイントを記載していますが、やや難しい内容も含むため、PostgreSQLに初めて触れる人は初めからすべてを理解しようとせず、必要のある箇所や興味のある箇所からかいつまんで読んでみるとよいでしょう。
本書を活用することによってPostgreSQLを使いこなすユーザーが増え、PostgreSQLの利用が促進されることを願っています。
1.1 データベースとは
ビジネスのIT化が進む中で、これまで多くのシステムが開発されてきました。これらのシステムに共通しているのは、「システムは何らかのデータを管理している」ということです。システムが管理するデータとしては、顧客情報や商品の売上記録などが挙げられますが、システム内にはこうしたデータが大量に集められています。顧客情報や商品の売上記録は、企業にとって財産となる重要なデータですが、これらのデータを正しく効率的に活用するには、データを集中的に管理し、きちんと保守をする必要があります。こうしたニーズを満たすために考え出された仕組みがデータベースです。
本来、データベースとはデータの集合を指す言葉であって、形のない概念的なものです。その概念的なデータベースをコンピュータソフトウェア上で操作/管理できるようにしたものをデータベース管理システム(DataBase Management System:DBMS)と呼びます。本書で取り上げるPostgreSQLもこのDBMSの1つです。
なお、一般にデータベースといえばDBMSを指します。本書でもDBMSを「データベース」と記述することがあるので、文脈に応じて読み替えてください。
1.1.1 データベースの役割
DBMSには、主に次の機能が備わっています。
-
データの管理
データベースで取り扱うデータの形式を定義します。また、データを追加/削除/更新/検索する機能も提供します。 -
トランザクション管理
口座振替の入金処理と出金処理を必ずセットで実行するなど、関連する複数の処理で矛盾が起こらないよう、データベースの操作の一貫性を保証します。 -
同時実行制御
複数のユーザーが同時にデータを操作しても、データに不整合が生じないように制御します。 -
セキュリティ機構
データベースが権限のないユーザーによってアクセスされ、データベース内に格納されていた機密情報などが漏えいすると、重大な問題を引き起こします。データベースには、このような不正アクセスを防止するセキュリティ機構があります。 -
障害回復管理
コンピュータが故障するなど、データベースに何らかの障害が発生した場合でも、データベース内のデータを障害が発生する前の状態に復元する機能が搭載されています。
1.1.2 データモデル
DBMSでは、データを効率良く操作するために、データを何らかの統一された形式で表現し(データモデル)、管理します。代表的なデータモデルは、データを関係(リレーション:relation)で表現する関係モデルです。「関係」の概念は、しばしば表(テーブル)を用いて説明されます(図1.1)。
関係モデルでは、関連する表を連結したり、表の一部を取り出したりといった操作をしながらデータを利用します。PostgreSQLを含め、現在の商用データベースの多くは、この関係モデルを使っています。関係モデルを利用したDBMSをリレーショナルデータベース管理システム(Relational DataBase Management System:RDBMS)と呼びます。
表形式で格納されたデータを操作するには、「SQL」と呼ばれる専用の言語を使用します。SQLについては、第4章で詳しく説明します。
1.2 PostgreSQLの歴史
今やオープンソース系のDBMSとして高い人気を誇るPostgreSQLですが、このDBMSがどのようにして生まれ、発展していったのか、これまでの歩みを簡単に振り返ってみます。
1.2.1 POSTGRES
PostgreSQLは、1986 年に「POSTGRES」という名前で誕生しました。開発の中心となったのは、カリフォルニア大学バークレイ校のMichael Stonebraker 教授で、主に研究開発を目的として開発されました。
POSTGRES の設計については、興味深い論文が残っています。この論文にはPOSTGRES の目標が掲げられており、そこには現在のPostgreSQLにも受け継がれている機能が記述されています。たとえば、複合型のサポートやユーザー定義可能な型などがあります。
なお、POSTGRESでは、データの操作をSQL言語ではなく「POSTQUEL」という言語で操作するようになっています。
その後、研究やビジネスにPOSTGRESを使用する場面が増えてきましたが、本来の研究目的以外でのPOSTGRESのメンテナンスやサポートなどに時間が費やされてしまい、POSTGRESプロジェクトはバージョン4.2を最後に1993年に解散しました。
1.2.2 Postgres95
POSTGRESは、カリフォルニア大学バークレイ校での開発終了後、Andrew YuとJolly Chenという学生によって改良されました。この改良によって、POSTGRESではPOSTQUELに代わってSQL言語を使うようになりました。また、巨大化していたソースコードの整理も行われました。改良が終わったPOSTGRESは、1995年にWeb上でPostgres95という名前で公開されました。
1.2.3 PostgreSQL
Andrew YuとJolly Chenが卒業した後、現在のPostgreSQL開発チームへプロジェクトが引き継がれました。また、Postgres95という名前では1996年以降はふさわしくないということで、PostgreSQLと名前を変更し、バージョンを6.0としました。PostgreSQLのバージョン番号6.0から9.6までは、「8.2.4」や「9.0.1」といったように、「x.y.z」という形式で付けられていました。「x.y」までの数字をメジャーバージョン、そのあとの「z」をマイナーバージョンと呼びます。
バージョン番号10以降は「x.y」という形式で付けられるようになり、「x」がメジャーバージョン、「y」がマイナーバージョンを表します。マイナーバージョンは、主にバグ修正版です。一方、メジャーバージョンの番号は、新機能の追加などで大幅に変更された場合に上がります。メジャーバージョンが上がった場合、データを新バージョンへ移行する必要があります。
初期のPostgreSQLは、日本語などの英語以外の言語には対応していませんでした。そこで、石井達夫氏が日本語を扱うための機能を追加し、バージョン6.3でその機能が正式に取り込まれました。バージョン6.3 では、日本語に対応させるためにコンパイルオプションを使用する必要がありましたが、バージョン7.3 からは標準で国際化対応になっており、日本語、中国語、韓国語などさまざまな言語を扱うことが可能です。
現在では、インターネット上で主にメーリングリストを中心としてオープンに開発が行われています。開発体制は、コアメンバーと呼ばれるプロジェクトの中心メンバーと、主要開発メンバー、バグを見つけてパッチを提供するその他のプログラマで構成されています。日本にもPostgreSQL開発者が存在します。メジャーバージョンが上がるごとに、PostgreSQLに追加された主な機能を表1.1にまとめて示します。
この表を見るとわかるように、すでにPostgreSQLは商用データベースと比べても遜色のないものとなっています。
1.3 WindowsユーザーのためのPostgreSQL
PostgreSQLのWindows版パッケージには、Windowsユーザー向けに次のような機能拡張が施されています。
-
Windows用のインストーラが用意されている
GUI上でさまざまな設定が可能なインストーラが用意されています。また、PostgreSQLを管理するGUIツール「pgAdmin 4」が同梱されています。インストーラについては、次章で詳しく説明します。 -
WindowsのサービスにPostgreSQLを登録できる
WindowsのサービスにPostgreSQLを登録でき、Windowsの起動時に自動的にPostgreSQLを起動させることができます。実際の登録方法については、次章で説明します。 -
PostgreSQLが出力するログをイベントログに書き出すことができる
Windowsのロギング機構であるイベントログにPostgreSQLのログを出力できます。イベントログを見るには「イベントビューア」を使います(図1.2)。
1.4 PostgreSQL公式Webサイトの歩き方
PostgreSQLには開発チームが運営している公式Webサイトがあります。
Webサイトの画面上部にメニューが配置されており、次のようなメニューがあります。
-
About
PostgreSQLを初めて利用しているユーザー向けに、PostgreSQLの特徴がまとめられています。 -
Download
PostgreSQLのソースコード、各OS向けのビルド済みのバイナリファイルをダウンロードできます。 -
Documentation
PostgreSQLのマニュアル、各バージョンのリリースノートを参照できます。また、PostgreSQLの技術書籍情報(洋書)や、PostgreSQLのライブラリ、ツール、オンラインチュートリアルをまとめたリンク集、PostgreSQL公式Wikiへのリンクがあります。 -
Community
PostgreSQLに関する情報のコミュニケーション手段として、メーリングリストやIRC、Slack、ブログに関する情報がまとめられています。 -
Developers
PostgreSQLの開発者向けの情報がまとめられています。 -
Donate
寄付ページです。 -
Your account
PostgreSQL開発コミュニティ用のアカウント管理ページです。PostgreSQLのバッチ投稿やレビューの際などにアカウントが必要になります。