ポストグレスキューエル【PostgreSQL】
PostgreSQL
MySQLと並び、人気の高いオープンソースのRDBMS(リレーションナルデータベース管理システム)。PostgreSQL Global Development Groupにより開発され、New BSD Licenseにより配布されている。Linux、UNIX、Windows、Mac OS Xなど多くのOS・プラットフォームで稼動する。
早くからオブジェクト指向機能を取り込むなど、多機能・高機能を売りとするRDBMS。中小規模のシステムにおいては、OracleやIBM DB2などの商用DBMS製品の代替となりうる機能・性能を持つ。
近年のバージョンでは、レプリケーションやクラスタリングなどの冗長構成により可用性を高めることが可能になり、また、パフォーマンスチューニングも進んでいることから、大規模・ミッションクリティカルなシステムへと適用可能な領域が拡がりつつある。
関連見出し
New BSD License
MySQL
関連URL
PostgreSQL Global Development Group(http://www.postgresql.org/)

PostgreSQL
オープンソースのリレーショナルデータベース管理システム(RDBMS:Relational Database Management System)の一つ。
主要なPC-UNIX系のOSに対応し、また最近のバージョンからはWindowsやMac OS Xにも対応している。商用のSQLサーバーとは開発目的が異なるため、対応するプラットフォームの種類やスケーラビリティで劣る面もあるが、比較的少ないハードウェアリソースで動作するなどのメリットがあり、Apacheなどと組み合わせて高機能Webサーバーと連携させて使用されることが多い。また、ソースが公開されており、ライセンス条件も緩やかであることも特徴。利用目的にかかわらず、誰でもその使用、変更、配布を行える。
カリフォルニア州立大学バークレー校で開発されたデータベースシステム「POSTGRES」を基に、現在では「PostgreSQL」として世界中のプログラマたちにより開発されている。POSTGRESプロジェクトは1986年からスタートし、バージョン4.2をもって1994年に停止。その後、1994年にAndrew Yu氏とJolly Chen氏がPOSTGRES 4.2を改良し、SQL準拠の問い合わせ言語をサポートしたPostgre95をリリース。その後、1996年に、「PostgreSQL」と改名した。ソースコードはインターネットで公開され、現在も、ボランティアの開発者コミュニティにより、活発に開発が続いている。
関連用語
関連Webサイト
PostgreSQL
PostgreSQLとは、PostgreSQL Global Development Groupによって開発が進められているリレーショナルデータベース管理システム(RDBMS)、あるいは、オブジェクトリレーショナルデータベース管理システム(ORDBMS)の名称である。オープンソースソフトウェア(OSS)として無償で提供されている。
PostgreSQLは、カリフォルニア大学バークリー校(UCB)で開発されたデータベース管理システム(DBMS)に源流を持つとされる。PostgreSQLは、米国規格協会(ANSI)が承認を行っているデータベース言語「SQL」の標準仕様「SQL 92」、「SQL 99」に準拠しており、日本語を含む多言語に対応している。また、ストアドプロシージャやテーブルのパーティショニング、データベースにおける不要領域のバキュームといった豊富な機能を備えている。安定性も高く、BSDライセンスにより無償で利用できることから、商用のデータベースにおいて用いられていることも多い。
PostgreSQLは、UNIXの環境で利用されることが多いとされるが、Linux、Windows、Mac OS Xなどの多くのプラットフォームをサポートしている(マルチプラットフォームである)。Development Groupによる開発も活発であり、マルチコアをサポートするなど多様なアーキテクチャに対応している。
PostgreSQL、RDBMSにオブジェクト指向の概念を導入したORDBMSの代表的な製品でもある。なお、PostgreSQLと同様にOSSとして提供されているRDBMSとしては、MySQLなどを挙げることができる。
参照リンク
PostgreSQL - (英文)
NPO法人 日本PostgreSQLユーザ会
データベース: | MySQL Microsoft Query NEEDS PostgreSQL SQL SQL Server SQLite |
PostgreSQL 関数 (PDO_PGSQL)
導入
PDO_PGSQL は、PHP から PostgreSQL データベースへのアクセスを可能にするための PHP Data Objects (PDO) インターフェース を実装したドライバです。目次
- PDO_PGSQL DSN — PostgreSQL データベースに接続する
- PDO::pgsqlLOBCreate — 新しいラージオブジェクトを作成する
- PDO::pgsqlLOBOpen — 既存のラージオブジェクトのストリームをオープンする
- PDO::pgsqlLOBUnlink — ラージオブジェクトを削除する
PostgreSQL 関数
導入
PostgreSQL データベースはオープンソースの製品であり、無料で 使用可能です。Postgres は元々 UCB(カリフォルニア大学バークレイ校) コンピュータ・サイエンス学部で開発されたものです。この Postgres は、 現在いくつかの商用データベースにおいてサポートされつつある オブジェクトリレーショナルデータベース的概念の多くの先駆けでした。 Postgres は、SQL92/SQL99 言語サポート・トランザクション・参照整合性・ ストアドプロシージャ・拡張可能な型を提供しています。PostgreSQL は、 バークレイ校での Postgres のオリジナルコードの、オープンソースの 子孫にあたります。要件
PostgreSQL サポートを使用するには、PostgreSQL 6.5 以降が必要です。 PostgreSQL 8.0 以降では PostgreSQL モジュールの全ての機能を使用可能 です。PostgreSQL は、マルチバイト文字エンコーディングを含む多くの 文字エンコーディングをサポートしています。現在のバージョン及び PostgreSQLに関するより詳細な情報は、 » http://www.postgresql.org/ と » PostgreSQL Documentation で入手可能です。インストール手順
PostgreSQLサポートを利用可能とするには、PHPコンパイル時に --with-pgsql[=DIR] を指定することが必要です。 共有オブジェクトモジュールが利用可能な場合、php.ini の extension ディレクティブ または dl() 関数によりPostgreSQLモジュール をロードすることが可能です。実行時設定
php.ini の設定により動作が変化します。表 257. PostgreSQL設定オプション
名前 | デフォルト | 変更の可否 | 変更履歴 |
---|---|---|---|
pgsql.allow_persistent | "1" | PHP_INI_SYSTEM | |
pgsql.max_persistent | "-1" | PHP_INI_SYSTEM | |
pgsql.max_links | "-1" | PHP_INI_SYSTEM | |
pgsql.auto_reset_persistent | "0" | PHP_INI_SYSTEM | PHP 4.2.0 以降で有効です。 |
pgsql.ignore_notice | "0" | PHP_INI_ALL | PHP 4.3.0 以降で有効です。 |
pgsql.log_notice | "0" | PHP_INI_ALL | PHP 4.3.0 以降で有効です。 |
PHP_INI_* 定数の詳細および定義については 付録 G. php.ini ディレクティブ を参照してください。
以下に設定ディレクティブに関する 簡単な説明を示します。
- pgsql.allow_persistent boolean
-
持続的な Postgres 接続を可能にするかどうか。
- pgsql.max_persistent integer
-
プロセス毎の持続的 Postgres 接続の最大数。
- pgsql.max_links integer
-
持続的接続を含むプロセス毎の Postgres 接続の最大数。
- pgsql.auto_reset_persistent integer
-
pg_pconnect() で作成した持続的接続の障害を
検出する。少々のオーバーヘッドを要します。
- pgsql.ignore_notice integer
-
PostgreSQL バックエンドの通知メッセージを無視するかどうか。
- pgsql.log_notice integer
-
PostgreSQL バックエンドの通知メッセージをログに記録するかしないか。
ログに記録するには、PHP ディレクティブ
pgsql.ignore_notice
を off にする必要があります。
リソース型
PostgreSQL モジュールで使用されるリソース型は 2 種類あります。ひとつは データベース接続のリンク ID で、もうひとつはクエリの結果を保持する リソースです。定義済み定数
以下の定数が定義されています。 この関数の拡張モジュールが PHP 組み込みでコンパイルされているか、 実行時に動的にロードされている場合のみ使用可能です。- PGSQL_ASSOC (integer)
- pg_fetch_array() に渡します。 フィールド名と値の連想配列を返します。
- PGSQL_NUM (integer)
- pg_fetch_array() に渡します。 フィールド番号と値の数値添字配列を返します。
- PGSQL_BOTH (integer)
- pg_fetch_array() に渡します。 フィールド値の配列を、数値添字(フィールド番号で)と 連想配列(フィールド名で)の両方で返します。
- PGSQL_CONNECT_FORCE_NEW (integer)
- pg_connect() に渡し、既存の同一接続を無視して 新しい接続を確立させるようにします。
- PGSQL_CONNECTION_BAD (integer)
- pg_connection_status() から返され、データベースとの 接続が不正な状態になっていることを示します。
- PGSQL_CONNECTION_OK (integer)
- pg_connection_status() から返され、データベースとの 接続が正常であることを示します。
- PGSQL_SEEK_SET (integer)
- pg_lo_seek() に渡します。シーク操作は オブジェクトの先頭から始められます。
- PGSQL_SEEK_CUR (integer)
- pg_lo_seek() に渡します。シーク操作は カレントの位置から始められます。
- PGSQL_SEEK_END (integer)
- pg_lo_seek() に渡します。シーク操作は オブジェクトの最後から始められます。
- PGSQL_EMPTY_QUERY (integer)
- pg_result_status() から返されます。 サーバに送信された文字列が空でした。
- PGSQL_COMMAND_OK (integer)
- pg_result_status() から返されます。 コマンドは正常に終了し、何もデータを返しませんでした。
- PGSQL_TUPLES_OK (integer)
- pg_result_status() から返されます。 コマンドは正常に終了し、データを返しました (SELECT や SHOW など)。
- PGSQL_COPY_OUT (integer)
- pg_result_status() から返されます。 (サーバからの)データのコピーが始まりました。
- PGSQL_COPY_IN (integer)
- pg_result_status() から返されます。 (サーバへの)データのコピーが始まりました。
- PGSQL_BAD_RESPONSE (integer)
- pg_result_status() から返されます。 サーバからの応答を判別できませんでした。
- PGSQL_NONFATAL_ERROR (integer)
- pg_result_status() から返されます。 致命的ではないエラー(通知や警告など)が発生しました。
- PGSQL_FATAL_ERROR (integer)
- pg_result_status() から返されます。 致命的なエラーが発生しました。
- PGSQL_TRANSACTION_IDLE (integer)
- pg_transaction_status() から返されます。 接続は現在アイドル状態で、トランザクション内ではありません。
- PGSQL_TRANSACTION_ACTIVE (integer)
- pg_transaction_status() から返されます。 接続内でコマンドを実行中です。クエリが接続を通じて送信され、 まだ完了していません。
- PGSQL_TRANSACTION_INTRANS (integer)
- pg_transaction_status() から返されます。 接続は現在アイドル状態で、トランザクションブロック内にあります。
- PGSQL_TRANSACTION_INERROR (integer)
- pg_transaction_status() から返されます。 接続は現在アイドル状態で、トランザクション処理に失敗しています。
- PGSQL_TRANSACTION_UNKNOWN (integer)
- pg_transaction_status() から返されます。 接続が正常ではありません。
- PGSQL_DIAG_SEVERITY (integer)
- pg_result_error_field() に渡します。 深刻度です。その内容は ERROR、 FATAL、あるいは PANIC (エラーメッセージ内)、あるいは WARNING、 NOTICE、DEBUG、 INFO、あるいは LOG (通知メッセージ内)、あるいはこれらの各国語版のうちのどれかです。 常に存在します。
- PGSQL_DIAG_SQLSTATE (integer)
- pg_result_error_field() に渡します。 エラーの SQLSTATE コードです。SQLSTATE コードは発生したエラーの種別を 特定します。これは、データベースエラーに対してフロントエンドの アプリケーションが適切な操作(エラー処理など)をできるようにするために 使用されます。このフィールドはローカライズされていません。また、 常に存在します。
- PGSQL_DIAG_MESSAGE_PRIMARY (integer)
- pg_result_error_field() に渡します。 人間が判読できる最初のエラーメッセージ(たいてい 1 行)です。常に存在します。
- PGSQL_DIAG_MESSAGE_DETAIL (integer)
- pg_result_error_field() に渡します。 オプションの 2 番目のエラーメッセージで、問題に対する詳細な情報を 含みます。複数行にまたがることもあります。
- PGSQL_DIAG_MESSAGE_HINT (integer)
- pg_result_error_field() に渡します。 オプションのメッセージで、問題に対してどのように対応すべきかを指摘 します。エラーの詳細情報と違う点は、発生した事実ではなくアドバイス (時に不適切な場合もある)をするところです。複数行にまたがることも あります。
- PGSQL_DIAG_STATEMENT_POSITION (integer)
- pg_result_error_field() に渡します。 エラーカーソルの位置を、もとのステートメント中の位置として表す 整数値を保持する文字列です。 最初の文字の位置は 1 で、それ以降(バイト数ではなく)文字数で 位置を数えます。
- PGSQL_DIAG_INTERNAL_POSITION (integer)
- pg_result_error_field() に渡します。 PG_DIAG_STATEMENT_POSITION と同じ定義ですが、 こちらはカーソル位置が内部で生成されたコマンドを参照している場合に 使用されます。このフィールドが存在する場合は、常に PG_DIAG_INTERNAL_QUERY フィールドも存在します。
- PGSQL_DIAG_INTERNAL_QUERY (integer)
- pg_result_error_field() に渡します。 失敗した内部生成コマンドのテキストです。例としては、PL/pgSQL 関数で 発行された SQL クエリなどがあてはまります。
- PGSQL_DIAG_CONTEXT (integer)
- pg_result_error_field() に渡します。 エラーが発生した状況を指定します。現在ここに含まれているのは、 アクティブなプロシージャの関数や内部生成クエリのコール履歴です。 これはエントリごとに 1 行のデータとなっており、直近のデータが 先頭にきます。
- PGSQL_DIAG_SOURCE_FILE (integer)
- pg_result_error_field() に渡します。 エラーが報告された箇所の、PostgreSQL ソースコードでのファイル名です。
- PGSQL_DIAG_SOURCE_LINE (integer)
- pg_result_error_field() に渡します。 エラーが報告された箇所の、PostgreSQL ソースコードでの行番号です。
- PGSQL_DIAG_SOURCE_FUNCTION (integer)
- pg_result_error_field() に渡します。 エラーが報告された箇所の、PostgreSQL ソースコードでの関数名です。
- PGSQL_ERRORS_TERSE (integer)
- pg_set_error_verbosity() に渡します。 返されるメッセージを指定します。ここには深刻度・短い説明および 発生位置のみを含めます。通常は 1 行に収まるでしょう。
- PGSQL_ERRORS_DEFAULT (integer)
- pg_set_error_verbosity() に渡します。 デフォルトで返されるメッセージで、上の内容に加えて詳細・ ヒントあるいは詳細情報を含めます(複数行にまたがるかもしれません)。
- PGSQL_ERRORS_VERBOSE (integer)
- pg_set_error_verbosity() に渡します。 詳細モードでのメッセージで、有効なフィールドをすべて含めます。
- PGSQL_STATUS_LONG (integer)
- pg_result_status() に渡します。 結果として数値が要求されていることを示します。
- PGSQL_STATUS_STRING (integer)
- pg_result_status() に渡します。 結果としてテキストのコマンドタグが要求されていることを示します。
- PGSQL_CONV_IGNORE_DEFAULT (integer)
- pg_convert() に渡します。 変換時に、テーブルのデフォルト値を無視します。
- PGSQL_CONV_FORCE_NULL (integer)
- pg_convert() に渡します。 空文字列に対して、SQL の NULL を使用します。
- PGSQL_CONV_IGNORE_DEFAULT (integer)
- pg_convert() に渡します。 NULL を SQL の NOT NULL に変換しないように します。
注意
注意: すべての関数がすべての構築環境でサポートされるわけではありません。 サポートされる関数は、使用する libpq(PostgreSQL の C クライアント ライブラリ)のバージョンと libpq のコンパイル方法に依存します。 もし PHP の PostgreSQL 拡張モジュールに足りない関数がある場合、 その原因は libpq はその関数をサポートしていないことです。注意: ほとんどの PostgreSQL 関数は、オプションの第 1 引数として connection を受け付けます。もしこれを 指定しなかった場合、直近にオープンされた接続を使用します。 そのような接続が存在しなかった場合、関数は FALSE を返します。
注意: PostgreSQL は、オブジェクトの生成時やクエリの実行時に 識別子(例: テーブル名・カラム名)を自動的に小文字に変換します。 この自動変換を防ぐには、識別子をダブルクォート("")でエスケープする 必要があります。
注意: PostgreSQL には、データベースのスキーマ情報(例: データベース内の すべてのテーブルなど)を取得するための特別なコマンドがありません。 その代わりに、PostgreSQL 7.4 以降では information_schema という標準スキーマが存在し、必要な情報が検索しやすい形式で格納されています。 詳しい情報は » PostgreSQL ドキュメンテーション を参照ください。
例
この例では、PostgreSQL への接続・クエリの実行・結果の表示 そして切断の方法を説明します。 例 1762. PostgreSQL 拡張モジュールの概要
<?php
// 接続し、データベースを選択する
$dbconn = pg_connect("host=localhost dbname=publishing user=www password=foo")
or die('Could not connect: ' . pg_last_error());
// SQL クエリを実行する
$query = 'SELECT * FROM authors';
$result = pg_query($query) or die('Query failed: ' . pg_last_error());
// 結果を HTML で表示する
echo "<table>\n";
while ($line = pg_fetch_array($result, null, PGSQL_ASSOC)) {
echo "\t<tr>\n";
foreach ($line as $col_value) {
echo "\t\t<td>$col_value</td>\n";
}
echo "\t</tr>\n";
}
echo "</table>\n";
// 結果セットを開放する
pg_free_result($result);
// 接続をクローズする
pg_close($dbconn);
?>
目次
- pg_affected_rows — 変更されたレコード(タプル)の数を返す
- pg_cancel_query — 非同期クエリを取り消す
- pg_client_encoding — クライアントのエンコーディングを取得する
- pg_close — PostgreSQL 接続をクローズする
- pg_connect — PostgreSQL 接続をオープンする
- pg_connection_busy — 接続がビジーかどうか調べる
- pg_connection_reset — 接続をリセット(再接続)する
- pg_connection_status — 接続ステータスを取得する
- pg_convert — 連想配列の値を、SQL 文として実行可能な形式に変換する
- pg_copy_from — 配列からテーブルに挿入する
- pg_copy_to — 配列にテーブルをコピーする
- pg_dbname — データベース名を取得する
- pg_delete — レコードを削除する
- pg_end_copy — PostgreSQL バックエンドと同期する
- pg_escape_bytea — bytea フィールドに挿入するために文字列をエスケープする
- pg_escape_string — テキスト型フィールドに挿入するために、文字列をエスケープする
- pg_execute — 指定したパラメータを用いてプリペアドステートメントを実行するリクエストを 送信し、その結果を待つ
- pg_fetch_all_columns — 指定したカラムの全ての行を配列として取得する
- pg_fetch_all — 取得されたすべての行を配列として取得する
- pg_fetch_array — 行を配列として取得する
- pg_fetch_assoc — 行を連想配列として取得する
- pg_fetch_object — 行をオブジェクトとして得る
- pg_fetch_result — 結果リソースから値を返す
- pg_fetch_row — 数値添字の配列として行を得る
- pg_field_is_null — フィールドが SQL の NULL かどうか調べる
- pg_field_name — フィールドの名前を返す
- pg_field_num — 指定されたフィールドのフィールド番号を返す
- pg_field_prtlen — 表示される長さを返す
- pg_field_size — 指定したフィールドの内部記憶領域におけるサイズを返す
- pg_field_table — tables フィールドの名前あるいは oid を返す
- pg_field_type_oid — フィールド番号に対応する型 ID(OID)を返す
- pg_field_type — フィールド番号に対応する型名を返す
- pg_free_result — メモリを開放する
- pg_get_notify — SQL NOTIFY メッセージを取得する
- pg_get_pid — バックエンドのプロセス ID を得る
- pg_get_result — 非同期クエリの結果を取得する
- pg_host — 接続に関連するホスト名を返す
- pg_insert — テーブルに配列を挿入する
- pg_last_error — 特定の接続から直近のエラーメッセージ文字列を取得する
- pg_last_notice — PostgreSQL サーバからの直近の通知メッセージを返す
- pg_last_oid — 直近の行のオブジェクト ID を返す
- pg_lo_close — ラージオブジェクトをクローズする
- pg_lo_create — ラージオブジェクトを生成する
- pg_lo_export — ラージオブジェクトをファイルにエクスポートする
- pg_lo_import — ファイルからラージオブジェクトをインポートする
- pg_lo_open — ラージオブジェクトをオープンする
- pg_lo_read_all — ラージオブジェクト全体を読み込みブラウザに直接送信する
- pg_lo_read — ラージオブジェクトを読み込む
- pg_lo_seek — ラージオブジェクトの位置をシークする
- pg_lo_tell — ラージオブジェクトのカレントのシーク位置を返す
- pg_lo_unlink — ラージオブジェクトを削除する
- pg_lo_write — ラージオブジェクトを書く
- pg_meta_data — テーブルからメタデータを取得する
- pg_num_fields — フィールド数を返す
- pg_num_rows — 行数を返す
- pg_options — 接続に関連するオプションを取得する
- pg_parameter_status — サーバのパラメータ設定を検索する
- pg_pconnect — 持続的な PostgreSQL 接続をオープンする
- pg_ping — データベース接続を調べる
- pg_port — 接続に関連するポート番号を返す
- pg_prepare — 指定したパラメータでプリペアドステートメントを作成するリクエストを 送信し、その完了を待つ
- pg_put_line — NULL で終わる文字列を PostgreSQL バックエンドに送信する
- pg_query_params — SQL コマンドとパラメータを分割してサーバにを送信し、その結果を待つ
- pg_query — クエリを実行する
- pg_result_error_field — エラー報告の各フィールドを返す
- pg_result_error — 結果に関連するエラーメッセージを取得する
- pg_result_seek — 結果リソースの内部行オフセットを設定する
- pg_result_status — クエリ結果のステータスを取得する
- pg_select — レコードを選択する
- pg_send_execute — 指定したパラメータでプリペアドステートメントを実行するリクエストを 送信し、その結果を待たない
- pg_send_prepare — 指定したパラメータでプリペアドステートメントを作成するリクエストを 送信し、その結果を待たない
- pg_send_query_params — コマンドとパラメータを分割してサーバに送信し、その結果を待たない
- pg_send_query — 非同期クエリを送信する
- pg_set_client_encoding — クライアントのエンコーディングを設定する
- pg_set_error_verbosity — pg_last_error() および pg_result_error() が返すメッセージの詳細度を指定する
- pg_trace — PostgreSQL 接続のトレースを有効にする
- pg_transaction_status — サーバ上で実行中のトランザクションの状態を返す
- pg_tty — 接続に関する TTY 名を返す
- pg_unescape_bytea — bytea 型のバイナリをアンエスケープする
- pg_untrace — PostgreSQL 接続のトレースを無効にする
- pg_update — テーブルを更新する
- pg_version — クライアント・プロトコル・サーバのバージョンを配列で返す
PostgreSQL
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2025/03/17 03:41 UTC 版)
![]() | |
![]() | |
開発元 | PostgreSQL Global Development Group |
---|---|
初版 |
1997年1月29日[1] 前身のPostgresは1989年6月[2] |
最新版 |
17.4[3] ![]() |
リポジトリ | |
プログラミング 言語 | C |
対応OS | クロスプラットフォーム |
種別 | オブジェクト関係データベース |
ライセンス | The PostgreSQL Licence |
公式サイト |
www |
PostgreSQL(ポストグレス キューエル[※ 1])は、拡張性とSQL準拠を強調するフリーでオープンソースの関係データベース管理システム(RDBMS)である。Postgresとしても知られている。もともとは、カリフォルニア大学バークレー校で開発されたIngresデータベースの後継としてその起源を根拠としたPOSTGRESという名前であった。1996年に、プロジェクトはSQLのサポートを反映してPostgreSQLに改名された。2007年の検討の結果、開発チームはPostgreSQLという名前とPostgresという別名を維持することを決定した。
PostgreSQLは、原子性、整合性、独立性、耐久性 (ACID)プロパティを持つトランザクション、自動更新可能なビュー、マテリアライズドビュー、トリガ、外部キー、ストアドプロシージャを特徴としている。単一マシンからデータウェアハウスや多数の同時使用ユーザを持つWebサービスまで、さまざまなワークロードを扱えるように設計されている。かつてのMac OS X Lion ServerからmacOS Server 5.7までデフォルトデータベースであった。macOS、Linux、FreeBSD、OpenBSD、Windowsでも利用可能である。
概要
PostgreSQLはIllustraや、Illustraを買収しその技術を採りいれたInformixとともにオブジェクト関係データベース管理システムを実装してきた[4]。問い合わせ言語には SQL を用いており、SQL92, 99の大部分と、2003, 2008の一部をサポートしている[※ 2]。
市場シェア
Stack Overflowの2023年[5]や2024年[6]の調査では2023年にMySQLを超えて、世界で最も使われているデータベースだった。
DB-Engines.comによるマーケットシェア調査では、2018年2月当時、Oracle Database、MySQL、Microsoft SQL Server に続いて4位であり[7]、MySQL とのシェアの差は年々縮まる傾向にあった[8]。
2012年7月当時は、クラウドサービスプロバイダの Jelastic によると、オープンソースDBの中でのPostgreSQLの世界シェアは Jelastic のユーザー内では14%程度であった(MySQL系 70%(MySQL 56%、MariaDB 14%)、MongoDB 15%)[9]。日本の Jelastic のユーザー内では8%であり(MySQL系 66%(MySQL 50%、MariaDB 16%))、世界的なシェアとは状況が異なる[9]。
プラットフォーム
- Unix系(FreeBSD、OpenBSD、Linux、macOS、Solaris)および Microsoft Windows で動作する。Windowsにおいては、バージョン7.4以前はCygwinを必要としたが、バージョン8.0以降はネイティブで動作する。Mingw-w64[10]およびCygwin[11]でもWindows版が配布されている。
- 32ビット / 64ビット の両アーキテクチャ上で動作する。32ビット版では共有バッファサイズが最大2GBに制限されるが、64ビット版では上限は無い。
- 配布形態は、ソースコードや RPM・APT の他、EnterpriseDB 社よりGUIインストーラが提供されている。このパッケージにはGUIの管理ツールであるpgAdminやドライバ等の追加インストーラが同梱されている。
特徴
関数
関数(ストアドファンクション)によりサーバで実行される処理のまとまりを定義できる。PostgreSQL は行を返却する関数を定義することができる。関数の出力は複数の行であり、クエリの中でテーブルと同様に扱うことができる。実行するユーザまたは定義したユーザのどちらの権限で実行されるかを指定して関数を定義できる。
関数の定義には SQL の他、分岐やループをサポートする下記の言語で実装することが可能である。言語によっては関数をデータベーストリガとして実行することもできる。
組み込みでサポートされている言語[12]
外部のプロジェクトとして対応している言語
インデックス
PostgreSQL は組み込みで以下のインデックスをサポートしている[15]。デフォルトはB+木。また、ユーザ定義インデックスを追加することもできる。
- B+木
- ハッシュテーブル
- GiST (汎用検索ツリー, 多次元木)[16]
- SP-GiST (Space-Partitioned GiST)[17]
- GIN (汎用転置インデックス)[18]
- BRIN (Block Range INdex)[19]
PostgreSQL のインデックスには以下の特徴がある。
- 必要に応じて逆順でスキャンできる。逆順スキャン用のインデックスを別に定義する必要は無い。
- 式インデックス (関数インデックス) を定義できる。複数の列の値を引数に取る関数の結果をインデックス化する。
- 部分インデックス (条件付きインデックス) を定義できる。条件を指定し、条件に適合する行のみをインデックス化することで、インデックスのサイズを縮小できる。
- クエリオプティマイザ (planner) は複数のインデックスを同時に使用するクエリ実行計画を作成できる。複数のインデックスの結果をメモリ上のビットマップとして併せ、そのビットマップに対応する行をテーブルから取得する。
トリガ
データベーストリガは SQL データ操作言語 (SQL DML) の文 (INSERT, UPDATE / UPDATE OF, DELETE, TRUNCATE) を実行した際に呼び出される。利用例として、INSERT 文で挿入される値が妥当かの検証がある。トリガが実行される条件は WHEN 句で与えることができる。
トリガはテーブルに対してのみ定義できる。ビューに対するトリガが必要な場合には、代わりにルールを使用する。複数のトリガが定義されている場合、アルファベット順に実行される。
トリガで実行される処理は関数として定義する。トリガ用の関数の定義には SQL 関数は使用できないが、PL/pgSQL やその他の多くの関数用言語を使うことができる。
ルール
ルールにより SQL の内部表現である「クエリ木」を書き換えることができる。一般的なルールの用途は更新可能ビューを実現することであり、標準 SQL で規定される "INSTEAD OF" トリガ の代わりに用いられる。
データ型
- 数値型:整数、浮動小数点数、任意の精度を持つ数値、連番
- 通貨型
- 文字列:固定長、可変長
- 可変長バイト列
- 日時、日付、時刻、時間差分 (タイムゾーンの有無を指定可能)
- ブーリアン型
- 列挙型(8.3以降)
- 幾何型:点、直線、線分、矩形、閉経路、開経路、多角形、円
- ネットワークアドレス:IPv4 / IPv6 アドレス, MAC アドレス
- ビット列
- テキスト検索に関する型
- UUID 型
- XML 型
- JSON 型:テキスト形式、バイナリ形式
- 配列型
- 複合型
- 範囲型
可変長文字列と可変長バイト列には最大で 1GB を格納できる。一定のサイズを上回るデータ値は TOAST と呼ばれる機能により自動的に圧縮され別領域に配置される。そのため、ページサイズ (通常8KB) を上回るサイズの行であっても保存できる。
さらに、ユーザがデータ型を追加することもでき、それに対してインデックスを作成することもできる。 利用例として、GIS 用の型を GiST インデックスで検索可能な PostGIS プロジェクトがある。
ユーザ定義オブジェクト
ユーザはほとんどのデータベース・オブジェクトを追加できる。
- データ型 (TYPE) と データの定義域 (DOMAIN)
- 関数 (FUNCTION) と集約 (AGGREGATE)
- 演算子 (OPERATOR)
- 型変換 (CAST)
- 文字コード変換 (CONVERSION)
- 手続き言語 (LANGUAGE)
- 全文検索の設定 (TEXT SEARCH CONFIGURATION)
- インデックス・アクセス・メソッド
PostgreSQLが規定する上限
データベースの大きさの上限はない。テーブルのバイト数の最大は32Tbyteである。 テーブルの列は1600まで可能だが、運用上の上限はデータ型に依存する。
バキューム
バキューム (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 のメモリ管理が自動化された。
- 9.0
- VACUUM FULL が CLUSTER と類似の処理に変更され、高速化された。
パーティショニング
PostgreSQL 8.1 より、パーティショニングを組み込みでサポートしている。バージョンが上がる度に機能が追加されている。
テーブル・パーティショニングは継承を用いて実現する。これは、Oracle Database 7 のパーティション・ビューに近い実装である。
テーブルを作成する際、他テーブルを「親」テーブルとして指定し、継承関係を定義できる。 「子」テーブルに挿入された行は、親テーブルを参照した際にも取得される。親テーブルに対する列の追加やCHECK制約の定義は自動的に子テーブルにも反映されるが、外部キーや一意性制約は継承をサポートしていない。
パーティショニングされたテーブルへは親テーブルを通してアクセスする。SELECT, UPDATE, DELETE 文は子テーブルを含むよう展開されるが、クエリの条件が CHECK 制約に適合しない子テーブルは設定により自動的に除外することもできるため効率よく処理できる。
INSERT については、バージョン10以降は宣言的テーブルパーティショニングにより子テーブルに振り分けることが出来る[21]。バージョン9.6までは、子テーブルを直接指定するか、親テーブルにトリガを作成することで挿入先を指示して振り分けることが出来る。
レプリケーション
PostgreSQL 9.0 より、ストリーミングレプリケーションを組み込みでサポートしている[22]。トランザクションログを転送し、全てのデータベース・ファイルの変更をコミット後に他のサーバへ非同期に転送する。単一マスタと複数スレーブを構成でき、スレーブは参照の問い合わせを受け付ける。参照処理を複数のノードで負荷分散するスケールアウトが可能である。
PostgreSQL 10 より、ロジカルレプリケーションを組み込みでサポートしている[23]。データベース全体ではなく、指定した部分だけをレプリケーションできる。
全文検索
LIKE 述語と正規表現による文字列検索のほか、全文検索の機能を持つ。バージョン 8.3 以降は組み込みで、それ以前のバージョンでは contrib/tsearch2 として提供されている。この全文検索では文字列から単語を抽出し、転置テーブル (GIN) または単語空間を多次元木 (GiST) とするインデックスを作成できる。SQL/MM の全文検索とは異なり、「@@」演算子を使用する独自の文法で検索を行う。
SELECT * FROM テーブル WHERE to_tsvector(文字列カラム) @@ to_tsquery('検索クエリ')
標準では日本語の文字列から単語を抽出するパーサを持たないが、外部拡張である textsearch-ja を使用することで形態素解析による検索が可能となる。
また、標準の全文検索以外にも、PGroonga (Groonga を使用), Ludia, textsearch_senna (Senna を使用), pgestraier (Hyper Estraier), pgRast (Rast) などが外部拡張として存在する。
UPSERT機能
PostgreSQL 9.5 より、データの新規挿入または更新を行う「UPSERT」機能が実装された[24]。「UPSERT」機能とは、データの新規挿入(INSERT)ができれば挿入を行い、新規挿入ができなければ更新(UPDATE)を行うもの。「ON CONFLICT」句を指定すると、データ変更の衝突を適切に処理できるという。
基本的機能
その他の特徴
- 副問合せ (サブクエリ)
- 結合 (自然結合, 左外結合, 右外結合, 完全外結合)
- 制約 (外部キー, 一意性制約, CHECK制約)
- トランザクション / サブトランザクション (SAVEPOINT) / 2相コミット
- バックアップ直後からデータ障害直前までの任意の時点への復旧 (en:Point-in-time recovery)
- SSLでの接続
- 表領域
オンラインオフラインバックアップ
バックアップには主に3つの方法があり、SQLダンプ、ファイルシステムレベルバックアップ、連続アーカイブである。それぞれに長所・短所がある。SQLダンプではpg_dumpのようなクライアントアプリケーションでバックアップをとり、リモートホストからのバックアップが可能であるがデータベース全体のバックアップをとる場合にはほぼ常にスーパーユーザー権限が必要である。ファイルシステムレベルバックアップでは、bashコマンドでデータファイルのバックアップをとる。この場合はオンラインバックアップやテーブル個別のバックアップは出来ない。連続アーカイブはWALを利用するものであり、アドミニストレータにとって複雑であるが、バックアップでの内部不整合がlog replayで解決されることやWALファイルをアーカイブするだけで連続バックアップできる利点もある。ただこの方法ではデータベースクラスタ全体のバックアップとなるため要求されるストレージは大である[25]。
性能
CPU スケーラビリティ
バージョン 8.1 以降 CPU スケーラビリティは大幅に改善された。 以降、改善を積み重ね、中規模のハードウェアであればスケーラビリティを十分に確保できるRDBMSとなっている。
- 7.4 以前
- スケーラビリティはページ置換アルゴリズムとして採用されていた LRU により抑制されていた。ページを参照するたびにバッファ・プール全体を排他ロックしていたため、スケーラビリティは低かった。SMP 構成で 4CPU 程度が限界だった。
- 8.0
- LRU に代わり ARC が採用された(ただし、特許侵害の回避のため途中で 2Q に変更された[26])。ARC によりキャッシュヒット率は向上したものの、排他制御にオーバーヘッドが生じた。また、サブトランザクションをサポートするため追加された排他制御も新たなロック競合を生んだ。スケーラビリティは以前のバージョンと比較してむしろ低下しており、2CPU 程度で頭打ちになった。
- 8.1
- ページ置換アルゴリズムはクロックに変更され、スケーラビリティが大幅に向上した。ページの参照には共有ロックのみが必要であるため並行してアクセスが可能になった。8コア程度が上限となった。[27] [28]
- 8.2
- ページを管理するハッシュテーブルのロックが16個に分割され、共有ロックの実装に使用されるスピンロックへのアクセスが分散された。他にスピンロックの実装やサブトランザクションの排他制御が改良され、16コアまでのスケーラビリティが確認されている。[29][30]
- 9.2
- EnterpriseDB の Robert Haas が Linux カーネル 3.2 および PostgreSQL 9.2 の改善により、64コア(8コア×8CPU)のマシン上でCPUスケールすることを確認した[29]。
- 9.5
- LWLock (Lightweight lock) において、一部、スピンロックからアトミック命令に切り替え[31]、また、共有バッファのマッピングのハッシュテーブルのパーティション数を16から128に増やす[32]などの改善により、並列度が32〜64あたりでのパフォーマンスを改善した[33][34]。
更新処理
過去のバージョンの PostgreSQL は他の関係データベース管理システム (RDBMS) と比較して更新処理が遅いと言われていた。追記型アーキテクチャが採用されており、更新処理は削除と挿入の組み合わせとして実現されていた。特に挿入の際にインデックスのキーを追加する必要がある点で性能差が生じていた。
しかし、バージョン 8.3 にて Heap-Only Tuples (HOT) と呼ばれる機能が採用され、インデックスのキーとなっている列の値に変更が無い場合にはインデックスの更新を回避できるようになった。HOT により約2倍のスループット向上が確認されている。[35]
ベンチマーク
業界標準の規格に則ったベンチマーク結果として 2007年8月の サン・マイクロシステムズ (Sun) による報告がある。以下のハードウェアを使用し、813.73 SPECjAppServer2004 JOPS@Standard であった。[36]
- PostgreSQL 8.2.4
- Sun Java System Application Server 9.1 (商用版 GlassFish)
- Solaris 10
- Sun Fire T2000 (UltraSPARC T1 1.2GHz : 4スレッド × 8コア × 1個)
周辺ツール
管理ツール
PostgreSQL専用もしくは各種データベース汎用のデータベース接続クライアントを利用して管理できる。
psql
psql は PostgreSQL 付属のコマンドライン・プログラムである。SQL を直接入力またはファイルから読み込んで実行するほか、スキーマ情報の表示などのメタコマンドを持つ。また、SQL 構文やテーブル名などをタブキーにより入力補完できる。
pgAdmin
pgAdmin[※ 8] は GUI の管理インタフェースである。PostgreSQL License で配布される オープンソースソフトウェア (OSS) である。多くのプラットフォームで動作し、日本語を含む多くの言語が利用できる。また、専用の SQL エディタは psql と同様の入力補完機能を持つ。Microsoft SQL Server Management Studio と似たインタフェースでデータベースを操作できる。
phpPgAdmin
phpPgAdmin[※ 9]はウェブベースの管理ツールである。PHPで作られており GPL で配布されている。名称はphpMyAdminと似ているが、製品同士の関連性は無く、操作性はかなり異なる。
その他
レプリケーション・アドオン
PostgreSQL はバージョン 9.0 よりレプリケーションを標準でサポートするが、サードパーティー製のオプション・ソフトウェアも利用できる。
名前 | 方式 | 開発元 | 特徴 |
---|---|---|---|
Slony-I | 非同期型マスタスレーブ | Jan Wieck | バージョンアップやバックアップにも利用できる。 |
Mammoth Replicator[※ 13] | 非同期型マスタスレーブ | Command Prompt, Inc. | BSDライセンス。 |
Londiste[※ 14] | 非同期型マスタスレーブ | Skype | 堅牢性と扱いの容易さを目標とするツール。Python製。 |
Bucardo[※ 15] | 非同期型マルチマスタ | Greg Sabino Mullane | BSDライセンス。 |
PGCluster[※ 16] | 同期型マルチマスタ | 三谷篤 | ロードバランサ機能を備える。 |
Postgres-R[※ 17] | 同期型マルチマスタ | Markus Wanner | 継続して開発中。 |
Cybercluster[※ 18] | 同期型マルチマスタ | Cybertec | BSDライセンス。 |
pgpool-II[※ 19] | 同期型プロキシサーバ | SRA OSS Inc. | フェイルオーバー機能を備える。 |
Sequoia[※ 20] | 同期型プロキシサーバ/ドライバ | Continuent Inc. | 他DBMSにも接続できる。 |
PostgresForest[※ 21] | 同期型プロキシドライバ | NTTデータ | JDBCラッパ。 |
Fermion[※ 22] | 同期型マルチマスタ | 株式会社Murakumo | 検索および更新処理の負荷分散、自動フェイルオーバー機能、マルチキャストを用いたノードの自動追加処理機能を備える。 |
接続インタフェース
PostgreSQL はクライアントサーバモデルであり、データベースへの接続は主に TCP/IP ポート番号 5432 を用いて通信を行う。通信プロトコルは「フロントエンド/バックエンドプロトコル[37]」として公開されている。
言語 | 名前 | ライセンス | 開発元 |
---|---|---|---|
C | libpq | BSD | 本体同梱 |
psqlODBC | LGPL | https://odbc.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/ |
dotConnect for PostgreSQL | http://www.devart.com/dotconnect/postgresql/ | ||
OleDB | PgOleDb | LGPL | http://pgfoundry.org/projects/oledb/ |
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 | LGPL [38] | http://initd.org/ | |
pg8000 | BSD | https://github.com/tlocke/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ではユーザが自分で新たな定義域 (ドメイン、型) を既存の単純な定義域をもとにして定義できない点であった。Postgresでは型 (定義域) を完全にサポートするために必要な最小限の機能だけを導入した。Postgres ではデータベースが関係を「理解」すると言われ、「規則」に従って自然な方法で関連する関係 (リレーション、表、テーブル) から情報を得ることができた。ユーザ自身が型を定義する機能に加えて、関連を完全に記述できる機能も備えていた。プロジェクトは他にも、追記型メディア (光ディスクなど) への対応、大容量記憶装置への対応、推論、オブジェクト指向型データモデルなどを、取り入れた。実装においては、データベースとアプリケーションソフトウェアの間の新たなインタフェースを実験的に導入した。
プロジェクトチームは、1986年からPostgresシステムの基盤を説明した多数の論文を公表した。1988年、Postgres のプロトタイプバージョンを発表した。1989年6月、数名のユーザに対してPostgresバージョン1を公開した[2]。1990年6月、ルールシステム (RULE) を実装し直したバージョン2を公開した[2]。1991年、バージョン3を公開した[2]。バージョン3では、ルールシステムが再度実装し直され、複数の記憶装置を管理する機構が追加され、クエリエンジンが改良された。1993年には、非常に多くのユーザが、プロジェクトに対して、サポートと追加機能を要望して、圧倒させるほどの状態となっていた。1993年、主として雑然とした部分をきれいにしたことを内容とするバージョン4.2が公開された。バージョン4.2が公開された後、Postgres プロジェクトは終了した[2]。Postgres は広く使われたが、保守はユーザに任されていた。
マイケル・ストーンブレーカーと Paula Hawthorn は、Postgresを商業化するために、Illustra Information Technologies 社を創業して、Illustraの製品名で開発・販売した。その技術は IBM Informix Dynamic Server (IDS) に導入されている。
一方、オープンソースの世界のソフトウェア開発者たちは、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に変更した[2]。1997年1月に PostgreSQL プロジェクトとしての最初のバージョンである、PostgreSQL バージョン 6.0 が公開された。このときから、インターネットを通じて世界中のデータベース開発者のグループがPostgreSQLの開発に参加し、共同作業によるプロジェクトをうまく調整する体制ができあがった。
1999年7月23日、日本PostgreSQLユーザ会が設立し、任意団体として活動を開始した[39]。
Postgres は Illustra により商業化されていたが、Illustra は Informix に買収され、Informix は 2001年に IBM に買収された[2]。2001年以降には PostgreSQL を商用サポートする会社が現れた。
- 2001年 Command Prompt, Inc. (Mammoth Replicator; レプリケーション)
- 2003年 SRAOSS (PowerGres, PowerGRES Plus)
- PowerGRES Plusは富士通とSRAOSSが開発したRDBMSであり、SRAOSSがPostgreSQLより開発した商用RDB『PowerGres』をベースとして、ストレージ管理部分に富士通『Symfoware Server』のものを移植している。
- 2005年 EnterpriseDB 社 (Postgres Plus; Oracle との互換性向上)
- 2005年 Greenplum 社 (BizGres; データウェアハウスやBI向け)
2006年2月1日、日本PostgreSQLユーザ会は NPO として再編成された[39]。
2011年7月、オープンソースデータベース技術者認定試験(OSS-DB Exam)において基準のRDBMSとして採用された。
バージョン履歴
- 1986年 - カリフォルニア大学バークレー校 (UCB) でマイケル・ストーンブレーカーがPOSTGRESプロジェクトを発足[2]。
- 1987年 - プロトタイプが完成、翌年のACM-SIGMODコンファレンスで紹介される[2]。
- 1989年6月 - POSTGRES 1 を数名の外部ユーザーにリリース[2]。
- 1990年6月 - POSTGRES 2 のリリース。前バージョンの批評をもとにルールシステムが再設計された[2]。
- 1991年 - POSTGRES 3 のリリース。複数ストレージの管理機構追加等[2]。
- 1993年 - POSTGRES 4.2 をもってカリフォルニア大学バークレー校におけるPOSTGRESプロジェクトが終了[2]。
バージョン | リリース日 | 追加機能 |
---|---|---|
0.01 | 1995年5月1日 | POSTGRESのソースコードを元にした Postgres95 のリリース |
1.0 | 1995年9月5日 | SQL LIKE構文などを実装した Postgres95 の正式リリース |
メジャーバージョン | リリース日 | 最新マイナー版 | 最新版リリース日 | サポート期限 | 追加機能 |
---|---|---|---|---|---|
6.0 | 1997年1月29日 | N/A | N/A | N/A | PostgreSQL と名称を変え、POSTGRESプロジェクトの連番に戻された |
6.1 | 1997年6月8日 | 6.1.1 | 1997年7月22日 | N/A | |
6.2 | 1997年10月2日 | 6.2.1 | 1997年10月17日 | N/A | |
6.3 | 1998年3月1日 | 6.3.2 | 1998年4月7日 | 2003年3月1日 | 副問い合わせ, PL/Tcl |
6.4 | 1998年10月30日 | 6.4.2 | 1998年12月20日 | 2003年10月30日 | PL/pgSQL, マルチバイト文字列サポート, ビュー |
6.5 | 1999年6月9日 | 6.5.3 | 1999年10月13日 | 2004年6月9日 | MVCC, 一時表, CASE, INTERSECT, EXCEPT |
7.0 | 2000年5月8日 | 7.0.3 | 2000年11月11日 | 2004年5月8日 | 外部キー制約 |
7.1 | 2001年4月13日 | 7.1.3 | 2001年8月15日 | 2006年4月13日 | WAL, TOAST, OUTER JOIN |
7.2 | 2002年2月4日 | 7.2.8 | 2005年5月9日 | 2007年2月4日 | コンカレントVACUUM, PL/Python |
7.3 | 2002年11月27日 | 7.3.21 | 2008年1月7日 | 2007年11月27日 | スキーマ, ドメイン, PREPARE |
7.4 | 2003年11月17日 | 7.4.30 | 2010年10月4日 | 2010年10月1日 | IPv6, information_schema |
8.0 | 2005年1月19日 | 8.0.26 | 2010年10月4日 | 2010年10月1日 | Microsoft Windows対応, SAVEPOINT, PITR, 表領域 [40] |
8.1 | 2005年11月8日 | 8.1.23 | 2010年12月16日 | 2010年11月8日 | 2相コミット, ROLE, 行共有ロック, テーブル・パーティショニング [41] |
8.2 | 2006年12月5日 | 8.2.23 | 2011年12月5日 | 2011年12月5日 | ウォームスタンバイ, GIN [42] |
8.3 | 2008年2月4日 | 8.3.23 | 2013年2月7日 | 2013年2月7日 | 更新処理性能の向上, XMLデータ型, 全文検索, JIS X 0213, ENUM型, UUID型 [43] |
8.4 | 2009年7月1日 | 8.4.22 | 2014年7月24日 | 2014年7月24日 | 再帰クエリ, ウィンドウ関数, 列単位のアクセス制御, SQLと関数の性能解析機能 [44] |
9.0 | 2010年9月20日 | 9.0.23 | 2015年10月8日 | 2015年10月8日 | レプリケーション, 一括権限変更, 匿名プロシージャ, 64bit Windows サポート, 移動平均, 列/条件トリガ, 一意性制約の遅延, 排他制約 [45] |
9.1 | 2011年9月12日 | 9.1.24 | 2016年10月27日 | 2016年10月27日 | 同期レプリケーション, 外部テーブル, パッケージ管理, UNLOGGEDテーブル, 更新可能なWITH句, 近傍検索, SELinux権限制御[46] |
9.2 | 2012年9月10日 | 9.2.24 | 2017年11月9日 | 2017年11月9日 | インデックスオンリースキャン, カスケードレプリケーション, JSON型, 範囲型[47] |
9.3 | 2013年9月9日 | 9.3.25 | 2018年11月8日 | 2018年11月8日 | マテリアライズドビュー, 外部テーブルへの書き出し, イベントトリガ, データページ・チェックサム, LATERAL句[48] |
9.4 | 2014年12月18日 | 9.4.26 | 2019年11月14日 | 2020年2月13日 | JSONB型, SQLからのサーバー設定の変更(ALTER SYSTEM), レプリケーションスロット[49] |
9.5 | 2016年1月7日 | 9.5.25 | 2021年2月11日 | 2021年2月11日 | UPSERT機能, ALTER TABLE tablename ENABLE ROW LEVEL SECURITYコマンド, ブロックレンジインデックス(BRIN)[50] |
9.6 | 2016年9月29日 | 9.6.24 | 2021年11月11日 | 2021年11月11日 | 同期レプリケーション機能の強化(「remote_apply」モード), PostgreSQL間のデータ連携ドライバー(「postgres_fdw」)の強化(リモート下にあるサーバーにおいても実行可能となる)[51] |
10 | 2017年10月5日 | 10.23 | 2022年11月10日 | 2022年11月10日 | ロジカルレプリケーション, 宣言的テーブルパーティショニング(Declarative Table Partitioning)[52] |
11 | 2018年10月18日 | 11.22 | 2023年11月9日 | 2023年11月9日 | ハッシュキーによるデータのパティショニング, (デフォルトでは搭載していないがLLVMをビルドすることで)クエリの一部の処理時間を短縮するJITコンパイラのサポート[53] |
12 | 2019年10月3日 | 12.19 | 2024年5月9日 | 2024年11月14日 | クエリパフォーマンスとスペース使用率の改善, SQL/JSONパス式のサポート, 生成列, 国際化と認証の改善, 新しいプラガブルテーブルストレージインターフェイス[54] |
13 | 2020年9月24日 | 13.15 | 2024年5月9日 | 2025年11月13日 | Bツリーインデックス項目の重複除去による省スペース化と性能向上, 集約やパーティションテーブルを使う問い合わせの性能改善, 拡張統計情報を使ったときのより良い問い合わせの計画作成, 並列化されたインデックスのバキューム, インクリメンタルソート[55][56] |
14 | 2021年9月30日 | 14.12 | 2024年5月9日 | 2026年11月12日 | 共通テーブル式にSQL標準のSEARCHとCYCLE句を追加, GROUP BYにDISTINCTを追加可能[57][58] |
15 | 2022年10月13日 | 15.7 | 2024年5月9日 | 2027年11月11日 | 標準SQLのMERGEコマンドの追加. PL/Python はPython 3のみのサポートになり、plpythonu は Python 3になる, Python 2のサポートは削除[59][60]
|
16 | 2023年9月14日 | 16.3 | 2024年5月9日 | 2028年11月9日 | 論理レプリケーションの改善, pg_stat_io ビュー (I/O統計)[61] |
17 | 2024年9月26日 | 17.2 | 2024年11月21日 | 2029年11月8日 | バキュームプロセス、I/O層、クエリ実行のパフォーマンス向上、JSON機能の拡張、MERGE機能の追加、コピー機能の改善、高可用性とアップグレードのための論理レプリケーションの強化、セキュリティ、操作、監視、分析の改善。 |
凡例 サポート終了 サポート中 現行バージョン 最新プレビュー版 将来のリリース |
PostgreSQLのバージョンは以下のように表現される。
- 6.0〜9.6:「x.y.z」(x、y、zはそれぞれ整数) で表現される。「x.y」の部分がメジャーバージョン、「z」がマイナーバージョンである[62]。
- 10以降:整数部がメジャーバージョンを表現する[63]。「x.y」(x、yはそれぞれ整数) で表現され、「x」の部分がメジャーバージョン、「y」がアップデート番号である。
注目すべきユーザー
PostgreSQLをプライマリデータベースとして使用している注目すべき組織や製品には、以下のようなものがある。
- 2009年、ソーシャルネットワーキングWebサイトMyspaceは、 Aster Data SystemsのnClusterデータベースを、変更されていないPostgreSQL上に構築されたデータウェアハウジングに使用した。
- Geni.comは、主要な系図データベースにPostgreSQLを使用している。
- OpenStreetMapは、無料の編集可能な世界地図を作成するための共同プロジェクトである。
- Afilias、 .org、.infoなどのドメインレジストリ。 [64]
- Sony Onlineマルチプレーヤーオンラインゲーム。
- BASF、アグリビジネスポータルのショッピングプラットフォーム。
- Redditソーシャルニュースウェブサイト。
- Skype VoIPアプリケーション、中央ビジネスデータベース。 [65]
- Sun xVM、Sunの仮想化およびデータセンター自動化スイート。
- MusicBrainz、オープンオンライン音楽百科事典。
- 国際宇宙ステーション – 軌道上でテレメトリデータを収集し、地上に複製する。
- MyYearbookソーシャルネットワーキングサイト。
- Instagram、モバイル写真共有サービス。
- Disqus、オンラインディスカッションおよびコメントサービス。
- トリップアドバイザー、主にユーザーが作成したコンテンツの旅行情報ウェブサイト。
- ロシアのインターネット企業Yandexは、Yandex.MailサービスをOracleからPostgresに切り替えた[66]。
- AWSの一部であるAmazon Redshiftは、ParAccelのPostgres改変版をベースにしたカラム型オンライン分析処理(OLAP)システムである。
- National Oceanic and Atmospheric Administration (NOAA) National Weather Service (NWS)、Interactive Forecast Preparation System(IFPS)、 NEXRAD 気象レーダー 、地表、および水文学システムからのデータを統合して詳細なローカライズされた予測モデルを構築するシステム。 [64] [67]
- イギリスの全国気象サービスMet Officeは 、より多くのオープンソーステクノロジーを展開するための戦略において、OracleをPostgreSQLに置き換え始めた。 [67] [68]
- WhitePages.comはOracleとMySQLを使用していたが、コアディレクトリを社内で移動することになったとき、PostgreSQLを使用することにした。WhitePages.comは複数のソースからの大規模なデータセットを組み合わせる必要があるため、データを高速にロードしてインデックスを作成できるPostgreSQLの能力が、PostgreSQLの使用を決定する鍵となった [64]。
- FlightAware 、フライト追跡Webサイト。 [69]
- Grofersは、オンライン食料品配達サービス。 [70]
- Guardianは2018年にMongoDBからPostgreSQLに移行した [71]。
受賞
2008年の時点で、PostgreSQL は以下の受賞をしている[72]。
- 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
注釈
- ^ 発音例
- ^ D.1. サポートされている機能 / D.2. サポートされていない機能
- ^ PostgreSQL PL/Java – PL/Java: stored procedures, triggers, and functions for PostgreSQL™
- ^ GitHub - pllua/pllua: Re-implementation of pllua, embedded Lua for postgresql
- ^ Joseph Conway - PL/R
- ^ GitHub - petere/plsh: PL/sh is a procedural language handler for PostgreSQL that allows you to write stored procedures in a shell of your choice.
- ^ GitHub - plv8/plv8: V8 Engine Javascript Procedural Language add-on for PostgreSQL
- ^ pgAdmin - PostgreSQL Tools
- ^ GitHub - phppgadmin/phppgadmin: the premier web-based administration tool for postgresql
- ^ Navicat for PostgreSQL | PostgreSQL のための強力な管理ツール
- ^ Database tools for MySQL, SQL Server, PostgreSQL, SQLite, Oracle, DB2, Firebird by SQL Maestro Group
- ^ Database Master - Nucleon Software
- ^ [1]
- ^ [2]
- ^ Bucardo.org Open Source Projects
- ^ [3]
- ^ Postgres-R: a database replication system for PostgreSQL
- ^ [4]
- ^ [5]
- ^ [6]
- ^ PostgresForest プロジェクト日本語トップページ - OSDN
- ^ [7]
出典
- ^ PostgreSQL: Documentation: 10: E.343. Release 6.0
- ^ a b c d e f g h i j k l m PostgreSQL: Documentation: 10: 2. A Brief History of PostgreSQL
- ^ "PostgreSQL 17.4, 16.8, 15.12, 14.17, and 13.20 Released"; 出版日: 2025年2月20日.
- ^ マイケル・ストーンブレーカー (1986). “Object management in POSTGRES using procedures”. International Workshop on Object-Oriented Database Systems. IEEE Computer Society Press. ISBN 0-8186-0734-3
- ^ “Stack Overflow Developer Survey 2023”. Stack Overflow. 2024年7月27日閲覧。
- ^ “Technology | 2024 Stack Overflow Developer Survey”. survey.stackoverflow.co. 2024年7月27日閲覧。
- ^ DB-Engines Ranking - popularity ranking of database management systems
- ^ historical trend of the popularity ranking of database management systems
- ^ a b “Software Stack Market Share: July 2012”. 2018年2月10日閲覧。
- ^ “Package: mingw-w64-x86_64-postgresql - MSYS2 Packages”. packages.msys2.org. 2024年7月27日閲覧。
- ^ “Cygwin Package Summary for postgresql”. cygwin.com. 2024年7月27日閲覧。
- ^ PostgreSQL: Documentation: 10: Chapter 41. Procedural Languages
- ^ PostgreSQL: Documentation: 10: 37.9. C-Language Functions
- ^ PostgreSQL: Documentation: 10: H.3. Procedural Languages
- ^ 11.2. インデックスの種類
- ^ 第61章 GiSTインデックス
- ^ 第62章 SP-GiSTインデックス
- ^ 第63章 GINインデックス
- ^ 第64章 BRINインデックス
- ^ 第8章 データ型
- ^ PostgreSQL: Documentation: 10: 5.10. Table Partitioning
- ^ 第26章 高可用性、負荷分散およびレプリケーション
- ^ PostgreSQL: Documentation: 10: Chapter 31. Logical Replication
- ^ “「PostgreSQL 9.5」リリース”. Impress Corporation (2016年1月9日). 2016年1月17日閲覧。
- ^ “Documentation, Chapter 25. Backup and Restore”. 1996-2020 The PostgreSQL Global Development Group (2020年). 2020年10月1日閲覧。
- ^ PostgreSQL 文書, "リリース8.0.2"
- ^ OSS iPedia, "DBT-1によるPostgreSQL8.1の32ビットマシン(IA32)でのCPUスケーラビリティに関する考察(チューニング有り) "
- ^ OSS iPedia, "DBT-1によるパッチを適用したPostgreSQL8.1.2の32ビットマシン(IA32)でのCPUスケーラビリティに関する考察(チューニング有り) "
- ^ a b Robert Haas (2012年4月3日). “Did I Say 32 Cores? How about 64?”. 2012年11月3日閲覧。
- ^ Doug Tolbert (Unisys), "Scaling PostgreSQL on SMP Architectures -- An Update" (PGCon 2007)
- ^ Improve LWLock scalability - git.postgresql.org Git - postgresql.git/commitdiff
- ^ Increase the number of buffer mapping partitions to 128 - git.postgresql.org Git - postgresql.git/commitdiff
- ^ Read Scalability in PostgreSQL 9.5 | EnterpriseDB
- ^ 最新PostgreSQLはパフォーマンスが飛躍的に向上する!? – PostgreSQLのCPUスケーラビリティについて – | db tech showcase
- ^ 【PostgreSQLウォッチ】第35回 性能を大幅に改善するPostgreSQL 8.3の新機能「HOT」とは
- ^ “SPECjAppServer2004 Result”. SPEC (2007年7月4日). 2009年1月2日閲覧。
- ^ 第51章 フロントエンド/バックエンドプロトコル
- ^ “psycopg2 and the LGPL”. 2019年8月19日閲覧。
- ^ a b 日本PostgreSQLユーザ会の目的 | 日本PostgreSQLユーザ会
- ^ “リリースノート 8.0”. PostgreSQL 文書 (2005年1月19日). 2009年8月29日閲覧。
- ^ “リリースノート 8.1”. PostgreSQL 文書 (2005年11月8日). 2009年8月29日閲覧。
- ^ “リリースノート 8.2”. PostgreSQL 文書 (2006年12月5日). 2009年8月29日閲覧。
- ^ “リリースノート 8.3”. PostgreSQL 文書 (2008年2月4日). 2009年8月29日閲覧。
- ^ “リリースノート 8.4”. PostgreSQL 文書 (2009年7月1日). 2009年8月29日閲覧。
- ^ “リリースノート 9.0”. PostgreSQL 文書 (2010年9月20日). 2010年10月6日閲覧。
- ^ “リリースノート 9.1”. PostgreSQL 文書 (2011年9月12日). 2011年11月12日閲覧。
- ^ “リリースノート 9.2”. PostgreSQL 文書 (2012年9月10日). 2012年11月3日閲覧。
- ^ “Release 9.3”. PostgreSQL Documentation (2013年9月9日). 2013年9月9日閲覧。
- ^ “Release 9.4”. PostgreSQL Documentation (2014年12月18日). 2015年8月19日閲覧。
- ^ “Release 9.5”. PostgreSQL Documentation (2016年1月7日). 2016年5月23日閲覧。
- ^ “E.1. Release 9.6”. PostgreSQL Documentation (2016年9月29日). 2016年10月1日閲覧。
- ^ “E.1. Release 10.0”. PostgreSQL Documentation (2017年10月5日). 2017年10月8日閲覧。
- ^ “E.2. Release 11”. PostgreSQL Documentation (2018年10月18日). 2018年11月9日閲覧。
- ^ “PostgreSQL: PostgreSQL 12 Released!”. Postgresql News 2024年4月30日閲覧。
- ^ “PostgreSQL 13 Release Notes”. www.postgresql.org. 2024年4月30日閲覧。
- ^ “PostgreSQL 13 Released!”. www.postgresql.org. 2024年4月30日閲覧。
- ^ “PostgreSQL 14 Release Notes”. www.postgresql.org. 2024年4月30日閲覧。
- ^ “PostgreSQL 14 Released!”. www.postgresql.org. 2024年4月30日閲覧。
- ^ “PostgreSQL 15 Release Notes”. www.postgresql.org. 2024年4月30日閲覧。
- ^ “PostgreSQL 15 Released!”. www.postgresql.org. 2024年4月30日閲覧。
- ^ “PostgreSQL 16 Released!”. 2024年4月30日閲覧。
- ^ 鈴木啓修「PostgreSQLと高可用性システム/大規模システム PostgreSQLの進化の足跡」『WEB+DB PRESS Vol.48』(初版第1刷)技術評論社、2009年1月25日、104頁。
- ^ Change in Version Numbering - New in postgres 10 - PostgreSQL wiki
- ^ a b c W. Jason Gilmore; R.H. Treat (2006). Beginning PHP and PostgreSQL 8: From Novice to Professional. Apress. ISBN 978-1-43020-136-6 2017年8月30日閲覧。
- ^ Pihlak. “PostgreSQL @Skype”. wiki.postgresql.org. 2019年1月16日閲覧。
- ^ “Yandex.Mail's successful migration from Oracle to Postgres [pdf]”. Hacker News: news.ycombinator.com. 2016年9月28日閲覧。
- ^ a b S. Riggs; G. Ciolli; H. Krosing; G. Bartolini (2015). PostgreSQL 9 Administration Cookbook - Second Edition. Packt. ISBN 978-1-84951-906-9 2017年9月5日閲覧。
- ^ “Met Office swaps Oracle for PostgreSQL”. computerweekly.com. (2014年6月17日) 2017年9月5日閲覧。
- ^ “Open Source Software”. FlightAware. 2017年11月22日閲覧。
- ^ “Ansible at Grofers (Part 2) — Managing PostgreSQL”. Lambda - The Grofers Engineering Blog. (2017年2月28日) 2018年9月5日閲覧。
- ^ McMahon, Philip; Chiorean, Maria-Livia; Coleman, Susie; Askoolum, Akash (2018年11月30日). “Digital Blog: Bye bye Mongo, Hello Postgres” (英語). The Guardian. ISSN 0261-3077
- ^ PostgreSQL: Awards
参考書籍
- 笠原辰仁, 北川俊広, 坂井潔, 坂本昌彦, 佐藤友章『PostgreSQL徹底入門 第3版』翔泳社、2011年。ISBN 978-4798123356。
- 高塚遙、松田亮一、田中ナルミ、吉岡肇『新標準PostgreSQL』ソフトバンククリエイティブ、2009年。ISBN 978-4797354713。
- 石井達夫『今すぐ導入!PHP×PostgreSQLで作る最強Webシステム』技術評論社、2009年。ISBN 978-4774138930。
- 浅羽義之、石田朗雄、稲葉香理、永安悟史『PostgreSQL徹底入門 第2版』翔泳社、2008年。ISBN 978-4798115054。
- 鈴木啓修『PostgreSQL完全機能リファレンス』秀和システム、2006年。ISBN 978-4798014951。
- 三木秀治『PHP & PostgreSQLで作る実用Webシステム』毎日コミュニケーションズ、2006年。ISBN 978-4839921194。
外部リンク
- 公式ウェブサイト
- PostgreSQL (@postgresql) - X(旧Twitter)
- PostgreSQL Wiki
- PgFoundry (関連プロジェクト)
- NPO法人 日本PostgreSQLユーザ会
- PostgreSQL日本語ドキュメント
- Let's Postgres (JPUGポータル)
- PostgreSQL Information Page - ウェイバックマシン(2005年3月1日アーカイブ分) 石井達夫によるPostgreSQLの紹介ページ
- PostgreSQL Notes for Japanese くわむらじゅんによるPostgreSQLの紹介ページ
- Planet PostgreSQL (Blogの集約)
PostgreSQL
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2017/01/18 00:33 UTC 版)
「トム・レーン」の記事における「PostgreSQL」の解説
PostgreSQL 開発コミュニティの中心を担うコアメンバの一員である。 彼は、コアメンバの一員の中でもPostgreSQL の新機能開発、性能向上、バグフィックスなどのすべての分野に関わっている最も強力な開発者である。 オプティマイザの責任者である。
※この「PostgreSQL」の解説は、「トム・レーン」の解説の一部です。
「PostgreSQL」を含む「トム・レーン」の記事については、「トム・レーン」の概要を参照ください。
固有名詞の分類
オープンソース |
Dpkg Apache HTTP Server PostgreSQL Gretl KMail |
フリーソフトウェア |
KuickShow SuperKaramba PostgreSQL Bacula SymPy |
- PostGreSQLのページへのリンク