SQL enhancements#

EDB Postgres Extended Serverには、多数のSQLの機能強化が含まれています。

ロールバックオプション#

PostgreSQLでは、トランザクションでエラーが発生すると、そのトランザクションによるすべてのアクションがロールバックされます。この動作は、エラーによって最後のステートメントのみがロールバックされるOracleやSQL Serverなどの他のDBMSとは異なります。トランザクション処理セマンティクスのこの違いは、すべての場合で問題を引き起こすわけではありませんが、Oracle DatabaseおよびMicrosoft SQL Serverの開発者にとって、PostgreSQLでのビジネスロジックの実装が困難になります。

1つの回避策は、内部でサブトランザクションとして知られるセーブポイントをアプリケーションコードに手動で導入することです。これは時間がかかり、テストが困難です。セーブポイントは追加のステートメントであるため、トランザクションのレイテンシーが増加します。追加の開発作業のオーバーヘッドとパフォーマンスの低下を考慮すると、このアプローチはほとんどの場合実行可能ではありません。

EDB Postgres Extended Serverでは、現在のステートメントのみをロールバックできます。ステートメントレベルのロールバック機能は、トランザクション全体または現在のステートメントのみのロールバックを許可するかどうかを選択するオプションのモードを提供します。手動でのコーディングは必要ありません。若干のオーバーヘッドが追加されますが、セーブポイントよりも低いです。

データベース内のトランザクションロールバックスコープの設定については transaction_rollback_scope を参照し、JDBCバッチジョブのエラーを過ぎて続行する方法については JDBC properties for rollback scope を参照してください。

準備されたステートメントを使用したカーソル#

EDB Postgres Extended Serverでは、以前に作成したプリペアドステートメントの上でカーソルを宣言できます。

例

PREPARE foo AS ...; DECLARE c1 CURSOR FOR foo;

PL/pgSQLの互換性#

EDB Postgres Extended Serverは、多くのPL/pgSQL互換性機能を備えた他の移行ツールと統合しています。

全体的な簡素化のために、 EDB Postgres Extended Serverでは、 PERFORMキーワードなしでplpqslを使用してファンクションを呼び出すことができます。

例

BEGIN somefunc(); END

somefunc はキーワードではありません。