mirror of
https://github.com/timescale/timescaledb.git
synced 2025-06-02 11:16:47 +08:00
To increase schema security we do not want to mix our own internal objects with user objects. Since chunks are created in the _timescaledb_internal schema our internal functions should live in a different dedicated schema. This patch make the necessary adjustments for the following functions: - to_unix_microseconds(timestamptz) - to_timestamp(bigint) - to_timestamp_without_timezone(bigint) - to_date(bigint) - to_interval(bigint) - interval_to_usec(interval) - time_to_internal(anyelement) - subtract_integer_from_now(regclass, bigint)
201 lines
12 KiB
Plaintext
201 lines
12 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.
|
|
\o /dev/null
|
|
\ir include/insert_single.sql
|
|
-- 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 PUBLIC."one_Partition" (
|
|
"timeCustom" BIGINT NOT NULL,
|
|
device_id TEXT NOT NULL,
|
|
series_0 DOUBLE PRECISION NULL,
|
|
series_1 DOUBLE PRECISION NULL,
|
|
series_2 DOUBLE PRECISION NULL,
|
|
series_bool BOOLEAN NULL
|
|
);
|
|
CREATE INDEX ON PUBLIC."one_Partition" (device_id, "timeCustom" DESC NULLS LAST) WHERE device_id IS NOT NULL;
|
|
CREATE INDEX ON PUBLIC."one_Partition" ("timeCustom" DESC NULLS LAST, series_0) WHERE series_0 IS NOT NULL;
|
|
CREATE INDEX ON PUBLIC."one_Partition" ("timeCustom" DESC NULLS LAST, series_1) WHERE series_1 IS NOT NULL;
|
|
CREATE INDEX ON PUBLIC."one_Partition" ("timeCustom" DESC NULLS LAST, series_2) WHERE series_2 IS NOT NULL;
|
|
CREATE INDEX ON PUBLIC."one_Partition" ("timeCustom" DESC NULLS LAST, series_bool) WHERE series_bool IS NOT NULL;
|
|
\c :DBNAME :ROLE_SUPERUSER
|
|
CREATE SCHEMA "one_Partition" AUTHORIZATION :ROLE_DEFAULT_PERM_USER;
|
|
\c :DBNAME :ROLE_DEFAULT_PERM_USER;
|
|
SELECT * FROM create_hypertable('"public"."one_Partition"', 'timeCustom', associated_schema_name=>'one_Partition', chunk_time_interval=>_timescaledb_functions.interval_to_usec('1 month'));
|
|
--output command tags
|
|
\set QUIET off
|
|
BEGIN;
|
|
\COPY "one_Partition" FROM 'data/ds1_dev1_1.tsv' NULL AS '';
|
|
COMMIT;
|
|
INSERT INTO "one_Partition"("timeCustom", device_id, series_0, series_1) VALUES
|
|
(1257987600000000000, 'dev1', 1.5, 1),
|
|
(1257987600000000000, 'dev1', 1.5, 2),
|
|
(1257894000000000000, 'dev2', 1.5, 1),
|
|
(1257894002000000000, 'dev1', 2.5, 3);
|
|
INSERT INTO "one_Partition"("timeCustom", device_id, series_0, series_1) VALUES
|
|
(1257894000000000000, 'dev2', 1.5, 2);
|
|
\set QUIET on
|
|
\o
|
|
-- Make sure UPDATE isn't optimized if it includes Append plans
|
|
-- Need to turn of nestloop to make append appear the same on PG96 and PG10
|
|
set enable_nestloop = 'off';
|
|
CREATE OR REPLACE FUNCTION series_val()
|
|
RETURNS integer LANGUAGE PLPGSQL STABLE AS
|
|
$BODY$
|
|
BEGIN
|
|
RETURN 5;
|
|
END;
|
|
$BODY$;
|
|
-- ConstraintAwareAppend applied for SELECT
|
|
EXPLAIN (costs off)
|
|
SELECT FROM "one_Partition"
|
|
WHERE series_1 IN (SELECT series_1 FROM "one_Partition" WHERE series_1 > series_val());
|
|
QUERY PLAN
|
|
-----------------------------------------------------------------------------------------------------------------------------------------------
|
|
Hash Join
|
|
Hash Cond: ("one_Partition".series_1 = "one_Partition_1".series_1)
|
|
-> Custom Scan (ChunkAppend) on "one_Partition"
|
|
Chunks excluded during startup: 0
|
|
-> Index Only Scan using "_hyper_1_1_chunk_one_Partition_timeCustom_series_1_idx" on _hyper_1_1_chunk
|
|
Index Cond: (series_1 > (series_val())::double precision)
|
|
-> Index Only Scan using "_hyper_1_2_chunk_one_Partition_timeCustom_series_1_idx" on _hyper_1_2_chunk
|
|
Index Cond: (series_1 > (series_val())::double precision)
|
|
-> Index Only Scan using "_hyper_1_3_chunk_one_Partition_timeCustom_series_1_idx" on _hyper_1_3_chunk
|
|
Index Cond: (series_1 > (series_val())::double precision)
|
|
-> Hash
|
|
-> HashAggregate
|
|
Group Key: "one_Partition_1".series_1
|
|
-> Custom Scan (ChunkAppend) on "one_Partition" "one_Partition_1"
|
|
Chunks excluded during startup: 0
|
|
-> Index Only Scan using "_hyper_1_1_chunk_one_Partition_timeCustom_series_1_idx" on _hyper_1_1_chunk _hyper_1_1_chunk_1
|
|
Index Cond: (series_1 > (series_val())::double precision)
|
|
-> Index Only Scan using "_hyper_1_2_chunk_one_Partition_timeCustom_series_1_idx" on _hyper_1_2_chunk _hyper_1_2_chunk_1
|
|
Index Cond: (series_1 > (series_val())::double precision)
|
|
-> Index Only Scan using "_hyper_1_3_chunk_one_Partition_timeCustom_series_1_idx" on _hyper_1_3_chunk _hyper_1_3_chunk_1
|
|
Index Cond: (series_1 > (series_val())::double precision)
|
|
(21 rows)
|
|
|
|
-- ConstraintAwareAppend NOT applied for UPDATE
|
|
EXPLAIN (costs off)
|
|
UPDATE "one_Partition"
|
|
SET series_1 = 8
|
|
WHERE series_1 IN (SELECT series_1 FROM "one_Partition" WHERE series_1 > series_val());
|
|
QUERY PLAN
|
|
-----------------------------------------------------------------------------------------------------------------------------------------------
|
|
Update on "one_Partition" "one_Partition_1"
|
|
Update on "one_Partition" "one_Partition_1"
|
|
Update on _hyper_1_1_chunk "one_Partition_2"
|
|
Update on _hyper_1_2_chunk "one_Partition_3"
|
|
Update on _hyper_1_3_chunk "one_Partition_4"
|
|
-> Hash Join
|
|
Hash Cond: ("one_Partition".series_1 = "one_Partition_1".series_1)
|
|
-> HashAggregate
|
|
Group Key: "one_Partition".series_1
|
|
-> Append
|
|
-> Index Scan using "_hyper_1_1_chunk_one_Partition_timeCustom_series_1_idx" on _hyper_1_1_chunk "one_Partition_5"
|
|
Index Cond: (series_1 > (series_val())::double precision)
|
|
-> Index Scan using "_hyper_1_2_chunk_one_Partition_timeCustom_series_1_idx" on _hyper_1_2_chunk "one_Partition_6"
|
|
Index Cond: (series_1 > (series_val())::double precision)
|
|
-> Index Scan using "_hyper_1_3_chunk_one_Partition_timeCustom_series_1_idx" on _hyper_1_3_chunk "one_Partition_7"
|
|
Index Cond: (series_1 > (series_val())::double precision)
|
|
-> Hash
|
|
-> Seq Scan on "one_Partition" "one_Partition_1"
|
|
-> Hash Join
|
|
Hash Cond: ("one_Partition_2".series_1 = "one_Partition".series_1)
|
|
-> Seq Scan on _hyper_1_1_chunk "one_Partition_2"
|
|
-> Hash
|
|
-> HashAggregate
|
|
Group Key: "one_Partition".series_1
|
|
-> Append
|
|
-> Index Scan using "_hyper_1_1_chunk_one_Partition_timeCustom_series_1_idx" on _hyper_1_1_chunk "one_Partition_5"
|
|
Index Cond: (series_1 > (series_val())::double precision)
|
|
-> Index Scan using "_hyper_1_2_chunk_one_Partition_timeCustom_series_1_idx" on _hyper_1_2_chunk "one_Partition_6"
|
|
Index Cond: (series_1 > (series_val())::double precision)
|
|
-> Index Scan using "_hyper_1_3_chunk_one_Partition_timeCustom_series_1_idx" on _hyper_1_3_chunk "one_Partition_7"
|
|
Index Cond: (series_1 > (series_val())::double precision)
|
|
-> Hash Join
|
|
Hash Cond: ("one_Partition_3".series_1 = "one_Partition".series_1)
|
|
-> Seq Scan on _hyper_1_2_chunk "one_Partition_3"
|
|
-> Hash
|
|
-> HashAggregate
|
|
Group Key: "one_Partition".series_1
|
|
-> Append
|
|
-> Index Scan using "_hyper_1_1_chunk_one_Partition_timeCustom_series_1_idx" on _hyper_1_1_chunk "one_Partition_5"
|
|
Index Cond: (series_1 > (series_val())::double precision)
|
|
-> Index Scan using "_hyper_1_2_chunk_one_Partition_timeCustom_series_1_idx" on _hyper_1_2_chunk "one_Partition_6"
|
|
Index Cond: (series_1 > (series_val())::double precision)
|
|
-> Index Scan using "_hyper_1_3_chunk_one_Partition_timeCustom_series_1_idx" on _hyper_1_3_chunk "one_Partition_7"
|
|
Index Cond: (series_1 > (series_val())::double precision)
|
|
-> Hash Join
|
|
Hash Cond: ("one_Partition_4".series_1 = "one_Partition".series_1)
|
|
-> Seq Scan on _hyper_1_3_chunk "one_Partition_4"
|
|
-> Hash
|
|
-> HashAggregate
|
|
Group Key: "one_Partition".series_1
|
|
-> Append
|
|
-> Index Scan using "_hyper_1_1_chunk_one_Partition_timeCustom_series_1_idx" on _hyper_1_1_chunk "one_Partition_5"
|
|
Index Cond: (series_1 > (series_val())::double precision)
|
|
-> Index Scan using "_hyper_1_2_chunk_one_Partition_timeCustom_series_1_idx" on _hyper_1_2_chunk "one_Partition_6"
|
|
Index Cond: (series_1 > (series_val())::double precision)
|
|
-> Index Scan using "_hyper_1_3_chunk_one_Partition_timeCustom_series_1_idx" on _hyper_1_3_chunk "one_Partition_7"
|
|
Index Cond: (series_1 > (series_val())::double precision)
|
|
(57 rows)
|
|
|
|
SELECT * FROM "one_Partition" ORDER BY "timeCustom", device_id, series_0, series_1, series_2;
|
|
timeCustom | device_id | series_0 | series_1 | series_2 | series_bool
|
|
---------------------+-----------+----------+----------+----------+-------------
|
|
1257894000000000000 | dev1 | 1.5 | 1 | 2 | t
|
|
1257894000000000000 | dev1 | 1.5 | 2 | |
|
|
1257894000000000000 | dev2 | 1.5 | 1 | |
|
|
1257894000000000000 | dev2 | 1.5 | 2 | |
|
|
1257894000000001000 | dev1 | 2.5 | 3 | |
|
|
1257894001000000000 | dev1 | 3.5 | 4 | |
|
|
1257894002000000000 | dev1 | 2.5 | 3 | |
|
|
1257894002000000000 | dev1 | 5.5 | 6 | | t
|
|
1257894002000000000 | dev1 | 5.5 | 7 | | f
|
|
1257897600000000000 | dev1 | 4.5 | 5 | | f
|
|
1257987600000000000 | dev1 | 1.5 | 1 | |
|
|
1257987600000000000 | dev1 | 1.5 | 2 | |
|
|
(12 rows)
|
|
|
|
UPDATE "one_Partition"
|
|
SET series_1 = 8
|
|
WHERE series_1 IN (SELECT series_1 FROM "one_Partition" WHERE series_1 > series_val());
|
|
SELECT * FROM "one_Partition" ORDER BY "timeCustom", device_id, series_0, series_1, series_2;
|
|
timeCustom | device_id | series_0 | series_1 | series_2 | series_bool
|
|
---------------------+-----------+----------+----------+----------+-------------
|
|
1257894000000000000 | dev1 | 1.5 | 1 | 2 | t
|
|
1257894000000000000 | dev1 | 1.5 | 2 | |
|
|
1257894000000000000 | dev2 | 1.5 | 1 | |
|
|
1257894000000000000 | dev2 | 1.5 | 2 | |
|
|
1257894000000001000 | dev1 | 2.5 | 3 | |
|
|
1257894001000000000 | dev1 | 3.5 | 4 | |
|
|
1257894002000000000 | dev1 | 2.5 | 3 | |
|
|
1257894002000000000 | dev1 | 5.5 | 8 | | f
|
|
1257894002000000000 | dev1 | 5.5 | 8 | | t
|
|
1257897600000000000 | dev1 | 4.5 | 5 | | f
|
|
1257987600000000000 | dev1 | 1.5 | 1 | |
|
|
1257987600000000000 | dev1 | 1.5 | 2 | |
|
|
(12 rows)
|
|
|
|
UPDATE "one_Partition" SET series_1 = 47;
|
|
UPDATE "one_Partition" SET series_bool = true;
|
|
SELECT * FROM "one_Partition" ORDER BY "timeCustom", device_id, series_0, series_1, series_2;
|
|
timeCustom | device_id | series_0 | series_1 | series_2 | series_bool
|
|
---------------------+-----------+----------+----------+----------+-------------
|
|
1257894000000000000 | dev1 | 1.5 | 47 | 2 | t
|
|
1257894000000000000 | dev1 | 1.5 | 47 | | t
|
|
1257894000000000000 | dev2 | 1.5 | 47 | | t
|
|
1257894000000000000 | dev2 | 1.5 | 47 | | t
|
|
1257894000000001000 | dev1 | 2.5 | 47 | | t
|
|
1257894001000000000 | dev1 | 3.5 | 47 | | t
|
|
1257894002000000000 | dev1 | 2.5 | 47 | | t
|
|
1257894002000000000 | dev1 | 5.5 | 47 | | t
|
|
1257894002000000000 | dev1 | 5.5 | 47 | | t
|
|
1257897600000000000 | dev1 | 4.5 | 47 | | t
|
|
1257987600000000000 | dev1 | 1.5 | 47 | | t
|
|
1257987600000000000 | dev1 | 1.5 | 47 | | t
|
|
(12 rows)
|
|
|