diff options
-rw-r--r-- | doc/src/sgml/config.sgml | 23 | ||||
-rw-r--r-- | src/backend/tcop/postgres.c | 12 |
2 files changed, 29 insertions, 6 deletions
diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml index 886632ff439..c1da75fbab4 100644 --- a/doc/src/sgml/config.sgml +++ b/doc/src/sgml/config.sgml @@ -7592,11 +7592,24 @@ COPY postgres_log FROM '/full/path/to/logfile.csv' WITH csv; </term> <listitem> <para> - Abort any statement that takes more than the specified duration - (defaults to milliseconds), starting from the time the command arrives at the server - from the client. If <varname>log_min_error_statement</varname> is set to - <literal>ERROR</literal> or lower, the statement that timed out will also be - logged. A value of zero (the default) turns this off. + Abort any statement that takes more than the specified duration. + If <varname>log_min_error_statement</varname> is set + to <literal>ERROR</literal> or lower, the statement that timed out + will also be logged. + If the value is specified without units, it is taken as milliseconds. + A value of zero (the default) disables the timeout. + </para> + + <para> + The timeout is measured from the time a command arrives at the + server until it is completed by the server. If multiple SQL + statements appear in a single simple-Query message, the timeout + is applied to each statement separately. + (<productname>PostgreSQL</productname> versions before 13 usually + treated the timeout as applying to the whole query string.) + In extended query protocol, the timeout starts running when any + query-related message (Parse, Bind, Execute, Describe) arrives, and + it is cancelled by completion of an Execute or Sync message. </para> <para> diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c index e8d8e6f8285..1ecaba0d574 100644 --- a/src/backend/tcop/postgres.c +++ b/src/backend/tcop/postgres.c @@ -1270,6 +1270,13 @@ exec_simple_query(const char *query_string) * those that start or end a transaction block. */ CommandCounterIncrement(); + + /* + * Disable statement timeout between queries of a multi-query + * string, so that the timeout applies separately to each query. + * (Our next loop iteration will start a fresh timeout.) + */ + disable_statement_timeout(); } /* @@ -2135,7 +2142,10 @@ exec_execute_message(const char *portal_name, long max_rows) */ CommandCounterIncrement(); - /* full command has been executed, reset timeout */ + /* + * Disable statement timeout whenever we complete an Execute + * message. The next protocol message will start a fresh timeout. + */ disable_statement_timeout(); } |