是什么导致我的SQL事务在php没有注意到的情况下中止?

是什么导致我的SQL事务在php没有注意到的情况下中止?,php,sql,postgresql,kohana,kohana-3,Php,Sql,Postgresql,Kohana,Kohana 3,我正在用PHP和Postgresql 9.0从kohana 3.2框架中执行SQL事务 我有个例外 数据库_异常[0]:错误:当前事务已中止, 在事务块结束之前忽略命令[从中选择c.* contents c其中c.content_id=129且存在从中选择NULL 内容tmp,其中tmp.content\u id=c.content\u id和c.content\u id= 129按tmp.content分组\u id具有MAXtmp.version=c.version] 我很奇怪,因为这意味着

我正在用PHP和Postgresql 9.0从kohana 3.2框架中执行SQL事务

我有个例外

数据库_异常[0]:错误:当前事务已中止, 在事务块结束之前忽略命令[从中选择c.* contents c其中c.content_id=129且存在从中选择NULL 内容tmp,其中tmp.content\u id=c.content\u id和c.content\u id= 129按tmp.content分组\u id具有MAXtmp.version=c.version]

我很奇怪,因为这意味着在此之前的一些SQL失败了,因此不再接受任何SQL语句。但是,我在try/catch块中调用了所有SQL,并在重试之前回滚catch

所以我永远不会看到这个异常,对吗?相反,我希望看到之前的异常,这会破坏交易的开始

我在我的PHPDB驱动程序中添加了日志记录,并记录了导致问题的以下SQL语句。下面的最后一个SELECT语句是上面我的异常中引用的语句

异常语句之前的语句是一个插入,这将是扰流板的一个很好的候选语句,但是当我手动运行所有这些语句时,它们都正确地通过了

UPDATE "articles" 
SET article_id = 126, title = 'abc', blurb = 'abc article blurb' 
WHERE "article_id" = 126 

SELECT c.* FROM contents c 
WHERE c.content_id = 127 
AND EXISTS( 
     SELECT NULL FROM contents tmp 
     WHERE tmp.content_id = c.content_id AND c.content_id = 127 
     GROUP BY tmp.content_id HAVING MAX(tmp.version) = c.version 
)

SELECT c.* FROM contents c 
WHERE c.content_id = 128 AND EXISTS( 
    SELECT NULL FROM contents tmp 
    WHERE tmp.content_id = c.content_id AND c.content_id = 128 
    GROUP BY tmp.content_id HAVING MAX(tmp.version) = c.version 
)

INSERT INTO "contents" 
("blurb", "content", "content_id", "content_type_id", "title", "author_id", "version", "editor_id") 
VALUES 
('postit art', 'FEATURE_IMG_david-chan-drawing_IMG_0221.JPG', 128, 2, 'david chan drawing', 5, 2, 4) 

 SELECT c.* FROM contents c 
 WHERE c.content_id = 129 AND EXISTS( 
     SELECT NULL FROM contents tmp 
     WHERE tmp.content_id = c.content_id AND c.content_id = 129 
     GROUP BY tmp.content_id HAVING MAX(tmp.version) = c.version 
 ) 

是什么导致我的事务中止?

PostgreSQL server本身将记录事务中的错误,以及导致这些错误的SQL,这可能有助于提供线程的另一端来获取这些错误


如果数据库执行许多不同的任务,例如日志行前缀=“%t%c%q%u@%h:%d”,您可能需要定义一个日志行前缀来帮助您选择客户端。谢谢!在找到管理员后,我发现kohana的db调用last_val失败了,因为我有一个多键表。