Hi Ideriha-san, >>>> Hi, it makes sense to me. One can submit transaction again same as >>>> other cases you mentioned. >>>> >>>> I didn't attach the patch but according to my simple experiment in >>>> psql the output would become the following: >>>> >>>> FATAL: terminating connection due to idle-in-transaction timeout >>>> HINT: In a moment you should be able to reconnect to the >>>> database and repeat your command. >>> >>>Alternative HINT message would be something like: >>> >>>HINT: In a moment you should be able to reconnect to the >>> database and restart your transaction. >>> >>>This could make the meaning of the error (transaction aborted) cleaner and >>>might give >>>a better suggestion to the user. >> >> Agreed. Changing "command" to "transaction" seems more accurate. People >> might think >> only the command they hit is not sent but transaction is still alive though >> it's of course unnatural >> that transaction is alive after connection is terminated. >> >> In this case you could change the comment issued by other errors mentioned >> while you're at it. >> >> Regards, >> Takeshi Ideriha > > I have added this to the next CF (2019-01).
Please find attached patch which addresses the point above. BTW, would you like to be added to the CF item as a reviewer? Best regards, -- Tatsuo Ishii SRA OSS, Inc. Japan English: http://www.sraoss.co.jp/index_en.php Japanese:http://www.sraoss.co.jp
diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c index 9a948f825d..27337a21da 100644 --- a/src/backend/tcop/postgres.c +++ b/src/backend/tcop/postgres.c @@ -3150,7 +3150,9 @@ ProcessInterrupts(void) if (IdleInTransactionSessionTimeout > 0) ereport(FATAL, (errcode(ERRCODE_IDLE_IN_TRANSACTION_SESSION_TIMEOUT), - errmsg("terminating connection due to idle-in-transaction timeout"))); + errmsg("terminating connection due to idle-in-transaction timeout"), + errhint("In a moment you should be able to reconnect to the" + " database and restart your transaction."))); else IdleInTransactionSessionTimeoutPending = false;