On 8/16/19 2:02 PM, Will Storey wrote:
Hi!
I have a query that fails due to this error and I'm trying to understand
why.
My understanding is I should only see this error if I cancel a query
manually, such as with kill -INT or with pg_cancel_backend(). However I
can't find anything doing that.
The query looks like this:
SELECT *
FROM (
SELECT
c1, c2, [...],
EXTRACT(EPOCH FROM time) AS epoch,
to_rfc3339_us(time) AS time_rfc3339
FROM t1
WHERE
NOT EXISTS (SELECT 1 FROM t2 WHERE c2 = ?) AND
c2 = ? AND
time < ? AND
time > ?::timestamptz - ? * interval '1 day'
LIMIT ?
) AS s
ORDER BY epoch DESC
t1 is partitioned on time, by month.
I run it using Perl's DBI with DBD::Pg. I wrap it in a transaction where I
first run:
SET LOCAL statement_timeout TO 1000
I know this query can time out, and it does, resulting in the error I
expect: "canceling statement due to statement timeout". The problem is
occasionally I see this other error: "canceling statement due to user
request".
Looking at the query logs, when the query fails with the user request
error, the query reached the statement timeout (at least in cases I
checked). In one instance the duration shows as 1283ms for example.
Could there be any situation where a query getting cancelled due to a
statement timeout be reported as cancelled due to user request? Or do you
have any ideas about what might be going on?
Here is the relevant source:
https://doxygen.postgresql.org/postgres_8c.html#ab7af3ee6ad40efb8454c6f2f790d9588
Start at around line 3078.
This is on PostgreSQL 9.6.14 on Ubuntu Xenial.
Thank you!
--
Adrian Klaver
adrian.kla...@aklaver.com