Don';t使用PHP、PDO和Postgres回滚事务中的错误

Don';t使用PHP、PDO和Postgres回滚事务中的错误,php,postgresql,pdo,yii,Php,Postgresql,Pdo,Yii,我有一个基于PHP/Yii的非常广泛的PHP更新脚本,它在不同的数据库类型(MSSQL、Postgres和MySQL)上更新数据库 整个脚本在一个事务中运行。但是,有些语句会导致查询错误(例如,如果表上已经存在某个键)。我用try/catch语句包围了它们——到目前为止,这在MySQL中运行良好 然而,在Postgres上,一旦发出无效查询,事务将自动失败。对于以下所有语句,将显示以下错误消息: CDbCommand failed to execute the SQL statement: SQ

我有一个基于PHP/Yii的非常广泛的PHP更新脚本,它在不同的数据库类型(MSSQL、Postgres和MySQL)上更新数据库

整个脚本在一个事务中运行。但是,有些语句会导致查询错误(例如,如果表上已经存在某个键)。我用
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继续事务,因为我想在应用程序中决定何时回滚,或者以某种方式清除错误并继续事务


如何做到这一点?

为此使用保存点:

BEGIN; -- transaction starts here

-- do things if you want

SAVEPOINT my_savepoint;

-- failing statement here
-- all other statements are ignored

ROLLBACK TO SAVEPOINT my_savepoint;

-- continue your transaction starting from my_savepoint

COMMIT;

如果脚本检测到“重复密钥错误”,下一步将是什么?@wildplasser:其他一些不相关的语句。