PostgreSQL

出典: フリー百科事典『ウィキペディア(Wikipedia)』

PostgreSQL
開発元 PostgreSQL Global Development Group
最新版 8.4.0 / 2009年7月1日
対応OS クロスプラットフォーム
プログラミング言語 C
種別 オブジェクト関係データベース管理システム (ORDBMS)
ライセンス BSDライセンス
公式サイト www.postgresql.org
  

PostgreSQL(ぽすとぐれすきゅーえる: 発音例)は、BSDライセンスにより配布されているオープンソースオブジェクト関係データベース管理システム (ORDBMS) である。その名称は Ingres の後継を意味する「Post-Ingres」に由来している。単純に「Postgres」や「ポスグレ」と呼称されることも多い。

PostgreSQLはIllustraや、Illustraを買収しその技術を採りいれたInformixとともにオブジェクト関係データベース管理システム (ORDBMS) の実装のパイオニアとしての役割を果たしてきた。また、近年においては、機能、信頼性ともに目覚ましい発展を遂げており、商用のRDBMSと遜色が無くなってきている。

目次

[編集] プラットフォーム

  • UNIX系列LinuxMicrosoft WindowsOS/2 など多くのOSで動作する。
  • Windowsにおいては、バージョン7.4以前はCygwin上で動作させることが出来た。バージョン8.0からはネイティブでサポートされるようになった。Windows版ではGUIの管理ツールであるpgAdminやドライバ等を同時にインストールできるWindowsインストーラも提供されている。
  • 32ビット / 64ビット の両アーキテクチャ上で動作する。32ビット版では共有バッファサイズが最大2GBに制限されるが、64ビット版では上限は無い。LLP64モデルに対応していないため、Windows では32ビット版のみが利用できる。

[編集] 特徴

  • SQL92, 99の大部分と、2003, 2008の一部をサポートしている。(一覧 あり / なし)

[編集] 関数

関数(ストアドファンクション)によりサーバで実行される処理のまとまりを定義できる。 関数の定義には SQL の他、分岐やループをサポートする下記の言語で実装することが可能である。 言語によっては関数をデータベーストリガとして実行することもできる。

PL/pgSQL
Oracle Databaseで用いられるPL/SQLを参考にして実装されたビルトイン言語。
PL/PSM
SQL:2003 規格の SQL/PSM に則った構文を持つ。[1]
スクリプト言語
PL/Perl, PL/php, PL/Python, PL/Ruby, PL/sh, PL/Tcl, PL/Lua
コンパイラ言語
C言語, PL/Java
統計処理言語
PL/R

PostgreSQL はを返却する関数を定義することができる。 関数の出力は複数の行 (関係) であり、クエリの中でテーブルと同様に扱うことができる。

実行するユーザまたは定義したユーザのどちらの権限で実行されるかを指定して関数を定義できる。

[編集] インデックス

PostgreSQL は組み込みで以下のインデックスをサポートしている。 また、ユーザ定義インデックスを追加することもできる。

PostgreSQL のインデックスには以下の特徴がある。

  • 必要に応じて逆順でスキャンできる。逆順スキャン用のインデックスを別に定義する必要は無い。
  • 式インデックス (関数インデックス) を定義できる。複数の列の値を引数に取る関数の結果をインデックス化する。
  • 部分インデックス (条件付きインデックス) を定義できる。条件を指定し、条件に適合する行のみをインデックス化することで、インデックスのサイズを縮小できる。
  • クエリオプティマイザ (planner) は複数のインデックスを同時に使用するクエリ実行計画を作成できる。複数のインデックスの結果をメモリ上のビットマップとして併せ、そのビットマップに対応する行をテーブルから取得する。

[編集] トリガ

データベーストリガは SQL データ操作言語 (SQL DML) の文 (INSERT, UPDATE, DELETE), TRUNCATE) を実行した際に呼び出される。 利用例として、INSERT 文で挿入される値が妥当かの検証がある。

トリガはテーブルに対してのみ定義できる。 ビューに対するトリガが必要な場合には、代わりにルールを使用する。 複数のトリガが定義されている場合、アルファベット順に実行される。

トリガで実行される処理は関数として定義する。 トリガ用の関数の定義には SQL 関数は使用できないが、PL/pgSQL やその他の多くの関数用言語を使うことができる。

[編集] ルール

