On Thu, Mar 19, 2015 at 04:36:38PM -0400, Robert Haas wrote:
> On Thu, Mar 19, 2015 at 10:23 AM, Bruce Momjian <[email protected]> wrote:
> > First attached patch is more surgical and clears a possible cancel
> > request before we report the query duration in the logs --- this doesn't
> > affect any after triggers that might include CHECK_FOR_INTERRUPTS()
> > calls we want to honor.
> >
> > Another approach would be to have CommitTransaction() clear any pending
> > cancel before it calls RESUME_INTERRUPTS(). The second attached patch
> > takes that approach, and also works.
>
> So, either way, what happens if the query cancel shows up just an
> instant after you clear the flag?
Oh, good point. This version handles that case addressing only the
log_duration* block.
--
Bruce Momjian <[email protected]> http://momjian.us
EnterpriseDB http://enterprisedb.com
+ Everyone has their own god. +
diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c
new file mode 100644
index 33720e8..4374fb4
*** a/src/backend/tcop/postgres.c
--- b/src/backend/tcop/postgres.c
*************** exec_simple_query(const char *query_stri
*** 1165,1184 ****
/*
* Emit duration logging if appropriate.
*/
- switch (check_log_duration(msec_str, was_logged))
{
! case 1:
! ereport(LOG,
! (errmsg("duration: %s ms", msec_str),
! errhidestmt(true)));
! break;
! case 2:
! ereport(LOG,
! (errmsg("duration: %s ms statement: %s",
! msec_str, query_string),
! errhidestmt(true),
! errdetail_execute(parsetree_list)));
! break;
}
if (save_log_statement_stats)
--- 1165,1193 ----
/*
* Emit duration logging if appropriate.
*/
{
! int output_duration_level = check_log_duration(msec_str, was_logged);
!
! if (output_duration_level != 0)
! {
! /* hold client cancel as we have already committed */
! HOLD_CANCEL_INTERRUPTS();
!
! if (output_duration_level == 1)
! ereport(LOG,
! (errmsg("duration: %s ms", msec_str),
! errhidestmt(true)));
! else if (output_duration_level == 2)
! ereport(LOG,
! (errmsg("duration: %s ms statement: %s",
! msec_str, query_string),
! errhidestmt(true),
! errdetail_execute(parsetree_list)));
!
! /* clear client cancel */
! QueryCancelPending = false;
! RESUME_CANCEL_INTERRUPTS();
! }
}
if (save_log_statement_stats)
--
Sent via pgsql-hackers mailing list ([email protected])
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers