本記事では、「PostgreSQL」の基礎知識や特徴、最新版の動向についてご紹介いたします。比較対象に挙げられやすい「MySQL」との違いや、PostgreSQLを利用するメリットなども併せて解説していますので、PostgreSQLの利用を検討されている方は、ぜひ参考にしてください。
PostgreSQLとは
「PostgreSQL」とは、オープンソースタイプのORDBMS(オブジェクトリレーショナルデータベース管理システム)です。「ポスグレ」「ポストグレエスキューエル」と呼ばれ、「postgres」と書かれることもあります。ORDBMSである本システムは、大規模または複雑なデータの管理が得意です。Excelのような表形式で保存したデータを1つの箱とし、別の箱と関連付けして、大量のデータを取り扱えるようにします。
RDBMS(リレーショナルデータベース管理システム)として基本的な機能を備えており、SQL言語を使ったデータの作成・編集といったデータ管理機能や、サブクエリ、トリガー、バックアップなどの障害回復機能、同時実行制御などに対応しています。拡張性が高く、インデックスやデータ型などさまざまな要素のユーザー定義が可能です。
データベースサーバーとしての世界シェアを見ると、PostgreSQLは第4位です。上位にはOracleやMySQL、Microsoft SQL Serverが並びます。有名企業の商用データベースと並ぶほど多くのユーザーに支持されており、人気の高いデータベースです。順位は飾りではなく、その機能性・性能から商用サービスやシステムでも利用されています。
(参考元:https://db-engines.com/en/ranking_trend)
(参考元:https://products.sint.co.jp/topsic/blog/database-postgresql)
PostgreSQLが誕生した歴史をたどると長く、名称が何度か変化しています。原形となった「POSTGRES」は、1986年にカリフォルニア大学バークレイ校のコンピューターサイエンス学科で開発プロジェクトが開始され、主に研究を目的とした開発が続きました。
そのあとPOSTGRESのプロジェクトが終了し、Andrew Yu氏とJolly Chen氏という2人の学生による改良がスタートしました。1994年にSQL言語が追加され、ソースの整理が行われたあと、1995年にPostgres95としてリリースされています。
改良に関わった2人の学生の卒業後、プロジェクトの引き継ぎが行われ、時代に合わせて名称の変更も検討されました。1996年になってから時代とシステム自体の能力を考慮し、PostgreSQLという名前に変更されて現在に至ります。PostgreSQLは、オリジナルであるPOSTGRESのソースを引き継いでおり、さらに多くの便利機能を実装した形で、さまざまな企業や機関で活用されています。
MySQLとの違い
PostgreSQLとMySQLは、どちらもオープンソースのデータベース管理システムであり、世界中の企業で活用されています。搭載されている機能は似ていますが、厳密に見れば異なる部分も多いです。違いとしてわかりやすいのが、MySQLはRDB(リレーショナルデータベース)とされているのに対し、PostgreSQLは“オブジェクト”リレーショナルデータベースとされているところでしょう。
RDBはExcelのような表形式でデータを保存・格納していく方式で、データベースという場合は一般的にこちらを指します。もう片方のORDBMSは、オブジェクト単位でデータの管理を行う方式で、オブジェクト指向のプログラミング言語で操作・参照できるのが特徴です。
類似する両システムの違いとして、まずRDBであるMySQLは機能がシンプルで、幅広い用途に使いやすいシステムとして知られています。大量のクエリの処理が可能で、高速で動作し、ACID特性を満たすなど信頼性が高いことでも有名です。
より詳しい機能性の違いを挙げると、MySQLではDDL操作のノンブロッキング実行ができます。テーブルへのブロックなどが発生しないため、ALTER TABLEなどを実行した場合の処理が速く快適です。そのほかトランザクション処理の分離レベルにも違いがあり、REPEATABLE-READ方式が採用されています。ファントムリード(あるトランザクションが読み出しを複数回行うと、その間に他のトランザクションが追加したデータが増えてしまうこと。)の防止に「ネクストキーロック」という仕組みが備わっており、データの堅牢性を保持しています。
次にサポート面を見ると、ユーザーコミュニティに加えてMySQLを所有しているOracleによる保守があり、企業独自のユーザーサポートも受けられます。アップデートも活発で、新機能の追加やセキュリティ改善が日々行われています。MySQLを利用する有名なWebサービスとしては、TwitterやNetflix、Wikipediaなどが挙げられます。
一方、ORDBMSであるPostgreSQLはというと、MySQLと違い複雑・大量なデータの操作や管理を得意としています。通常のデータベース管理システムと異なり、PostgreSQLはさまざまな意味で多機能です。テーブルとカラムの情報を扱う以外に、データ型・インデックス型・関数の定義ができます。同時実行性に優れているほか、ACID特性に準じ、NoSQLにも対応しています。さらにカスタマイズ性が高く、プラグインの開発・導入はもちろん、C言語などで作られたカスタム関数を組み入れることも可能です。
また、MySQLと比べて膨大なデータのソートを得意とします。PostgreSQLのほうが、よりソートのアルゴリズムが優れており、大量のデータを効率よく扱える仕組みが備わっているからです。そのため、テーブル結合で利用できるアルゴリズムも豊富です。ネステッドループ結合のほか、データ量が多い場合に有用なハッシュ結合・ソートマージ結合という3種類のパターンを活用できます。
トランザクション処理の分離レベルについては、READ-COMMITTED方式が採られています。運用する際はファントムリードなどの注意点がありますが、ネクストキーロックの仕組みがないため、MySQLよりロック競合しにくいでしょう。システムのアップデートも活発で、ユーザーコミュニティがメインのサポートにより、開発と保守が行われています。
以上が、両システムの主な違いです。どちらがより優れているとは一概にいえませんが、多くの場合は、シンプルさと多機能さを天秤にかけて選ばれます。使いやすさ・簡単さ・速度・参考情報の多さなどを重視する場合はMySQL、大規模なデータベース構築や複雑なクエリの実行を要する場合は、それらの操作・管理が得意なPostgreSQLが適しています。目的に応じたシステムを選択するようにしましょう。
PostgreSQLの特徴
主な特徴としては、「無料で使えること」「日本語に対応していること」「多機能かつ高性能であること」などが挙げられます。日本語はバージョン6.3から実装されており、標準で使用できます。
機能性の面で見ると、データベースとして必要な機能はすべて備えています。基本機能に加えて、returning句やトランザクション、Join方式の多様さ、全文検索機能、ストアドプロシージャなどの機能が利用可能です。
PostgreSQLは、最新の標準SQLのバージョンに準拠するよう開発されています。ほかのデータベース管理システムにおける標準SQL対応の状況を見ると、どの程度対応しているのかが不明確です。正確な情報は公開されておらず、試してみるまでわかりません。その点、PostgreSQLだけはSQL準拠についての情報を公開しており、どの程度まで機能をサポートしているのかが確認できます。
そしてPostgreSQLはオープンソースで、基本的に無償で利用できる点も注目すべきでしょう。もっとも、無償とはいえライセンスによる制限はあるため、決まりを守ったうえで利用する必要があります。PostgreSQLのライセンスは、非コピーレフト型のBSDライセンスが適用されます。
BSDライセンスは、著作権表示と免責条項の明記をすれば、再利用・再配布・改変が可能です。ライセンスを遵守すれば商用のプログラムにも利用できます。BSDライセンスは何度か修正されており、最新版は「3条項ライセンス」とも呼ばれています。
ほかのデータベース管理システムを利用した場合、ライセンス費用は莫大なものになります。たとえば、Enterprise版のOracleデータベースは570万円、有償版のMySQLは60万円(4ソケット以下)の費用がかかります。その点PostgreSQLは、高性能なうえに商用目的でも無償で利用できるため、破格のシステムといえるでしょう。
サポートしているプログラミング言語も幅広く、C/C++言語やJava、Python、Delphi、JavaScriptなどさまざまな言語に対応しています。多くのOSとも互換性があり、WindowsやMacはもちろん、Linux系、Oracle Solarisなどでも利用可能です。
オープンソースで無償利用できるPostgreSQLですが、性能も本格仕様を常に目指しています。商用と肩を並べるほどの機能と性能を備えており、改善も繰り返し行われています。そのため、PostgreSQLを選択する最大のメリットは、本格仕様ながら低コストで導入できるという点が挙げられます。
現状ではサードパーティや対応する周辺機器が少ないという欠点こそあるものの、連携できるオープンソースソフトウェアは豊富です。サポート体制はユーザーコミュニティ主体のため、トラブル時の対処が不安という意見も出るでしょう。しかし、商用サポートを提供している日立製作所や野村総合研究所などの企業もあるため、もしものときはサポートを受けられるため安心です。
PostgreSQLを利用している主なWebサービスとしては、YahooやFacebook、Instagram、Skype、Appleなどが挙げられます。フリーで利用できるシステムながら、世界的に利用者が多いWebサービスで活用されるほど高性能です。大規模なWebサービスで本格利用できるだけの優れたスペックがあるため、無料といえども十分に信頼できるシステムと考えてよいでしょう。
最新版PostgreSQLの機能
最後に、最新版PostgreSQLのアップデート情報や搭載機能についてご紹介します。
PostgreSQLの最新バージョンは13.3
2021年7月21日現在、PostgreSQLの最新バージョンは13.3です。13.2から13.3へのアップデートにおいては、クラッシュ・エラー・バグを引き起こす原因部分の修正や、セキュリティアップデートなど50個近い修正が実施されています。変更点の一部を上げると、以下のようなものがあります。
・配列の添字計算における整数オーバーフローの防止
・いくつかのメモリリークの修正
・COLLATE式の結果が照合できない型へ勝手に変換されるバグの修正
特に整数オーバーフローについては、確実なクラッシュや意図しないデータ書き換えが可能となり、システムの脆弱性を高めてしまうおそれがあるため、由々しき問題とされていました。13.3のバージョンでは修正されており、セキュリティ性の向上が見られます。
最新版PostgreSQLに備わる機能を紹介
最新版PostgreSQLには、さまざまな機能が搭載されています。以下では主な機能について、「オブジェクト管理全般の機能」「SQL実行に関する機能」「ストアドプログラム作成に関する機能」「DBA向け機能」の4つに分けて見ていきましょう。
○オブジェクト管理全般の機能
・ツリー表示
・オブジェクトの作成、コピー、検索
・CREATE文やデータのリバース表示
・ソース編集
・統計情報取得
・データ出力
○SQL実行に関する機能
・SQLの作成(実行・結果表示・GUI操作)、実行計画の表示
・オブジェクト名候補のポップアップ表示による補助
・SQL文の整形補助(改行・右揃え自動調整など)
・様々なファイル形式でのSQL結果出力(Excel・クリップボード)
○ストアドプログラム作成に関する機能
・高度なスクリーンエディタ
・コンパイル、プログラムの実行
○DBA向け機能(データベースシステムの導入や管理、記録を行う人向けの機能)
・ログインしたユーザーの情報表示および権限付与
・データファイルの情報表示および編集
・プロセスやロック情報、待機イベント情報の一覧表示
・バックアップ
このほかにも、細かく見ればさまざまな機能が搭載されています。また、PostgreSQLの強みとしては、地理情報システム「GIS」に対応している点も注目すべきでしょう。これにより、主に位置に関係する空間データの管理がシステム上で行えます。地図と組み合わせることで、位置の表示や検索などにも活用可能です。実際に地図検索システムで利用された実績もあり、GISオブジェクトのための関数群を利用できます。
最新版PostgreSQLの特長
最新版PostgreSQL13(バージョン13.3)の特長をいくつかご紹介します。バージョン13では先述した通り、さまざまな改善が行われました。インデックス関係やルックアップシステム、クエリ関係のパフォーマンスが向上し、大規模なデータベースを稼働するうえで、よりメリットがある形へ進化しています。
最新版の特長をより詳しく知るために、進化した機能をいくつか掘り下げて見ていきましょう。まず、検索処理に欠かせないデータ構造であるインデックスについてですが、PostgreSQL13ではB-treeインデックスの重複データ処理を効率的に処理する仕組みが導入されました。これにより、B-treeの全体的な領域使用量が削減され、全体的なクエリパフォーマンスが向上しています。
ソート機能においては、インクリメンタルソートが新たに導入されました。データのソートがすでに実行された状態の場合、追加のデータソートが発生した場合に高速で実行されます。
次に、管理面で最適化された部分について見ていきましょう。本システムで実行できるコマンドの中には、「vacuum(バキューム)」という不要領域の削除に関係する処理があり、システムを管理するうえで欠かせないものです。データベース上のデータは、削除されても非表示になっているだけで、記憶領域上には残っている状態となることがあります。そういった不要領域を削除・整理し再利用できるようにするのが、vacuumの役割です。最新版では、このvacuum処理の改善が行われています。
PostgreSQLの前バージョンでは、vacuumを実行するときに余計な処理が付与され、処理が遅延してしまう問題がありました。最新バージョンでは、並列バキュームを導入することで問題の改善が行われており、処理パフォーマンスが向上しています。
最後に、セキュリティ強化された拡張システムについてご紹介します。本システムには、後付けでシステムに拡張機能をインストールする機能があります。以前のバージョンでは、インストールできるのはデータベーススーパーユーザー限定でしたが、最新版のバージョン13からは新要素として「信頼できる拡張機能」が追加されました。今まで拡張機能を扱えなかったデータベースユーザーは、スーパーユーザーがマークしたものならインストールできるようになります。これにより拡張機能の利便性を追求しつつ、システムの堅牢性向上も図られています。
まとめ
PostgreSQLは、オープンソースのデータベース管理ソフトで、商用目的でも無償で利用できます。特に大規模なデータ管理や、複雑なデータ操作を要する用途に向いています。商用に匹敵する機能性を備えたシステムとして活用可能です。誕生してからの歴史は長く、コミュニティユーザーが主体となって、今も活発に更新が続いています。
弊社の提供するSI Object BrowserはPostgreSQLにも対応したデータベース開発支援システムです。テーブルの閲覧、SQLの編集/実行や各種オブジェクト作成、ストアドプログラムのデバッグ、Excel形式でのテーブル定義書の出力などをGUI上で簡単に実行できます。PostgreSQLを効率的に開発したいという方は、ぜひトライアルをお試しください。
- カテゴリ:
- 【DB入門】RDBMS全般
- キーワード:
- postgre
- postgreSQL
- SQL
- データベース
- MySQL