ルールにより SQL の内部表現である「クエリ木」を書き換えることができる。 一般的なルールの用途は、更新可能ビューを実現することである。

[編集] データ型

多くのデータ型が利用できる。

  • 配列 / 複合型
  • 任意の精度を持つ数値
  • 可変長文字列 / 可変長バイト列
  • 日時, 日付, 時間, 時間差分 (タイムゾーンの有無)
  • ブーリアン型
  • 幾何型
  • IPv4 / IPv6 アドレス, MAC アドレス
  • XML 型 (8.3以降)
  • UUID 型 (8.3以降)

可変長文字列と可変長バイト列には最大で 1GB を格納できる。一定のサイズを上回るデータ値は TOAST と呼ばれる機能により自動的に圧縮され別領域に配置される。そのため、ページサイズを上回るサイズの行であっても保存できる。

さらに、ユーザがデータ型を追加することもでき、それに対してインデックスを作成することもできる。 利用例として、GIS 用の型を GiST インデックスで検索可能な PostGIS プロジェクトがある。

[編集] ユーザ定義オブジェクト

ユーザはほとんどのデータベース・オブジェクトを追加できる。

  • データ型 (TYPE)
  • データの定義域 (DOMAIN)
  • 関数 (FUNCTION) と集約 (AGGREGATE)
  • 演算子 (OPERATOR)
  • 型変換 (CAST)
  • 文字コード変換 (CONVERTION)
  • 手続き言語 (LANGUAGE)
  • インデックス

[編集] バキューム

バキューム (VACUUM) とは、追記型アーキテクチャにおける不要領域を回収し、再利用又はOSに返却する処理である。 なお、バージョン8.3からはHeap-Only Tuples (HOT) が採用され、インデックスの変更を伴わない更新については、削除された行を直ちに再利用することが可能となり、バキュームの必要な頻度は下がった。

PostgreSQLは、MVCCの実現のため、追記型のアーキテクチャを採用している。 データを削除する際は実際のレコードは削除せず、該当行に削除マークを付けるのみである。 更新の際も内部的には削除と挿入を同時に行っている。 そのため、更新・削除が繰り返されるテーブルにおいては、たとえ理論的な行数が変わらなくとも、更新・運用を重ねるごとに物理的なファイルサイズが増加する。肥大化によるパフォーマンスの劣化を回避するため、次節に述べるバキューム作業を定期的に行う必要がある。

各バージョンによって以下の差異がある。

7.1 以前
データベースファイル内の未使用領域を解放しOSに返却する処理のみをサポートする。このVACUUMでは、処理中のテーブルに対して排他ロックが獲得されるため、VACUUMの間は対象テーブルへのアクセスがブロックされる。システムの規模やテーブルの行数にもよるが、本バージョンにおいてシステムの停止を伴わない運用は困難であった。
7.2
以前の動作を FULL 方式 (VACUUM FULL) とし、新たにコンカレント方式 (VACUUM) が実装された。現在、単にバキュームと言った場合、後者のコンカレントバキュームを指す。コンカレントバキュームでは、テーブルの排他ロックを伴わずに不要領域の回収を行う。不要領域に対して再利用可能フラグを付けるのみの処理となるため、コンカレントバキュームを行っても基本的にデータベースの物理的なサイズは縮小しない。しかし、以降の更新・挿入において、このとき回収した領域が優先的に使用され、更新・削除によるファイルサイズの肥大を防止できる。
7.3
インデックスもコンカレントバキュームの対象になり、肥大化から回復させるための定期的にインデックスを再編成 (REINDEX) する必要が無くなった。これによりデータベース・オブジェクトの排他ロックを要するメンテナンスが不要になり、無停止での運用が可能になった。
7.4
自動的にバキュームを行う contrib/pg_autovacuum モジュールが提供された。autovacuum はシステムを監視し、INSERT/UPDATE/DELETE の回数などの統計情報を利用して、適切なタイミングで適切なテーブルのみに対してバキュームを行う。このため、高度な知識を要すことなく、不要領域の増加を十分に抑えることが可能となった。なお、自動バキューム処理の際に参照される統計情報の記録はデフォルトでオフとなっているため、本機能を利用する際は統計情報の記録オプションもオンにする必要がある。
8.0
バキュームは多くのI/Oが必要なため、負荷の高い処理である。バキューム実行中のシステムの全体の性能悪化を防ぐため、バキュームを行う速度を制限する機能が追加された。ただし、バキューム自体の処理時間はその分多く要する。
8.1
contribより提供されていた自動バキューム (autovacuum) 機能が本体に統合された。不要領域の監視が効率化され、コマンドで発行した VACUUM との連携が可能になった。
8.2
トランザクションIDの周回がテーブル単位で管理されるようになり、定期的にデータベース単位でバキュームを行う必要が無くなった。テーブル単位のバキュームのみが必要である。また複数のバキュームを並列して実行した際の回収効率が向上した。
8.3
自動バキューム機能が標準で有効とされ、複数のテーブルに並列してバキュームを行うようになった。加えて Heap-Only Tuplesの採用により、バキューム自体の必要性が低減した。
8.4
Visibility Map で処理が必要なページを追跡するようになり、バキュームが高速化された。また空き領域のあるページを管理する Free Space Map のメモリ管理が自動化された。

[編集] パーティショニング

テーブル・パーティショニングは継承を用いて実現する。 これは、Oracle Database 7 のパーティション・ビューに近い実装である。

テーブルを作成する際、他テーブルを「親」テーブルとして指定し、継承関係を定義できる。 「子」テーブルに挿入された行は、親テーブルを参照した際にも取得される。 親テーブルに対する列の追加やCHECK制約の定義は自動的に子テーブルにも反映されるが、外部キー一意性制約は継承をサポートしていない。

パーティショニングされたテーブルへは親テーブルを通してアクセスする。 SELECT, UPDATE, DELETE 文は子テーブルを含むよう展開されるが、クエリの条件が CHECK 制約に適合しない子テーブルは設定により自動的に除外することもできるため効率よく処理できる。INSERT については子テーブルを直接指定するか、親テーブルにトリガを作成することで挿入先を指示する必要がある。

[編集] 全文検索

LIKE 述語と正規表現による文字列検索のほか、全文検索の機能を持つ。バージョン 8.3 以降は組み込みで、それ以前のバージョンでは contrib/tsearch2 として提供されている。この全文検索では文字列から単語を抽出し、転置テーブル (GIN) または単語空間を多次元木 (GiST) とするインデックスを作成できる。SQL/MM の全文検索とは異なり、「@@」演算子を使用する独自の文法で検索を行う。

SELECT * FROM テーブル WHERE to_tsvector(文字列カラム) @@ to_tsquery('検索クエリ')

標準では日本語の文字列から単語を抽出するパーサを持たないが、外部拡張である textsearch-ja を使用することで形態素解析による検索が可能となる。

また、標準の全文検索以外にも、Ludia (Senna を使用), pgestraier (Hyper Estraier), pgRast (Rast) などが外部拡張として存在する。

[編集] その他の特徴

[編集] 性能

[編集] CPU スケーラビリティ

バージョン 8.1 以降 CPU スケーラビリティは大幅に改善されており、中規模のハードウェアであればスケーラビリティを十分に確保できる。ただし複数 CPU への対応は 対称型マルチプロセッシング (SMP) を前提にしているため、NUMA アーキテクチャの性能を引き出すことは難しい。

7.4 以前
スケーラビリティはページ置換アルゴリズムとして採用されていた LRU により抑制されていた。ページを参照するたびに排他ロックが必要だったため、スケーラビリティは低かった。SMP 構成で 4CPU 程度が限界だった。
8.0
LRU に代わり ARC が採用された(ただし特許侵害の回避のため途中で 2Q に変更された)。ARC によりキャッシュヒット率は向上したものの、排他制御にオーバーヘッドが生じた。また、サブトランザクションをサポートするため追加された排他制御も新たなロック競合を生んだ。スケーラビリティは以前のバージョンと比較してむしろ低下しており、2CPU 程度で頭打ちになった。
8.1
ページ置換アルゴリズムはクロックに変更され、スケーラビリティが大幅に向上した。ページの参照には共有ロックのみが必要であるため並行してアクセスが可能になった。8CPU 程度が上限となった。[1] [2]
8.2
ページを管理するハッシュテーブルのロックが16個に分割され、共有ロックの実装に使用されるスピンロックへのアクセスが分散された。他にスピンロックの実装やサブトランザクションの排他制御が改良され、16CPU までのスケーラビリティが確認されている。[3]

[編集] 更新処理

過去のバージョンの PostgreSQL は他の関係データベース管理システム (RDBMS) と比較して更新処理が遅いと言われていた。追記型アーキテクチャが採用されており、更新処理は削除と挿入の組み合わせとして実現されていた。特に挿入の際にインデックスのキーを追加する必要がある点で性能差が生じていた。

しかし、バージョン 8.3 にて Heap-Only Tuples (HOT) と呼ばれる機能が採用され、インデックスのキーとなっている列の値に変更が無い場合にはインデックスの更新を回避できるようになった。HOT により約2倍のスループット向上が確認されている。[4]

[編集] ベンチマーク

業界標準の規格に則ったベンチマーク結果として 2007年8月の サン・マイクロシステムズ (Sun) による報告がある。以下のハードウェアを使用し、813.73 SPECjAppServer2004 JOPS@Standard であった。[5]

[編集] 周辺ツール

[編集] 管理ツール

[編集] psql

psql は PostgreSQL 付属のコマンドライン・プログラムである。 SQL を直接入力またはファイルから読み込んで実行するほか、スキーマ情報の表示などのメタコマンドを持つ。 また、SQL 構文やテーブル名などをタブキーにより入力補完できる。

[編集] pgAdmin

pgAdmin は GUI の管理インタフェースである。 Artistic License で配布される オープンソースソフトウェア (OSS) である。 多くのプラットフォームで動作し、日本語を含む多くの言語が利用できる。 また、専用の SQL エディタは psql と同様の入力補完機能を持つ。 Microsoft SQL Server Management Studio と似たインタフェースでデータベースを操作できる。

[編集] phpPgAdmin

phpPgAdminはウェブベースの管理ツールである。PHPで作られておりGPL で配布されている。名称はphpMyAdminと似ているが、PostgreSQLの特性により、操作性はかなり異なる。

[編集] その他

[編集] レプリケーション

PostgreSQL のレプリケーションは、サードパーティー製のオプションソフトウェアで実現できる。

各種レプリケーションソフトウェアの概要
名前 方式 開発元 特徴
Slony-I 非同期型マスタスレーブ Jan Wieck バージョンアップやバックアップにも利用できる。
Mammoth Replicator 非同期型マスタスレーブ Command Prompt, Inc. 商用からBSDライセンスに変更された
Londiste 非同期型マスタスレーブ Skype 堅牢性と扱いの容易さを目標とするツール。Python製。
Bucardo 非同期型マルチマスタ Greg Sabino Mullane BSDライセンス。
PGCluster 同期型マルチマスタ 三谷篤 ロードバランサ機能を備える。
Postgres-R 同期型マルチマスタ Markus Wanner 継続して開発中。
Cybercluster 同期型マルチマスタ Cybertec BSDライセンス。
pgpool-II 同期型プロキシサーバ SRA OSS Inc. フェイルオーバー機能を備える。
Sequoia 同期型プロキシサーバ/ドライバ Continuent Inc. 他DBMSにも接続できる。
PostgresForest 同期型プロキシドライバ NTTデータ JDBCラッパ。

[編集] 接続インタフェース

PostgreSQL はクライアントサーバモデルであり、データベースへの接続は主に TCP/IP ポート番号 5432 を用いて通信を行う。通信プロトコルは「フロントエンド/バックエンドプロトコル[2]」として公開されている。

