[bug fix] Savepoint-related statements terminates connection
От | Tsunakawa, Takayuki |
---|---|
Тема | [bug fix] Savepoint-related statements terminates connection |
Дата | |
Msg-id | 0A3221C70F24FB45833433255569204D1F6BE40D@G01JPEXMBYT05 обсуждение исходный текст |
Ответы |
Re: [bug fix] Savepoint-related statements terminates connection
|
Список | pgsql-hackers |
Hello, I found a trivial bug that terminates the connection. The attached patch fixes this. PROBLEM ======================================== Savepoint-related statements in a multi-command query terminates the connection unexpectedly, as follows. $ psql -d postgres -c "SELECT 1; SAVEPOINT sp" FATAL: DefineSavepoint: unexpected state STARTED server closed the connection unexpectedly This probably means the server terminated abnormally before or while processing the request. connection to server was lost CAUSE ======================================== 1. In exec_simple_query(), isTopLevel is set to false. isTopLevel = (list_length(parsetree_list) == 1); Then it is passed to PortalRun(). (void) PortalRun(portal, FETCH_ALL, isTopLevel, receiver, receiver, completionTag); 2. The isTopLevel flag is passed through ProcessUtility() to RequireTransactionChain(). RequireTransactionChain(isTopLevel, "SAVEPOINT"); 3. CheckTransactionChain() returns successfully here: /* * inside a function call? */ if (!isTopLevel) return; 4. Finally, unexpectedly called DefineSavepoint() reports invalid transaction block state. /* These cases are invalid. */ case TBLOCK_DEFAULT: case TBLOCK_STARTED: ... elog(FATAL, "DefineSavepoint: unexpected state %s", BlockStateAsString(s->blockState)); SOLUTION ======================================== The manual page says "Savepoints can only be established when inside a transaction block." So just check for it. https://www.postgresql.org/docs/devel/static/sql-savepoint.html RESULT AFTER FIX ======================================== $ psql -d postgres -c "SELECT 1; SAVEPOINT sp" ERROR: SAVEPOINT can only be used in transaction blocks Regards Takayuki Tsunakawa
Вложения
В списке pgsql-hackers по дате отправления: