timescaledb/test/expected/cluster.out
Sven Klemm 30dbda9fbb Unify chunk index creation
This patch changes chunk index creation to use the same functions
for creating index in one transaction and using multiple transactions.
The single transaction index creation used to adjust the original
stmt and adjusted it for the chunk which lead to problems with table
references not being adjusted properly for the chunk.
2020-05-20 14:39:54 +02:00

152 lines
7.7 KiB
Plaintext

-- This file and its contents are licensed under the Apache License 2.0.
-- Please see the included NOTICE for copyright information and
-- LICENSE-APACHE for a copy of the license.
CREATE TABLE cluster_test(time timestamptz, temp float, location int);
SELECT create_hypertable('cluster_test', 'time', chunk_time_interval => interval '1 day');
NOTICE: adding not-null constraint to column "time"
create_hypertable
---------------------------
(1,public,cluster_test,t)
(1 row)
-- Show default indexes
SELECT * FROM test.show_indexes('cluster_test');
Index | Columns | Expr | Unique | Primary | Exclusion | Tablespace
-----------------------+---------+------+--------+---------+-----------+------------
cluster_test_time_idx | {time} | | f | f | f |
(1 row)
-- Create two chunks
INSERT INTO cluster_test VALUES ('2017-01-20T09:00:01', 23.4, 1),
('2017-01-21T09:00:01', 21.3, 2);
-- Run cluster
CLUSTER VERBOSE cluster_test USING cluster_test_time_idx;
INFO: clustering "_timescaledb_internal._hyper_1_1_chunk" using index scan on "_hyper_1_1_chunk_cluster_test_time_idx"
INFO: "_hyper_1_1_chunk": found 0 removable, 1 nonremovable row versions in 1 pages
INFO: clustering "_timescaledb_internal._hyper_1_2_chunk" using index scan on "_hyper_1_2_chunk_cluster_test_time_idx"
INFO: "_hyper_1_2_chunk": found 0 removable, 1 nonremovable row versions in 1 pages
-- Create a third chunk
INSERT INTO cluster_test VALUES ('2017-01-22T09:00:01', 19.5, 3);
-- Show clustered indexes
SELECT indexrelid::regclass, indisclustered
FROM pg_index
WHERE indisclustered = true ORDER BY 1;
indexrelid | indisclustered
--------------------------------------------------------------+----------------
cluster_test_time_idx | t
_timescaledb_internal._hyper_1_1_chunk_cluster_test_time_idx | t
_timescaledb_internal._hyper_1_2_chunk_cluster_test_time_idx | t
(3 rows)
-- Reorder just our table
CLUSTER VERBOSE cluster_test;
INFO: clustering "_timescaledb_internal._hyper_1_1_chunk" using sequential scan and sort
INFO: "_hyper_1_1_chunk": found 0 removable, 1 nonremovable row versions in 1 pages
INFO: clustering "_timescaledb_internal._hyper_1_2_chunk" using sequential scan and sort
INFO: "_hyper_1_2_chunk": found 0 removable, 1 nonremovable row versions in 1 pages
INFO: clustering "_timescaledb_internal._hyper_1_3_chunk" using index scan on "_hyper_1_3_chunk_cluster_test_time_idx"
INFO: "_hyper_1_3_chunk": found 0 removable, 1 nonremovable row versions in 1 pages
-- Show clustered indexes, including new chunk
SELECT indexrelid::regclass, indisclustered
FROM pg_index
WHERE indisclustered = true ORDER BY 1;
indexrelid | indisclustered
--------------------------------------------------------------+----------------
cluster_test_time_idx | t
_timescaledb_internal._hyper_1_1_chunk_cluster_test_time_idx | t
_timescaledb_internal._hyper_1_2_chunk_cluster_test_time_idx | t
_timescaledb_internal._hyper_1_3_chunk_cluster_test_time_idx | t
(4 rows)
-- Reorder all tables (although will only be our test table)
CLUSTER VERBOSE;
INFO: clustering "_timescaledb_internal._hyper_1_3_chunk" using sequential scan and sort
INFO: "_hyper_1_3_chunk": found 0 removable, 1 nonremovable row versions in 1 pages
INFO: clustering "_timescaledb_internal._hyper_1_2_chunk" using sequential scan and sort
INFO: "_hyper_1_2_chunk": found 0 removable, 1 nonremovable row versions in 1 pages
INFO: clustering "_timescaledb_internal._hyper_1_1_chunk" using sequential scan and sort
INFO: "_hyper_1_1_chunk": found 0 removable, 1 nonremovable row versions in 1 pages
INFO: clustering "public.cluster_test" using sequential scan and sort
INFO: "cluster_test": found 0 removable, 0 nonremovable row versions in 0 pages
-- Change the clustered index
CREATE INDEX ON cluster_test (time, location);
CLUSTER VERBOSE cluster_test using cluster_test_time_location_idx;
INFO: clustering "_timescaledb_internal._hyper_1_1_chunk" using sequential scan and sort
INFO: "_hyper_1_1_chunk": found 0 removable, 1 nonremovable row versions in 1 pages
INFO: clustering "_timescaledb_internal._hyper_1_2_chunk" using sequential scan and sort
INFO: "_hyper_1_2_chunk": found 0 removable, 1 nonremovable row versions in 1 pages
INFO: clustering "_timescaledb_internal._hyper_1_3_chunk" using sequential scan and sort
INFO: "_hyper_1_3_chunk": found 0 removable, 1 nonremovable row versions in 1 pages
-- Show updated clustered indexes
SELECT indexrelid::regclass, indisclustered
FROM pg_index
WHERE indisclustered = true ORDER BY 1;
indexrelid | indisclustered
-----------------------------------------------------------------------+----------------
cluster_test_time_location_idx | t
_timescaledb_internal._hyper_1_1_chunk_cluster_test_time_location_idx | t
_timescaledb_internal._hyper_1_2_chunk_cluster_test_time_location_idx | t
_timescaledb_internal._hyper_1_3_chunk_cluster_test_time_location_idx | t
(4 rows)
--check the setting of cluster indexes on hypertables and chunks
ALTER TABLE cluster_test CLUSTER ON cluster_test_time_idx;
SELECT indexrelid::regclass, indisclustered
FROM pg_index
WHERE indisclustered = true
ORDER BY 1,2;
indexrelid | indisclustered
--------------------------------------------------------------+----------------
cluster_test_time_idx | t
_timescaledb_internal._hyper_1_1_chunk_cluster_test_time_idx | t
_timescaledb_internal._hyper_1_2_chunk_cluster_test_time_idx | t
_timescaledb_internal._hyper_1_3_chunk_cluster_test_time_idx | t
(4 rows)
CLUSTER VERBOSE cluster_test;
INFO: clustering "_timescaledb_internal._hyper_1_1_chunk" using sequential scan and sort
INFO: "_hyper_1_1_chunk": found 0 removable, 1 nonremovable row versions in 1 pages
INFO: clustering "_timescaledb_internal._hyper_1_2_chunk" using sequential scan and sort
INFO: "_hyper_1_2_chunk": found 0 removable, 1 nonremovable row versions in 1 pages
INFO: clustering "_timescaledb_internal._hyper_1_3_chunk" using sequential scan and sort
INFO: "_hyper_1_3_chunk": found 0 removable, 1 nonremovable row versions in 1 pages
ALTER TABLE cluster_test SET WITHOUT CLUSTER;
SELECT indexrelid::regclass, indisclustered
FROM pg_index
WHERE indisclustered = true
ORDER BY 1,2;
indexrelid | indisclustered
------------+----------------
(0 rows)
\set ON_ERROR_STOP 0
CLUSTER VERBOSE cluster_test;
ERROR: there is no previously clustered index for table "cluster_test"
\set ON_ERROR_STOP 1
ALTER TABLE _timescaledb_internal._hyper_1_1_chunk CLUSTER ON _hyper_1_1_chunk_cluster_test_time_idx;
SELECT indexrelid::regclass, indisclustered
FROM pg_index
WHERE indisclustered = true
ORDER BY 1,2;
indexrelid | indisclustered
--------------------------------------------------------------+----------------
_timescaledb_internal._hyper_1_1_chunk_cluster_test_time_idx | t
(1 row)
CLUSTER VERBOSE _timescaledb_internal._hyper_1_1_chunk;
INFO: clustering "_timescaledb_internal._hyper_1_1_chunk" using sequential scan and sort
INFO: "_hyper_1_1_chunk": found 0 removable, 1 nonremovable row versions in 1 pages
ALTER TABLE _timescaledb_internal._hyper_1_1_chunk SET WITHOUT CLUSTER;
SELECT indexrelid::regclass, indisclustered
FROM pg_index
WHERE indisclustered = true
ORDER BY 1,2;
indexrelid | indisclustered
------------+----------------
(0 rows)
\set ON_ERROR_STOP 0
CLUSTER VERBOSE _timescaledb_internal._hyper_1_1_chunk;
ERROR: there is no previously clustered index for table "_hyper_1_1_chunk"
\set ON_ERROR_STOP 1