さまざまなデータベース タイプ (MSSQL、Postgres、および MySQL) でデータベースを更新する、PHP/Yii に基づく非常に広範な PHP 更新スクリプトがあります。
スクリプト全体がトランザクション内で実行されます。ただし、クエリ エラーにつながるステートメントがいくつかあります (たとえば、特定のキーがテーブルに既に存在する場合など)。これらをtry/catch
ステートメントで囲みました-これはこれまでのところMySQLで正常に機能します
ただし、Postgres では、無効なクエリが発行されると、トランザクションは自動的に失敗します。次のすべてのステートメントに対して、次のエラー メッセージが表示されます。
CDbCommand failed to execute the SQL statement: SQLSTATE[25P02]: In failed sql transaction: ERROR: current transaction is aborted, commands ignored until end of transaction block
しかし、いつロールバックするか、またはエラーをクリアしてトランザクションを続行する方法をアプリケーションで決定したいので、Postgres がトランザクションを続行する必要があります。
どうやってするか?