各プログラミング言語ごとの接続インタフェース
言語 名前 ライセンス 開発元
C libpq BSD 本体同梱
psqlODBC LGPL http://psqlodbc.projects.postgresql.org/
ODBCng GPL https://projects.commandprompt.com/public/odbcng/
C (埋め込みSQL) ecpg BSD 本体同梱
C++ libpqxx BSD http://pqxx.org/development/libpqxx/
Java JDBC TYPE4 BSD http://jdbc.postgresql.org/
.NET (C#, VB) Npgsql BSD http://npgsql.projects.postgresql.org/
Perl DBD::Pg Artistic, GPL http://search.cpan.org/dist/DBD-Pg/
Python py-postgresql BSD http://python.projects.postgresql.org/
PyGreSQL BSD http://www.pygresql.org/
psycopg2 GPL http://www.initd.org/
pg8000 BSD http://pybrary.net/pg8000/
PHP php_pgsql PHP License http://jp2.php.net/pgsql
Ruby ruby-pg Ruby License http://rubyforge.org/projects/ruby-pg/

[編集] 歴史

マイケル・ストーンブレーカーは、自分が開発を主導した関係データベース管理システム (RDBMS) であるIngres の商業化事業を一段落させると、カリフォルニア大学バークリー校 (UCB) に戻り、同校で新たなプロジェクトを開始した。 プロジェクトの名称は Postgres と名づけられた。 このプロジェクト名称は、Ingres の後継を意味する Post-Ingres に由来している。 Postgresプロジェクトは、関係モデルを使ったこれまでの既存のデータベース管理システム (DBMS) の限界に対処することを目的として、開始された。 最も重要な課題は、これまでのDBMSではユーザが自分で新たな定義域 (ドメイン、型) を既存の単純な定義域をもとにして定義できない点であった。 Postgresでは型 (定義域) を完全にサポートするために必要な最小限の機能だけを導入した。 Postgres ではデータベースが関係を「理解」すると言われ、「規則」に従って自然な方法で関連する関係 (リレーション表、テーブル) から情報を得ることができた。 ユーザ自身が型を定義する機能に加えて、関連を完全に記述できる機能も備えていた。 プロジェクトは他にも、追記型メディア (光ディスクなど) への対応、大容量記憶装置への対応、推論、オブジェクト指向型データモデルなどを、取り入れた。 実装においては、データベースアプリケーションソフトウェアの間の新たなインタフェースを実験的に導入した。

プロジェクトチームは、1986年からPostgresシステムの基盤を説明した多数の論文を公表した。 1988年、Postgres のプロトタイプバージョンを公開した。 1989年6月、少数のユーザに対してPostgresバージョン1を公開した。 1990年10月、ルールシステム (RULE) を実装し直したバージョン2を公開した。 1991年、バージョン3を公開した。 バージョン3では、ルールシステムが再度実装し直され、複数の記憶装置を管理する機構が追加され、クエリエンジンが改良された。 1993年には、非常に多くのユーザが、プロジェクトに対して、サポートと追加機能を要望して、圧倒させるほどの状態となっていた。 1993年、主として雑然とした部分をきれいにしたことを内容とするバージョン4.2が公開された。 バージョン4.2が公開された後、Postgres プロジェクトは終了した。 Postgres は広く使われたが、保守はユーザに任されていた。

マイケル・ストーンブレーカーと Paula Hawthorn は、Postgresを商業化するために、Illustra Information Technologies 社を創業して、Illustraの製品名で開発・販売した。

一方、オープンソースの世界のソフトウェア開発者たちは、Postgres のコピーを入手してシステムのさらななる開発を進めることができた。 なぜならカリフォルニア大学バークリー校 (UCB) は、Postgres をオープンソースライセンスであるBSDライセンスのもとで公開していたからである。 1994年に、カリフォルニア大学バークリー校 (UCB) の大学院生であった Andrew Yu と Jolly Chen は、システムの問い合わせ言語インタプリタを、Ingres を基にした QUEL のインタプリタから、SQL のインタプリタに置き換える作業を行った。 SQLインタプリタを備えたこのシステムは、Postgres95 と呼ばれた。 Postgres95 のソースコードは、ワールドワイドウェブに公開された。

1996年7月に Hub.Org Networking Services の Marc Fournier は、大学外の組織としては最初に、開発用サーバをオープンソースソフトウェア開発のために活動する人々に、提供した。 Postgres95プロジェクトは、Bruce Momjian と Vadim B. Mikheev とともに、カリフォルニア大学バークリー校 (UCB) に由来するソースコードを堅牢にする作業を始めた。 1996年8月1日に、Postgres95の最初のオープンソースのバージョンが公開された。

1996年に Postgres95 プロジェクトは、プロジェクトの名称を、SQL のサポートをしているという意味をこめて PostgreSQLに変更した。 1997年1月に PostgreSQL プロジェクトとしての最初のバージョンである、PostgreSQL バージョン 6.0 が公開された。 このときから、インターネットを通じて世界中のデータベース開発者のグループがPostgreSQLの開発に参加し、共同作業によるプロジェクトをうまく調整する体制ができあがった。

1999年7月23日、日本PostgreSQLユーザ会が設立し、任意団体として活動を開始した。

2001年以降には PostgreSQL を商用サポートする会社が現れた。

2006年2月1日、日本PostgreSQLユーザ会は NPO として再編成された。

[編集] バージョン履歴

PostgreSQLのバージョンは「x.y.z」(x、y、zはそれぞれ整数) で表現される。「x.y」の部分がメジャーバージョン、「z」がマイナーバージョンである[6]

  • 1986年 - カリフォルニア大学バークレー校 (UCB) でマイケル・ストーンブレーカーがPOSTGRESプロジェクトを発足
  • 1987年 - プロトタイプが完成、翌年のACM-SIGMODコンファレンスで紹介される
  • 1989年 - POSTGRES 1 を限定的にリリース
  • 1990年 - POSTGRES 2 のリリース。前バージョンの批評をもとにルールシステムが再設計された。
  • 1991年 - POSTGRES 3 のリリース。複数ストレージの管理機構追加等
  • 1993年 - POSTGRES 4.2 をもってカリフォルニア大学バークレー校におけるPOSTGRESプロジェクトが終了
  • 1995年5月1日 - POSTGRESのソースコードを元にして、Postgres95 0.01 がリリース
  • 1995年9月5日 - Postgres95 1.0 がSQL LIKE構文など実装して正式リリース
  • 1997年1月29日 - PostgreSQL 6.0 と名称を変え、POSTGRESプロジェクトの連番に戻し、多数の追加変更を行いリリース
  • 1998年10月30日 - PostgreSQL 6.4 : PL/pgSQL, マルチバイト文字列サポート の追加
  • 1999年6月9日 - PostgreSQL 6.5 : MVCC の追加
  • 2000年5月8日 - PostgreSQL 7.0 : 外部キー制約の追加
  • 2001年4月13日 - PostgreSQL 7.1 : WAL, TOAST, OUTER JOIN の追加
  • 2002年2月4日 - PostgreSQL 7.2 : コンカレントVACUUM の追加
  • 2002年11月27日 - PostgreSQL 7.3 : スキーマ, ドメイン, PREPARE の追加
  • 2003年11月17日 - PostgreSQL 7.4 : IPv6 の追加
  • 2005年1月19日 - PostgreSQL 8.0 : Microsoft Windows対応, サブトランザクション, PITR, 表領域の追加 [7]
  • 2005年11月8日 - PostgreSQL 8.1 : 2相コミット, ROLE, 行共有ロック, テーブル・パーティショニング の追加 [8]
  • 2006年12月5日 - PostgreSQL 8.2 : ウォームスタンバイ, GIN の追加 [9]
  • 2008年2月4日 - PostgreSQL 8.3 : 更新処理性能の向上, XMLデータ型, 全文検索, JIS X 0213サポート, ENUM型, UUID[10]
  • 2009年7月1日 - PostgreSQL 8.4 : 再帰SQL, ウィンドウ関数, 列単位のアクセス制御, SQLと関数の性能解析機能

[編集] 受賞

2008年の時点で、PostgreSQL は以下の受賞をしている

  • 1999 LinuxWorld Editor's Choice Award for Best Database
  • 2000 Linux Journal Editors' Choice Awards for Best Database
  • 2002 Linux New Media Editors Choice Award for Best Database
  • 2003 Linux Journal Editors' Choice Awards for Best Database
  • 2004 Linux New Media Award For Best Database
  • 2004 Linux Journal Editors' Choice Awards for Best Database
  • 2004 ArsTechnica Best Server Application Award
  • 2005 Linux Journal Editors' Choice Awards for Best Database
  • 2006 Linux Journal Editors' Choice Awards for Best Database
  • 2008 Developer.com Product of the Year, Database Tool

[編集] 関連項目

Ludia
NTTデータが開発したPostgreSQLの全文検索エンジン。LGPLに沿ってソースコードが公開されている。
PowerGRES Plus
富士通SRAOSSが開発したRDBMS。SRAOSSがPostgreSQLより開発した商用RDB『PowerGres』をベースとして、ストレージ管理部分に富士通『Symfoware Server』のものを移植している。
Illustra
PostgreSQLの前身であるPostgresをマイケル・ストーンブレーカーと Paula Hawthorn が商業化した商用オブジェクト関係データベース (ORDBMS) 、その技術は IBM Informix Dynamic Server (IDS) に導入されている。

[編集] 外部リンク

[編集] 脚注