PostgreSQL Bugs

Collected from the PG bugs email list.

Bug ID16251
PG Version12.1
OSWindows 10
Opened2020-02-08 06:43:22+00
Reported byDima Pavlov
StatusNew

Body of first available message related to this bug follows.

The following bug has been logged on the website:

Bug reference:      16251
Logged by:          Dima Pavlov
Email address:      (redacted)
PostgreSQL version: 12.1
Operating system:   Windows 10
Description:        

Test table and indexes (PostgreSQL 12.1):

CREATE TABLE t (dt timestamp with time zone);
CREATE INDEX ind ON t USING btree (dt);

INSERT
INTO t(dt)
    SELECT
    (
        timestamp '2020-01-01 00:00:00' +
        random() * (
            timestamp '2020-02-29 00:00:00' -
            timestamp '2020-01-01 00:00:00'
        )
    )
    FROM generate_series(1, 10000)

-------------------------------------

In the first query, everything is ok, appropriate index "ind" is used:

explain (analyze, buffers)
SELECT *
FROM t
WHERE
   ('2020-02-08')::date IS NULL
   OR
   dt > '2020-02-08'
ORDER BY dt
LIMIT 1

"Limit  (cost=0.29..0.37 rows=1 width=8) (actual time=0.186..0.188 rows=1
loops=1)"
"  Buffers: shared hit=3"
"  ->  Index Only Scan using ind on t  (cost=0.29..303.75 rows=3627 width=8)
(actual time=0.184..0.184 rows=1 loops=1)"
"        Index Cond: (dt > '2020-02-08 00:00:00+05'::timestamp with time
zone)"
"        Heap Fetches: 1"
"        Buffers: shared hit=3"
"Planning Time: 2.365 ms"
"Execution Time: 0.239 ms"

-----------------------------------------------

With '::text' type casting of '2020-02-08' (which is already text) query
permofance is very low

explain (analyze, buffers)
SELECT *
FROM t
WHERE
   ('2020-02-08'::text)::date IS NULL
   OR
   dt > '2020-02-08'
ORDER BY dt
LIMIT 1

"Limit  (cost=0.29..0.44 rows=1 width=8) (actual time=45.306..45.307 rows=1
loops=1)"
"  Buffers: shared hit=6232"
"  ->  Index Only Scan using ind on t  (cost=0.29..561.28 rows=3658 width=8)
(actual time=45.304..45.304 rows=1 loops=1)"
"        Filter: ((('2020-02-08'::cstring)::date IS NULL) OR (dt >
'2020-02-08 00:00:00+05'::timestamp with time zone))"
"        Rows Removed by Filter: 6367"
"        Heap Fetches: 6368"
"        Buffers: shared hit=6232"
"Planning Time: 0.348 ms"
"Execution Time: 45.343 ms"

Messages

DateAuthorSubject
2020-02-08 06:43:22+00PG Bug reporting formBUG #16251: ::text type casting of a constant breaks query performance
2020-02-08 07:09:11+00Pavel StehuleRe: BUG #16251: ::text type casting of a constant breaks query performance
2020-02-08 07:28:07+00Pavel StehuleRe: BUG #16251: ::text type casting of a constant breaks query performance
2020-02-08 16:49:13+00Tom LaneRe: BUG #16251: ::text type casting of a constant breaks query performance
2020-02-08 17:03:55+00Pavel StehuleRe: BUG #16251: ::text type casting of a constant breaks query performance
2020-02-08 18:43:36+00Jeff JanesRe: BUG #16251: ::text type casting of a constant breaks query performance