テックノート

テックノート>はじめましてPostgreSQL! Vol.3

  • DB(EDB Postgres/PostgreSQL)
2012.07.17

はじめましてPostgreSQL! Vol.3

はじめましてPostgreSQL! Vol.3

PostgreSQLに使いやすいGUIツールやOracle Databaseの互換機能が追加されたPostgres Plus Advanced Serverについて解説します。(全4回連載)


Vol.3 Postgres Plus Advanced Server(体験編1)

Postgres Plus Advanced Serverとは


Postgres Plus Advanced Serverは、オープンソースRDBMSであるPostgreSQLをエンジンとしてEnterpriseDB社が開発を手がける企業向けのデータベース製品(RDBMS)です。

PostgreSQLの標準機能に加えて多彩なGUIツールと、Oracle Databaseとの互換性やOracle Databaseとの連携ツール、移行ツールを備えているので、Oracle Databaseを利用しているデータベース管理者や開発者にとって、活用しやすいRDBMSとなっています。

本特集ではPostgres Plus Advanced Serverの特徴についてご紹介します。

今回はOracle Databaseとの互換性機能を見ていきます。

Oracle Database互換性機能


Postgres Plus Advanced Serverには、Oracle Databaseとの操作性の互換を目指したEDB*Plus、EDB*Loaderなどのツールや、SQL互換、PL/SQL互換などのアプリケーション開発を支援する機能、データ移行を補助するツールなど、主に以下の互換機能が実装されています。

互換機能


機能マトリックスだけだと、互換性機能の良さがわかりにくいと思いますので、実際にSQL*Plusと同一の外観を備えるコマンドライン・ユーティリィティであるEDB*Plusを利用しながら確認してみましょう。

Oracle Databaseとの操作性の互換


Oracle Database利用者であれば、おなじみのSCOTTユーザとEMPテーブル、DEPTテーブルを利用します。

まずは、EDB*Plusを利用して、SCOTTユーザでデータベースにログインしてみます。

ログイン


上記のように、SQL*Plusと同じ操作感でデータベースにログインできます。SQL*Plusコマンドと同じDESCRIBEコマンドでEMPテーブルのテーブル定義も確認できます。

では、EDB*Plusコマンドの種類を確認してみましょう。

コマンドの表示


以上のようにEDB*Plusコマンドの数は少ないですが、SQL*Plusを利用した運用スクリプトの中で利用頻度の高いコマンドである「@」、「SPOOL」、主な「SET」や、検索表示結果を制御する「COLUMN」コマンドなどが用意されているため、不自由さを感じることは少ないと思います。

次に、データディクショナリ・ビューを参照してみましょう。

データディクショナリ・ビュー


user_ind_columnsディクショナリ・ビューを参照することで、インデックス名、インデックスが定義されている列名、インデックス作成時に列が指定された順番などのインデックス定義情報を確認できます。

Oracle Database互換として提供されているデータディクショナリは以下の通りです。

すべてのデータディクショナリが実装されているわけではなく、また、同じ名前のビューでも含まれる情報が少ない場合があるため注意が必要です。不足している情報はPostgreSQLのシステムカタログを参照することになりますが、多くのオブジェクト情報をデータディクショナリから得ることができます。

Postgres Plus Advanced Server 9.1でサポートするデータディクショナリ・ビュー

Postgres Plus Advanced Server 9.1でサポートするデータディクショナリ・ビュー

アプリケーション開発を支援する互換機能


アプリケーション開発を支援する互換機能として、SQL、PL/SQL互換、トランザクション制御の各機能を紹介します。

SQLはANSI、ISOにより規格化されていますが、商用RDBMS、オープンソースRDBMSを含めて、それぞれのRDBMSの独自構文が存在します。Oracle DatabaseのSQLの方言として有名な結合文および外部結合演算子「(+)」、ROWNUM擬似列で、SQL互換性を確認してみましょう。

SQL互換性


以上のようにPostgres Plus Advanced ServerではOracle Databaseの方言を含むSQLを実行できる互換性を備えていますが、以下の「NULL値の比較」のように、異なる部分も存在します。

NULL値の比較


アシストではSQL互換性の確認を行うために、Oracle Database教育セミナーである「SQLトレーニングコース」、「SQL応用コース」で紹介している318個のSQLをPostgreSQLとPostgres Plus Advanced Serverそれぞれで実行してみました。Oracle Databaseと同一結果となったSQLはPostgreSQLでは187個(66%)であるのに対して、Postgres Plus Advanced Serverは284個(89%)となりました。

Oracle DatabaseとのSQL互換性


Postgres Plus Advanced ServerでSQL構文エラーとなったSQLの多くは「ALTER TABLE」などのDDLと「MERGE」文であり、一般的なSELECTやUPDATE、DELETE、INSERTのDMLでは良好な結果を得られています。

Oracle Database、SQL Server、IBM DB2といった商用RDBMS間でもSQL関数の互換性の課題はあるため、Postgres Plus Advanced ServerはOracle Databaseと高いSQL互換性を備えていると言えます。

それでは、Oracle DatabaseのPL/SQL互換性機能を確認してみましょう。

PostgreSQLでもPL/pgSQLと呼ばれるブロック構造型のプロシージャル言語が実装されており、構文自体もPL/SQLと似ているので、PL/pgSQLを習得するハードルは高くはありませんが、既存のPL/SQLのプログラム資産をPL/pgSQLに変換する必要があります。

Postgres Plus Advanced ServerではPL/SQLと同じ構文で、ファンクション、プロシージャ、パッケージの作成、プログラム内でのトランザクション制御が可能となり、Oracle Databaseの主要な組み込みパッケージにも対応しています。

