PostgreSQLとは、MySQLと並んでオープンソースDBの代名詞とも言える存在です。
MySQLは小規模もしくは非商用利用、PostgreSQLは業務用と棲み分けができていた時代もありましたが、webサービスの多くがMySQLが使用するようになり、その境目にも変化が生じてきています。しかし未だ業務システムでは、PostgreSQLが使われているケースが多い現状があることも事実です。
そこで今回は、ビジネス用途でPostgreSQLが選ばれる理由について考えてみたいと思います。
MySQLについては、データベースでMySQLを使用するメリットとはも参考にしてみてくださいね。
商用RDBMSと大差ない安定性と機能を持つPostgreSQL
PostgreSQLは多くのオープンソースソフトウェア(OSS)との連携が可能であり、これらOSSサードパーティ製の機能を組み込むことによって、商用のRDBMSと大差ない性能を発揮することが可能です。
もともと標準のSQLにより準拠した形を目指していたこともあり、Oracle製のDBなどに匹敵する機能を持つようになりました。かつてはOSSであるがゆえに、商用利用時のサポート体制に不安がありましたが、その点も改善されつつあります。
日立製作所、野村総研などの大企業が商用サポートを提供していることから、今後商用のサポートを実施するSIが増えることも予想されます。
エンジニア・コンサルタントの高単価案件は、アサインナビがご紹介しています。
導入時のコストが安く複雑なシステムにも対応しているPostgreSQL
OSSであるがゆえに、導入時のコストで商用RDBMSに対してアドバンテージがあることは、周知の事実です。その一方で、PostgreSQLでは「Join方式の充実」など、商用利用を想定した複雑な業務システムにも対応できる機能を有しています。
MySQLではJoin方式を一部のみサポートしていますが、PostgreSQLでは「マージ」や「ハッシュ」といったJoin方式もサポートしているのが特長です。
基幹業務系のシステム開発現場にいる方は、これらの操作が可能なことがどれだけ大切かおわかりになるかと思います。特にレポートや帳票出力系のプログラムを組む場合は、必須の機能かもしれません。
大量のデータを持つ複数のテーブルを結合したあとで、集計処理や分析処理を走らせるといった使い方に適していることが、ビジネス用途で重宝される理由のひとつなのです。
エンジニア・コンサルタントの高単価案件は、アサインナビがご紹介しています。
かなりおおらかなライセンス基準もPostgreSQL人気の秘密
PostgreSQLは独自のライセンス基準を設けており、「BSDライセンス」と呼ばれています。他のOSSライセンス基準と異なり、機能の改変や追加を行っても公開の義務がなく、当然ながら商用化の義務もありません。
一般にOSSライセンスの9か条と呼ばれるもののひとつに、「原本の完全性を保ち、改変した場所がわかるようにする」といった内容があります。PostgreSQLの場合は、このOSSライセンスの原則を一部緩和しているため、ほぼ自由自在にカスタマイズが可能ということになるのです。
「利益よりも、ただ良いものを作る」というオープンソースの基本的な考え方を、より発展させた結果、ビジネス的に成功を収める要因になっているのかもしれませんね。
企業やベンダーにしてみれば、自社のサービスに特化したカスタマイズが自由にでき、機能拡張も比較的容易なことから、低コストで自社サービスを構築したいビジネス用途での支持を集めているのです。
エンジニア・コンサルタントの高単価案件は、アサインナビがご紹介しています。
アップデートとサードパーティー利用で完成度が高まった
前述したようにPostgreSQLはOSSサードパーティの機能を組み込み、さらに度重なるアップデートによって、弱点らしい弱点がないバランスの取れたRDBMSへと進化を遂げました。
かつては、速度的な点でMySQLやOracle製のDBに後れをとっていた時期もありましたが、それもほぼ克服しつつあります。特にバージョン8はデータとフラグの処理を改善したことで更新速度が速くなりました。よって、性能面でも企業の要求を十分に満たすものになっているのです。
PostgreSQLのストアドプロシジャー PLpg/SQL
PostgreSQL 編19 – ストアドファンクション、function、PL/pgSQL、トリガー
■ストアドファンクション (ストアドプロシジャ) ・SQL の組み込み関数以外にユーザが独自の関数を作ることができる。 language 'sql' では、単純なものしか作成できない。 Oracle の PL/SQL と同等のものは、以下で説明する PL/pgSQL で作成する。 drop function gettest1(char); create function gettest1(char) returns int8 as 'select count(*) from testm where key = $1' language 'sql' ; select gettest1('a001'); gettest1 ---------- 1 drop function gettest1(char); create function gettest1(char) returns int8 as 'select count(*) from testm where key like $1 || ''%''' language 'sql' ; select gettest1('a'); gettest1 ---------- 2 ■PL/pgSQL ・language 'plpgsql' では、PL/pgSQL の制御構造を持ったストアドファンク ションが作成できる。構文は Pascal 言語に似ている。 ・PL/SQL とは違い PL/pgSQL 内ではトランザクションコマンドは使えない。 しかし、ADO - ODBC や JDBC でのトランザクション配下から、呼ばれた ストアドやトリガーは、ちゃんとロールバック可能である。 実用システムとしては、まったく問題ないと考える。 ・標準インストール状態では、PL/pgSQL は使用できないようである。 create function の language 'plpgsql' で、次のエラーが出るときは、 createlang されていない可能性がある。 Unrecognized language specified in a CREATE FUNCTION: 'plpgsql'. Pre-installed languages are SQL, C, and internal. Additional languages may be installed using 'createlang'. ・PL/pgSQL が使用可能かは、次のように調べる。 select * from pg_language; lanname | lanispl | lanpltrusted | lanplcallfoid | lancompiler ----------+---------+--------------+---------------+------------- internal | f | f | 0 | n/a C | f | f | 0 | /bin/cc sql | f | f | 0 | postgres ・plpgsql がなければ、Cygwin のコマンドで、次のように入力する。 エラーなしで終了すれば、OK である。 createlang -h 127.0.0.1 -d sak -U administrator plpgsql | | |_ 言語 plpgsql | |_ 管理者ユーザ |_ データベース ・再度 psql で、インストールされたか確認する。 select * from pg_language; lanname | lanispl | lanpltrusted | lanplcallfoid | lancompiler ----------+---------+--------------+---------------+------------- internal | f | f | 0 | n/a C | f | f | 0 | /bin/cc sql | f | f | 0 | postgres plpgsql | t | t | 16577 | ・これで、PL/pgSQL が作成できる。 drop function gettest1(char); create function gettest1(char) returns int8 as ' declare p1 alias for $1; ret int8; begin select count(*) into ret from testm where key = p1; return ret; end; ' language 'plpgsql' ; select gettest1('a001'); gettest1 ---------- 1 drop function gettest1(char); create function gettest1(char) returns int8 as ' declare p1 alias for $1; ret int8; begin select count(*) into ret from testm where key like p1 || ''%''; return ret; end; ' language 'plpgsql' ; select gettest1('a'); gettest1 ---------- 2 ■データベーストリガー ・実行のタイミングは、before、after から選べる。 PostgreSQL のトリガは、trigger から function を呼び出す形になる。 new、old は、新と旧のデータを示す。 tg_op は、'INSERT'、'UPDATE'、'DELETE' を示す。 drop function trifunc1(); create function trifunc1() returns opaque as ' declare s varchar(20); begin if tg_op = ''INSERT'' then s := ''triins''; insert into test2m values(new.key, s); else if tg_op = ''UPDATE'' then s := ''triups''; insert into test2m values(new.key, s); else s := ''tridlt''; insert into test2m values(new.key, s); end if; end if; return new; end; ' language 'plpgsql' ; drop trigger tritest1 on testm; create trigger tritest1 before insert or update or delete on testm for each row execute procedure trifunc1() ; select * from testm; key | data1 | data2 | data3 ----------+-------+-------+------- a001 | 1 | 2 | 3 a011 | 1 | 2 | 3 b002 | 10 | 20 | 30 c003 | 100 | 200 | 300 select * from test2m; key | code1 -----+------- insert into testm values ('t001', 11, 22, 33); select * from testm; key | data1 | data2 | data3 ----------+-------+-------+------- a001 | 1 | 2 | 3 a011 | 1 | 2 | 3 b002 | 10 | 20 | 30 c003 | 100 | 200 | 300 t001 | 11 | 22 | 33 select * from test2m; key | code1 ----------+---------- t001 | triins
アシスト
Postgres Plus が選ばれる3つの理由
柔軟なライセンス体系
Postgres Plusには、プラットフォームによって選択が可能な2つのライセンスモデルがあります。物理サーバ、クラウド・サーバ、仮想サーバなどシステムが分かれている場合でも、環境にあった契約が可能です。また、サブスクリプションモデルを採用しているため、システム計画や成長に合わせた運用を実現します。
オールインワン型製品体系
Postgres Plusには、ボトルネック分析や性能監視、さらにサーバの負荷分散やセキュリティ強化の機能など、多くの企業で必須となる機能が集約されています。このため、追加要件の発生や用途の拡大に伴うデータ量の増加、そして追加コストの発生など、システムの構築/運用に際して発生するこれらの課題解決を強力にサポートします。
豊富な管理機能
Postgres Plusは、DBの運用や開発のための管理機能やツールが豊富です。そのため、既存のOracleアプリケーション資産のスムーズな移行や、DBの一元管理が可能となります。また、Oracle Databaseとの互換性が高いため、技術スキルもそのまま利用でき、システムコストの削減にも貢献します。