PostgreSQL は、信頼性と性能の面で高く評価されているオープンソースのオブジェクトリレーショナル・データベース管理システム(ORDBMS)です。その主な機能では、コンピューティングにおける最新のベストプラクティスをサポートしながらデータを安全に保存、検索することを意図しています。
30 年以上にわたる精力的な開発の取り組みと、専用に設けられたオープンソース・コミュニティの支援により、SQL Server や Oracle など、業界トップクラスの商用データベースに匹敵する存在となりました。今や数多くの組織に選ばれる、オープンソースのリレーショナル・データベースです。
PostgreSQL の仕組み
PostgreSQL は、クライアントとサーバーをネットワーク上で別々のホストに配置できるクライアント・サーバーのアーキテクチャを採用しています。サーバーのプログラムがデータベースのファイルを管理し、複数のクライアント・アプリケーションから発せられるデータベースへの同時接続要求に応え、接続を実行します。リモート・クライアントは、ネットワークやインターネットを介してサーバーと接続できます。
Postgres の検索パス
PostgreSQL では、スキーマを検索する順序や、スキーマ修飾を使用する必要のないスキーマを、search_path 変数で判断できます。
検索パスで返される最初のスキーマはカレント・スキーマと呼ばれています。テーブルなどの新しいオブジェクトの作成時にスキーマ名を指定しないと、テーブルはカレント・スキーマに作成されます。
Search_path は複数のレベルで設定できます。どの検索パスの設定を使用するのかを、これらのレベルで PostgreSQL に伝えます。設定できるレベルには、次のようなものがあります。
- 機能レベル:ある機能内で機能が実行されているまでの期間有効
- セッション・レベル:セッションが存在するまでの期間有効
- データベース・ユーザー・レベル:新規セッションの場合に有効
- サーバー・ユーザー・レベル:新規セッションの場合に有効
- データベース・レベル:新規セッションの場合に有効
Postgres と PostgreSQL
PostgreSQL は、カリフォルニア大学バークレー校で 1986 年に開始された POSTGRES プロジェクトに起源があります。1993 年に POSTGRES プロジェクトが終了した後、1995 年に POSTGRES のコードをベースに Postgres95 が開発され、クエリ言語の PostQUEL に代わる存在として、SQL 言語インタプリタが追加されました。
1996 年に Postgres95 という名称が古くなったとき、元来の POSTGRES プロジェクトの内容を反映し、SQL も新たにサポートするという意味で、PostgreSQL という名称が使用されるようになります。PostgreSQL が正式な名称ですが、Postgres もニックネームとして受け入れられており、現在では、PostgreSQL を意味する言葉として、Postgres という名前が広く使用されるようになっています。
PostgreSQL の全文検索
PostgreSQL 全文検索では、フルテキスト・データベースにある単一のドキュメントやドキュメントの集合を検索できます。また、クエリの要件に合致した自然言語ドキュメントの特定や、クエリとの関連性に応じた、自然言語ドキュメントの分類も可能です。
LIKE や ILIKE という条件句でも文字列の検索クエリを実行できますが、テキスト内の言葉をインデックス化しないため、性能は低くなります。一方、全文検索では、ドキュメントをインデックス化して検索のスピードを速めており、トークンの正規化をよりきめ細かく制御する複数の辞書も使用できます。
PostgreSQL の全文検索を実装するには、次の 2 つの関数を使用します。
- to_tsvector:ts は「Text Search(テキスト検索)」の略語です。この関数は、tsvector というデータ型のトークンのリストを作成するのに使用します。
- to_tsquery:この関数は、特定の言葉や表現のベクトルを照会するのに使用します。
PostgreSQL の性能が特に重要である理由
PostgreSQL は複数の業界でその採用が進んでいます。データ・ウェアハウスの用途や、トランザクション性の高い複雑な用途で大量のデータを必要としている場合によく利用されています。このようなタイプのアプリケーションでは、性能は主要な要素です。
PostgreSQL には、性能を強化し最適化するいくつかの機能が搭載されています。最新バージョンの v14 では、複雑なデータ型や、JavaScript Object Notation(JSON)の非構造化データもサポートしています。コネクションの同時実行性やクエリの並列処理、書き込み負荷の高いワークロード、論理複製に関して機能の進化が見られ、性能の強化に向けた PostgreSQL の継続的な取り組みがうかがえます。
利用可能な PostgreSQL のバージョン
PostgreSQL の最新バージョンは、2021年9月30日にリリースされたバージョン 14 です。JSON や 連続しない範囲のデータとの連携を容易にする複雑なデータ型と機能も新たにサポートしています。また、負荷の高いワークロード、分散型のワークロード、管理と可観測性、セキュリティに関して機能が強化されています。
現在サポートされているその他のバージョンには、13、12、11、10、9.6 があります。バージョン 9 とバージョン 10 は、Linux x86(64 ビット)、Linux x86(32 ビット)、Mac OS X、Windows x86(64 ビット)、Windows x86(32 ビット)で利用できます。また、バージョン 11 から 14 は、Mac OS X と Windows だけで利用可能です。
SQL を凌ぐ PostgreSQL の 3 つの優位性
PostgreSQL には、SQL Server を凌ぐ次のような 3 つの優位性があります。
オープンソースで無料
PostgreSQL は、無料かつオープンソースのオブジェクトリレーショナル・データベース管理システムで、PostgreSQL Global Development Group が保守を担っています。また、活発な活動を続け、新規および既存の機能に関する情報を継続的に提供するコミュニティの支援も受けています。一方、SQL Server は、Microsoft が開発と保守を手掛ける独自の商用データベース管理システムです。エントリーレベルのエディションからフル機能のエンタープライズ・エディションに至る複数のエディションが提供されています。
さまざまな OS を幅広くサポート
PostgreSQL は、Windows や Linux、OS X、Unix、FreeBSD、HP-UX、NetBSD、OpenBSD、Solaris などの複数のオペレーティング・システムで幅広く利用可能です。一方、SQL Server を利用できるのは、Windows と Linux のプラットフォームに限られます。
同時実行制御
PostgreSQL には、多版型同時実行制御(MVCC)による強力な同時実行管理の仕組みが実装されているため、複数のプロセスによる共有データへの同時アクセスや、共有データの同時変更が可能です。これに対し、SQL Server では、同時実行の問題や長時間実行するクエリを特定できますが、プロセスはしばしばロック、ブロック、デッドロックの影響を受けます。
PostgreSQL を利用すべきケース
PostgreSQL が効果を発揮するのにふさわしいいくつかの具体的なケースをご紹介しましょう。
スケーラブルな NoSQL のワークロード
最新の Web サイト・アプリケーションでは、顧客対応で 1 秒間に最大数十万ものリクエストを処理しています。このため、ほとんどの組織では、スケーラビリティが重要な要素になっています。
オブジェクトリレーショナル・データベースである PostgreSQL は、1 つの製品でリレーショナルの機能とドキュメント指向の機能を提供するため、さまざまな用途に対応できます。また、PostgreSQL は、Django や Node.js をはじめとする人気の高い最新の Web フレームワークや、Java、Python、Ruby on Rails、PHP などの言語と高い親和性があります。さらに、PostgreSQL の複製機能では、必要に応じてデータベース・サーバーを大量にスケールアウトすることも可能です。
OLTP、分析、ビジネス・インテリジェンス
あらゆる規模の金融機関が、さまざまなアプリケーションや製品の利用において、PostgreSQL を主力のデータベースにしています。PostgreSQL は ACID(原子性、一貫性、独立性、永続性)に完全に準拠しており、OLTP(オンライン・トランザクション処理)のワークロードに最適です。また、PostgreSQL では、Matlab や R をはじめとする数学ソフトウェアとの連携により、分析やビジネス・インテリジェンスの処理も可能です。
空間データ
PostgreSQL に空間データベース拡張の PostGIS を組み合わせれば、SQL や空間データの分析で、地理オブジェクトの位置も照会できます。PostGIS は標準に忠実に準拠しており、さまざまな形式の幾何学データを処理できる数多くの関数を提供しています。加えて、PostGIS を、QGIS と GeoServer の両者に連携させれば、ジオデータの処理がさらに容易になります。
PostgreSQL に関する 4 つの質問
PostgreSQL に関してよく耳にするいくつかの質問にお答えしましょう。
MySQL と PostgreSQL の大きな違いは何ですか?
PostgreSQL はオブジェクトリレーショナル・データベース管理システムです。対して MySQL はリレーショナル・データベース管理システム(RDBMS)です。Postgres では、拡張性と標準への準拠に重点が置かれています。
一方、RDBMS の側面で見ると、Postgres は、ACID に準拠したトランザクション型のシステムであり、更新可能ビュー、マテリアライズド・ビュー、トリガー、外部キーの機能を有しています。また、PostgreSQL は JSON のデータ型をサポートしているため、JSON のデータの保存や、JSON 固有の関数と演算子による非リレーショナル・クエリの実行が可能です。
MySQL よりも PostgreSQL を使用すべきケースは?
MySQL は、行と列を持つテーブルにデータを格納する RDBMS です。Web アプリケーションやカスタム・ソリューションのために統合と拡張性を重視しており、高いセキュリティを有する RDBMS が必要な場合には、MySQL が理想的な選択肢になります。
PostgreSQL は、リレーショナル・データベースの機能と NoSQL の機能を持ち、非構造化データの照会ができるオブジェクトリレーショナル・データベースです。込み入った手順や統合、複雑な設計、データの整合性が必要なときには、PostgreSQL を選択します。
PostgreSQL と MySQL はどこがどう違うのか?
いくつかの別の観点から PostgreSQL と MySQL を比較してみましょう。
- ライセンス:PostgreSQL は無料かつオープンソースのソフトウェアであり、PostgreSQL ライセンスの下で使用できます。MySQL のソースコードも、GNU ライセンスによりオープンソースとして利用できます。しかし、MySQL は Oracle が所有しており、商用で利用する場合は、複数の秘密保持契約を交わす必要があるほか、有料となり、さまざまなバージョンが存在します。
- 性能:PostgreSQL は、高速でのデータの読み取りと書き込みが必要なデータ・ウェアハウスの用途やデータ分析の用途に最適です。これに対し、高速の読み取りだけが重視されるオンライン分析処理(OLAP)やオンライン・トランザクション処理(OLTP)のシステムには、MySQL のほうが適しています。
- ACID への準拠:PostgreSQL は ACID に完全に準拠していますが、MySQL が ACID に準拠しているのは、NDB や InnoDB Cluster のストレージ・エンジンと一緒に使用しているときだけです。
PostgreSQL が広く普及している理由は?
PostgreSQL はリレーショナル・データとドキュメント指向データの両方をサポートしており、さまざまな種類のデータを同じデータ・テーブルで保存、照会できます。スピード、セキュリティ、堅牢性に優れているため、ほぼ全ての用途に最適です。PostgreSQL では、性能と効率性が継続的に強化されているので、Oracle のような確固たる地位を築いた商用のデータベースからも、PostgreSQL へとユーザーの移行が進んでいます。
ピュア・ストレージで PostgreSQL ワークロードの処理を高速化
NVMe ストレージとピュア・ストレージのオールフラッシュ・アレイによるスピード、性能、信頼性により、モダン・データ・エクスペリエンスを実現します。
DBMS of the Year 2020(2018、2017)受賞の栄誉に輝く PostgreSQL は、その性能の速度と信頼性により、ますます普及が進んでいます。ピュア・ストレージが行ったテストでは、PostgreSQL は同等の SAS-DAS システムよりも FlashArray ストレージ上で優れた性能を発揮することが示されました。FlashArray//X は、どのデータベース・ワークロードでも変わらない安定した性能を提供し、DAS では利用できない豊富なエンタープライズ機能を備えています。
ティア 0 とティア 1 のワークロードには、FlashArray//X が提供する、性能を最適化した NVMe と NVMe-oF のエンドツーエンド・ストレージを是非ご利用ください。