timescaledb/tsl/test/shared/sql/include/ordered_append.sql
Sven Klemm a218532941 Fix cross-platform explain output differences
Enforce index scan for queries that would produce different output
between 32bit and 64bit platform to make explain output for
constraint_exclusion_prepared, ordered_append and ordered_append_join
test output consistent across platforms.
2020-09-10 19:26:40 +02:00

298 lines
4.9 KiB
SQL

-- This file and its contents are licensed under the Timescale License.
-- Please see the included NOTICE for copyright information and
-- LICENSE-TIMESCALE for a copy of the license.
-- test ASC for ordered chunks
:PREFIX
SELECT time
FROM :TEST_TABLE
ORDER BY time ASC
LIMIT 1;
-- test DESC for ordered chunks
:PREFIX
SELECT time
FROM :TEST_TABLE
ORDER BY time DESC
LIMIT 1;
-- test query with ORDER BY column not in targetlist
:PREFIX
SELECT pg_typeof(device_id),
pg_typeof(v2)
FROM :TEST_TABLE
ORDER BY time ASC
LIMIT 1;
-- ORDER BY may include other columns after time column
:PREFIX
SELECT time,
device_id,
v0
FROM :TEST_TABLE
WHERE device_id = 1
ORDER BY time DESC,
device_id
LIMIT 1;
-- test RECORD in targetlist
:PREFIX
SELECT (time,
device_id,
v0)
FROM :TEST_TABLE
WHERE device_id = 1
ORDER BY time DESC,
device_id
LIMIT 1;
-- test sort column not in targetlist
:PREFIX
SELECT time_bucket('1h', time)
FROM :TEST_TABLE
ORDER BY time DESC
LIMIT 1;
-- queries with ORDER BY non-time column shouldn't use ordered append
:PREFIX
SELECT device_id
FROM :TEST_TABLE
ORDER BY device_id
LIMIT 1;
-- time column must be primary sort order
:PREFIX
SELECT time,
device_id
FROM :TEST_TABLE
WHERE device_id IN (1, 2)
ORDER BY device_id,
time
LIMIT 1;
-- test equality constraint on ORDER BY prefix
-- currently not optimized
SET enable_seqscan TO false;
:PREFIX
SELECT time,
device_id
FROM :TEST_TABLE
WHERE device_id = 1
ORDER BY device_id,
time
LIMIT 10;
RESET enable_seqscan;
-- queries without LIMIT should use ordered append
:PREFIX
SELECT time
FROM :TEST_TABLE
WHERE device_id IN (1, 2)
ORDER BY time ASC;
-- queries without ORDER BY shouldnt use ordered append
:PREFIX
SELECT pg_typeof(time)
FROM :TEST_TABLE
LIMIT 1;
-- test interaction with constraint exclusion
:PREFIX
SELECT time
FROM :TEST_TABLE
WHERE time > '2000-01-07'
ORDER BY time ASC
LIMIT 1;
:PREFIX
SELECT time
FROM :TEST_TABLE
WHERE time > '2000-01-07'
ORDER BY time DESC
LIMIT 1;
-- test interaction with runtime exclusion
:PREFIX
SELECT time
FROM :TEST_TABLE
WHERE time > '2000-01-08'::text::timestamptz
ORDER BY time ASC
LIMIT 1;
:PREFIX
SELECT time
FROM :TEST_TABLE
WHERE time < '2000-01-08'::text::timestamptz
ORDER BY time ASC
LIMIT 1;
-- test constraint exclusion
:PREFIX
SELECT time
FROM :TEST_TABLE
WHERE time > '2000-01-08'::text::timestamptz
AND time < '2000-01-10'
ORDER BY time ASC
LIMIT 1;
:PREFIX
SELECT time
FROM :TEST_TABLE
WHERE time < '2000-01-08'::text::timestamptz
AND time > '2000-01-07'
ORDER BY time ASC
LIMIT 1;
-- min/max queries
:PREFIX
SELECT max(time)
FROM :TEST_TABLE;
:PREFIX
SELECT min(time)
FROM :TEST_TABLE;
-- test first/last (doesn't use ordered append yet)
:PREFIX
SELECT first(time, time)
FROM :TEST_TABLE;
:PREFIX
SELECT last(time, time)
FROM :TEST_TABLE;
-- test query with time_bucket
:PREFIX
SELECT time_bucket('1d', time)
FROM :TEST_TABLE
ORDER BY time ASC
LIMIT 1;
-- test query with ORDER BY time_bucket
:PREFIX
SELECT time_bucket('1d', time)
FROM :TEST_TABLE
ORDER BY 1
LIMIT 1;
-- test query with ORDER BY time_bucket, device_id
-- must not use ordered append
:PREFIX
SELECT time_bucket('1d', time),
device_id,
v0
FROM :TEST_TABLE
WHERE device_id IN (1, 2)
ORDER BY time_bucket('1d', time),
device_id
LIMIT 1;
-- test query with ORDER BY date_trunc
:PREFIX
SELECT time_bucket('1d', time)
FROM :TEST_TABLE
ORDER BY date_trunc('day', time)
LIMIT 1;
-- test query with ORDER BY date_trunc
:PREFIX
SELECT date_trunc('day', time)
FROM :TEST_TABLE
ORDER BY 1
LIMIT 1;
-- test query with ORDER BY date_trunc, device_id
-- must not use ordered append
:PREFIX
SELECT date_trunc('day', time),
device_id,
v0
FROM :TEST_TABLE
WHERE device_id IN (1, 2)
ORDER BY 1,
2
LIMIT 1;
-- test query with now() should result in ordered ChunkAppend
:PREFIX
SELECT time
FROM :TEST_TABLE
WHERE time < now() + '1 month'
ORDER BY time DESC
LIMIT 1;
-- test CTE
:PREFIX WITH i AS (
SELECT time
FROM :TEST_TABLE
WHERE time < now()
ORDER BY time DESC
LIMIT 100
)
SELECT *
FROM i;
-- test CTE
-- no chunk exclusion for CTE because cte query is not pulled up
:PREFIX WITH cte AS (
SELECT time
FROM :TEST_TABLE
WHERE device_id = 1
ORDER BY time
)
SELECT *
FROM cte
WHERE time < '2000-02-01'::timestamptz;
-- test subquery
-- not ChunkAppend so no chunk exclusion
:PREFIX
SELECT time
FROM :TEST_TABLE
WHERE time = (
SELECT max(time)
FROM :TEST_TABLE)
ORDER BY time;
-- test ordered append with limit expression
:PREFIX
SELECT time
FROM :TEST_TABLE
ORDER BY time
LIMIT (
SELECT length('four'));
-- test with ordered guc disabled
SET timescaledb.enable_ordered_append TO OFF;
:PREFIX
SELECT time
FROM :TEST_TABLE
ORDER BY time
LIMIT 3;
RESET timescaledb.enable_ordered_append;
:PREFIX
SELECT time
FROM :TEST_TABLE
ORDER BY time
LIMIT 3;
-- test with chunk append disabled
SET timescaledb.enable_chunk_append TO OFF;
:PREFIX
SELECT time
FROM :TEST_TABLE
ORDER BY time
LIMIT 3;
RESET timescaledb.enable_chunk_append;
:PREFIX
SELECT time
FROM :TEST_TABLE
ORDER BY time
LIMIT 3;