我正在使用Postgresql 9.0从PHP中的kohana 3.2框架进行SQL事务
我得到了一个例外
Database_Exception [0]:错误:当前事务被中止, 命令被忽略,直到事务块结束[SELECT c。* FROM 内容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)]
我很奇怪,因为这意味着我之前的一些SQL失败了,因此不再接受SQL语句。但是我在try / catch块中进行了所有SQL调用,并在重新抛出之前对catch执行回滚。
所以我永远不应该看到这个异常吗?而是希望看到之前的那个,这会破坏交易开始......
我在我的PHP DB驱动程序中添加了日志记录,并记录了导致该问题的以下SQL语句。下面的最后一个SELECT语句是我上面的例外中引用的语句。
异常声明之前的语句是一个INSERT,它可能是扰流器的一个很好的候选者,但是当我手动运行所有这些语句时,它们都可以正常运行。
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
)
是什么导致我的交易中止?
答案 0 :(得分:2)
PostgreSQL服务器本身会记录事务中的错误以及导致它们的SQL,这可能有助于提供线程的另一端来获取吗?
如果数据库执行了很多不同的任务(例如...... log_line_prefix
),您可能需要定义log_line_prefix = '%t %c %q%u@%h:%d '
来帮助您挑选客户端