Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql";“无正在进行的交易”;_Sql_Postgresql_Transactions - Fatal编程技术网

Postgresql";“无正在进行的交易”;

Postgresql";“无正在进行的交易”;,sql,postgresql,transactions,Sql,Postgresql,Transactions,为什么在COMMIT之后,即使我已使用START transaction明确启动了一个事务(与BEGIN的工作原理相同),我也会收到关于“没有正在进行的事务”的警告?对于此特定事务,这将在90%的时间内发生,但在其他时间,提交将成功。我用的是postgres 9.3。这是postgres日志: 2014-07-04 21:47:19 EST LOG: statement: START TRANSACTION; 2014-07-04 21:47:19 EST LOG: statement: S

为什么在
COMMIT
之后,即使我已使用
START transaction
明确启动了一个事务(与
BEGIN
的工作原理相同),我也会收到关于“没有正在进行的事务”的警告?对于此特定事务,这将在90%的时间内发生,但在其他时间,提交将成功。我用的是postgres 9.3。这是postgres日志:

2014-07-04 21:47:19 EST LOG:  statement: START TRANSACTION;
2014-07-04 21:47:19 EST LOG:  statement: SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
2014-07-04 21:47:19 EST LOG:  statement: SET autocommit = 1;
2014-07-04 21:47:19 EST LOG:  statement: SET TIME ZONE 'UTC'
2014-07-04 21:47:19 EST LOG:  statement: INSERT INTO "Users" (...) VALUES (...) RETURNING *;
2014-07-04 21:47:19 EST LOG:  statement: INSERT INTO "Profiles" (...) RETURNING *;
2014-07-04 21:47:19 EST LOG:  statement: SET TIME ZONE 'UTC'
2014-07-04 21:47:19 EST LOG:  statement: INSERT INTO "Sessions" (...) VALUES (...) RETURNING *;
2014-07-04 21:47:20 EST LOG:  statement: COMMIT;
2014-07-04 21:47:20 EST WARNING:  there is no transaction in progress

您正在使用自动提交。使用自动提交时,显式启动事务是没有意义的


删除行“set autocommit=1”或将1更改为“off”或等效值,这样应该可以工作。

确定它们是同一个会话吗?将
%p
添加到
日志行前缀中
,然后重试。另外,什么样的客户端库、客户端应用程序?对于失败的
启动事务
-
提交
对,会话ID是不同的,它们在工作时是相同的。这可能是问题所在吗?会话是否需要相同?抱歉,如果这是一个愚蠢的问题;我不知道交易在幕后是如何运作的。我正在使用测试版2.0.0 ORM和node,这可能是问题所在,但我已经使用它一段时间了,没有任何问题,然后这种情况开始随机发生。“当使用自动提交时,显式启动事务是没有意义的。”-这不是真的。@horse\u和\u no\u名称取决于驱动程序中的自动提交实现。在许多情况下,它与
BEGIN相同;承诺-或
开始;开始;承诺
.a\u horse\u with\u no\u name:Quote postgres documentation on autocommit:“此命令可以将会话更改为autocommit模式,其中每个语句都是隐式提交的。”这意味着,每个语句与BEGIN基本相同;陈述犯罪因此,增加额外的开始;犯罪命令不会改变任何东西。命令中说:“默认情况下(不带
BEGIN
),PostgreSQL以“autocommit”模式执行事务,也就是说,每个语句在其自己的事务中执行,并在语句末尾隐式执行提交(如果执行成功,则执行回滚)”。如果我使用的是
BEGIN
,那么autocommit没有任何意义,因为我明确地告诉postgres事务的开始和结束,对吗?