ストアプロシージャの作成と実行


Postgres Plus Advanced Server 9.1でサポートする組み込みパッケージ

Postgres Plus Advanced Server 9.1でサポートする組み込みパッケージ

PL/SQL互換性を、弊社のOracle Database 教育セミナーである「PL/SQLプログラミングⅠ」、「PL/SQLプログラミングⅡ」で紹介している171個のサンプルプログラムで確認したところ、全体で131個(77%)のPL/SQLサンプルプログラムが実行できることが確認できました。

PL/SQL互換性


「基本的なPL/SQL」と「組み込みパッケージを利用したPL/SQL」に分けた場合、「基本的なPL/SQL」は83%、「組み込みパッケージを利用したPL/SQL」では72%の割合でPL/SQLを実行できています。「基本的なPL/SQL」として分類したPL/SQLでコンパイルエラーとなったのは、PRAGMA EXCEPTION_INITで指定するエラー番号の許可範囲が異なること、暗黙カーソルの「SQL%」とバルク動的SQLの一部機能が実装されていないことが原因であり、「組み込みパッケージを利用したPL/SQL」で発生したコンパイルエラーの多くは、それらの組み込みパッケージがPostgres Plus Advanced Serverで実装されていないことが原因でした。

以上のように、PL/SQL互換機能によって、既存のPL/SQLプログラム資産を活用できる可能性が高くなるだけでなく、開発者のPL/SQLのプログラムノウハウも活かすことができる結果となりました。

なお、Postgres Plus Advanced ServerのPL/SQL互換機能は、IBM DB2 9.7以降のPL/SQLサポート機能としてIBM社に技術供与されています。

アプリケーション開発を支援する機能として、最後にご紹介するのがトランザクションの互換性機能です。PostgreSQLでもトランザクションをサポートしていますが、トランザクション内のSQLでエラーが発生した場合、トランザクション自体が異常終了するため、トランザクション開始時まで遡って処理を再実行する必要があります。

Postgres Plus Advanced Serverのサーバ・パラメータである「edb_stmt_level_tx」を「on」に設定することで、Oracle Databaseと同様に文単位の暗黙的なロールバックが可能となります。これにより、アプリケーション側で想定するトランザクションの動作が同一となるため、既存のアプリケーション開発ノウハウを活かすことができます。

トランザクション処理


以上のように、Postgres Plus Advanced ServerのOracle Database互換機能によって、Oracle Databaseの知識やスキルを活かして、アプリケーション開発やデータベース管理に取り組むことができるため、PostgreSQLをはじめて利用するユーザにとっては、Postgres Plus Advanced Serverは活用しやすいRDBMSと言えるのではないでしょうか。

次回は、エンタープライズ向けに拡張された機能のうち、SQLヒント、DRITA(Dynamic Runtime Instrumentation and Tracing Architecture)、Postgres Enterprise Manager のIndex Advisorなど、性能関連の機能を中心にご紹介します。

  • Postgres Plus は、EDB Postgres の旧製品名です。


連載記事

はじめましてPostgreSQL! Vol.1
はじめましてPostgreSQL! Vol.2
はじめましてPostgreSQL! Vol.4


執筆者のご紹介

アシスト岸和田 隆

岸和田 隆
ビジネスインフラ技術本部

1995年入社。Oracle Database の研修講師、フィールドサポート、新バージョンの検証を経て、2007年 自社ブランド「DODAI」の準アプライアンス製品の企画・開発、2009年 PostgreSQL、2011年 EDB Postgres、MySQL /MariaDB、2012年 Oracle Database Appliance、2016年 Delphix の事業立上を経験。 現在は「データベースのアシスト」を目指した事業戦略やプロダクトマーケティングを担当している。
趣味:フットサル、ゴルフ、スキー、キャンプ、子供のサッカーチームのカメラマン担当。

アシスト関 俊洋

関 俊洋
ビジネスインフラ技術本部

2006年入社。データベース・システムの構築や運用トラブルの解決といった業務を経験し、その後新製品の検証やソリューションの立ち上げを経てエバンジェリストへ。2016年にクラウド事業を立ち上げ、現在はクラウドとデータベースの二足の草鞋を履いている。

本記事をご覧いただいている方へのご案内

最後までご覧いただきありがとうございました。
本記事でご紹介した製品・サービスに関するコンテンツをご用意しています。また、この記事の他にも、IT技術情報に関する執筆記事を多数公開しておりますのでぜひご覧ください。


関連している記事

  • DB(EDB Postgres/PostgreSQL)
2017.09.21

EDB Postgres 9.6 最新技術
~EnterpriseDBが牽引するPostgresの今と未来~

データベースに一時的なパフォーマンスダウンが発生した場合、調査にはパフォーマンスダウンが発生していた当時、つまり、過去のデータベースの情報が必要です。

  • DB(EDB Postgres/PostgreSQL)
2015.12.21

PostgreSQLサポート最前線の現場から

データベース管理システムの運用でトラブルが発生したらどうするか。データベースサポートスペシャリストが現場目線の解決Tipsをお届けします。

  • DB(Oracle Database)
  • DB(EDB Postgres/PostgreSQL)
  • DB(その他)
2014.10.06

SQLの観点から「Oracle Database」「PostgreSQL」「MySQL」の特徴を整理しよう!

SQLの視点からRDBMSの主な差異を紹介し、異なるRDBMSに移行する際の注意点やRDBMS選定のポイントに迫ります。

ページの先頭へ戻る