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 はキーワードではありません。