mirror of
https://github.com/timescale/timescaledb.git
synced 2025-05-16 02:23:49 +08:00
- Updated show_chunks, drop_chunks APIs to get the affected chunks using chunk creation time metadata based on the "date/time/interval" like boundary specified for the INTEGER columns. - We honor "integer_now" function if it's specified so as to keep backwards compatibility with the existing behavior Co-authored-by: Dipesh Pandit <dipesh@timescale.com>
286 lines
14 KiB
SQL
286 lines
14 KiB
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.
|
|
|
|
-- This file defines DDL functions for adding and manipulating hypertables.
|
|
|
|
-- Converts a regular postgres table to a hypertable.
|
|
--
|
|
-- relation - The OID of the table to be converted
|
|
-- time_column_name - Name of the column that contains time for a given record
|
|
-- partitioning_column - Name of the column to partition data by
|
|
-- number_partitions - (Optional) Number of partitions for data
|
|
-- associated_schema_name - (Optional) Schema for internal hypertable tables
|
|
-- associated_table_prefix - (Optional) Prefix for internal hypertable table names
|
|
-- chunk_time_interval - (Optional) Initial time interval for a chunk
|
|
-- create_default_indexes - (Optional) Whether or not to create the default indexes
|
|
-- if_not_exists - (Optional) Do not fail if table is already a hypertable
|
|
-- partitioning_func - (Optional) The partitioning function to use for spatial partitioning
|
|
-- migrate_data - (Optional) Set to true to migrate any existing data in the table to chunks
|
|
-- chunk_target_size - (Optional) The target size for chunks (e.g., '1000MB', 'estimate', or 'off')
|
|
-- chunk_sizing_func - (Optional) A function to calculate the chunk time interval for new chunks
|
|
-- time_partitioning_func - (Optional) The partitioning function to use for "time" partitioning
|
|
-- replication_factor - (Optional) Set replication_factor to use with the new hypertable
|
|
-- data_nodes - (Optional) The specific data nodes to distribute this hypertable across
|
|
-- distributed - (Optional) Create distributed hypertable
|
|
CREATE OR REPLACE FUNCTION @extschema@.create_hypertable(
|
|
relation REGCLASS,
|
|
time_column_name NAME,
|
|
partitioning_column NAME = NULL,
|
|
number_partitions INTEGER = NULL,
|
|
associated_schema_name NAME = NULL,
|
|
associated_table_prefix NAME = NULL,
|
|
chunk_time_interval ANYELEMENT = NULL::bigint,
|
|
create_default_indexes BOOLEAN = TRUE,
|
|
if_not_exists BOOLEAN = FALSE,
|
|
partitioning_func REGPROC = NULL,
|
|
migrate_data BOOLEAN = FALSE,
|
|
chunk_target_size TEXT = NULL,
|
|
chunk_sizing_func REGPROC = '_timescaledb_functions.calculate_chunk_interval'::regproc,
|
|
time_partitioning_func REGPROC = NULL,
|
|
replication_factor INTEGER = NULL,
|
|
data_nodes NAME[] = NULL,
|
|
distributed BOOLEAN = NULL
|
|
) RETURNS TABLE(hypertable_id INT, schema_name NAME, table_name NAME, created BOOL) AS '@MODULE_PATHNAME@', 'ts_hypertable_create' LANGUAGE C VOLATILE;
|
|
|
|
CREATE OR REPLACE FUNCTION @extschema@.create_distributed_hypertable(
|
|
relation REGCLASS,
|
|
time_column_name NAME,
|
|
partitioning_column NAME = NULL,
|
|
number_partitions INTEGER = NULL,
|
|
associated_schema_name NAME = NULL,
|
|
associated_table_prefix NAME = NULL,
|
|
chunk_time_interval ANYELEMENT = NULL::bigint,
|
|
create_default_indexes BOOLEAN = TRUE,
|
|
if_not_exists BOOLEAN = FALSE,
|
|
partitioning_func REGPROC = NULL,
|
|
migrate_data BOOLEAN = FALSE,
|
|
chunk_target_size TEXT = NULL,
|
|
chunk_sizing_func REGPROC = '_timescaledb_functions.calculate_chunk_interval'::regproc,
|
|
time_partitioning_func REGPROC = NULL,
|
|
replication_factor INTEGER = NULL,
|
|
data_nodes NAME[] = NULL
|
|
) RETURNS TABLE(hypertable_id INT, schema_name NAME, table_name NAME, created BOOL) AS '@MODULE_PATHNAME@', 'ts_hypertable_distributed_create' LANGUAGE C VOLATILE;
|
|
|
|
-- A generalized hypertable creation API that can be used to convert a PostgreSQL table
|
|
-- with TIME/SERIAL/BIGSERIAL columns to a hypertable.
|
|
--
|
|
-- relation - The OID of the table to be converted
|
|
-- dimension - The dimension to use for partitioning
|
|
-- create_default_indexes (Optional) Whether or not to create the default indexes
|
|
-- if_not_exists (Optional) Do not fail if table is already a hypertable
|
|
-- migrate_data (Optional) Set to true to migrate any existing data in the table to chunks
|
|
CREATE OR REPLACE FUNCTION @extschema@.create_hypertable(
|
|
relation REGCLASS,
|
|
dimension _timescaledb_internal.dimension_info,
|
|
create_default_indexes BOOLEAN = TRUE,
|
|
if_not_exists BOOLEAN = FALSE,
|
|
migrate_data BOOLEAN = FALSE
|
|
) RETURNS TABLE(hypertable_id INT, created BOOL) AS '@MODULE_PATHNAME@', 'ts_hypertable_create_general' LANGUAGE C VOLATILE;
|
|
|
|
|
|
-- Set adaptive chunking. To disable, set chunk_target_size => 'off'.
|
|
CREATE OR REPLACE FUNCTION @extschema@.set_adaptive_chunking(
|
|
hypertable REGCLASS,
|
|
chunk_target_size TEXT,
|
|
INOUT chunk_sizing_func REGPROC = '_timescaledb_functions.calculate_chunk_interval'::regproc,
|
|
OUT chunk_target_size BIGINT
|
|
) RETURNS RECORD AS '@MODULE_PATHNAME@', 'ts_chunk_adaptive_set' LANGUAGE C VOLATILE;
|
|
|
|
-- Update chunk_time_interval for a hypertable [DEPRECATED].
|
|
--
|
|
-- hypertable - The OID of the table corresponding to a hypertable whose time
|
|
-- interval should be updated
|
|
-- chunk_time_interval - The new time interval. For hypertables with integral
|
|
-- time columns, this must be an integral type. For hypertables with a
|
|
-- TIMESTAMP/TIMESTAMPTZ/DATE type, it can be integral which is treated as
|
|
-- microseconds, or an INTERVAL type.
|
|
CREATE OR REPLACE FUNCTION @extschema@.set_chunk_time_interval(
|
|
hypertable REGCLASS,
|
|
chunk_time_interval ANYELEMENT,
|
|
dimension_name NAME = NULL
|
|
) RETURNS VOID AS '@MODULE_PATHNAME@', 'ts_dimension_set_interval' LANGUAGE C VOLATILE;
|
|
|
|
-- Update partition_interval for a hypertable.
|
|
--
|
|
-- hypertable - The OID of the table corresponding to a hypertable whose
|
|
-- partition interval should be updated
|
|
-- partition_interval - The new interval. For hypertables with integral/serial/bigserial
|
|
-- time columns, this must be an integral type. For hypertables with a
|
|
-- TIMESTAMP/TIMESTAMPTZ/DATE type, it can be integral which is treated as
|
|
-- microseconds, or an INTERVAL type.
|
|
CREATE OR REPLACE FUNCTION @extschema@.set_partitioning_interval(
|
|
hypertable REGCLASS,
|
|
partition_interval ANYELEMENT,
|
|
dimension_name NAME = NULL
|
|
) RETURNS VOID AS '@MODULE_PATHNAME@', 'ts_dimension_set_interval' LANGUAGE C VOLATILE;
|
|
|
|
CREATE OR REPLACE FUNCTION @extschema@.set_number_partitions(
|
|
hypertable REGCLASS,
|
|
number_partitions INTEGER,
|
|
dimension_name NAME = NULL
|
|
) RETURNS VOID AS '@MODULE_PATHNAME@', 'ts_dimension_set_num_slices' LANGUAGE C VOLATILE;
|
|
|
|
-- Drop chunks older than the given timestamp for the specific
|
|
-- hypertable or continuous aggregate.
|
|
CREATE OR REPLACE FUNCTION @extschema@.drop_chunks(
|
|
relation REGCLASS,
|
|
older_than "any" = NULL,
|
|
newer_than "any" = NULL,
|
|
verbose BOOLEAN = FALSE,
|
|
created_before "any" = NULL,
|
|
created_after "any" = NULL
|
|
) RETURNS SETOF TEXT AS '@MODULE_PATHNAME@', 'ts_chunk_drop_chunks'
|
|
LANGUAGE C VOLATILE PARALLEL UNSAFE;
|
|
|
|
-- show chunks older than or newer than a specific time.
|
|
-- `relation` must be a valid hypertable or continuous aggregate.
|
|
CREATE OR REPLACE FUNCTION @extschema@.show_chunks(
|
|
relation REGCLASS,
|
|
older_than "any" = NULL,
|
|
newer_than "any" = NULL,
|
|
created_before "any" = NULL,
|
|
created_after "any" = NULL
|
|
) RETURNS SETOF REGCLASS AS '@MODULE_PATHNAME@', 'ts_chunk_show_chunks'
|
|
LANGUAGE C STABLE PARALLEL SAFE;
|
|
|
|
-- Add a dimension (of partitioning) to a hypertable [DEPRECATED]
|
|
--
|
|
-- hypertable - OID of the table to add a dimension to
|
|
-- column_name - NAME of the column to use in partitioning for this dimension
|
|
-- number_partitions - Number of partitions, for non-time dimensions
|
|
-- chunk_time_interval - Size of intervals for time dimensions (can be integral or INTERVAL)
|
|
-- partitioning_func - Function used to partition the column
|
|
-- if_not_exists - If set, and the dimension already exists, generate a notice instead of an error
|
|
CREATE OR REPLACE FUNCTION @extschema@.add_dimension(
|
|
hypertable REGCLASS,
|
|
column_name NAME,
|
|
number_partitions INTEGER = NULL,
|
|
chunk_time_interval ANYELEMENT = NULL::BIGINT,
|
|
partitioning_func REGPROC = NULL,
|
|
if_not_exists BOOLEAN = FALSE
|
|
) RETURNS TABLE(dimension_id INT, schema_name NAME, table_name NAME, column_name NAME, created BOOL)
|
|
AS '@MODULE_PATHNAME@', 'ts_dimension_add' LANGUAGE C VOLATILE;
|
|
|
|
-- Add a dimension (of partitioning) to a hypertable.
|
|
--
|
|
-- hypertable - OID of the table to add a dimension to
|
|
-- dimension - Dimension to add
|
|
-- if_not_exists - If set, and the dimension already exists, generate a notice instead of an error
|
|
CREATE OR REPLACE FUNCTION @extschema@.add_dimension(
|
|
hypertable REGCLASS,
|
|
dimension _timescaledb_internal.dimension_info,
|
|
if_not_exists BOOLEAN = FALSE
|
|
) RETURNS TABLE(dimension_id INT, created BOOL)
|
|
AS '@MODULE_PATHNAME@', 'ts_dimension_add_general' LANGUAGE C VOLATILE;
|
|
|
|
CREATE OR REPLACE FUNCTION @extschema@.by_hash(column_name NAME, number_partitions INTEGER,
|
|
partition_func regproc = NULL)
|
|
RETURNS _timescaledb_internal.dimension_info LANGUAGE C
|
|
AS '@MODULE_PATHNAME@', 'ts_hash_dimension';
|
|
|
|
CREATE OR REPLACE FUNCTION @extschema@.by_range(column_name NAME,
|
|
partition_interval ANYELEMENT = NULL::bigint,
|
|
partition_func regproc = NULL)
|
|
RETURNS _timescaledb_internal.dimension_info LANGUAGE C
|
|
AS '@MODULE_PATHNAME@', 'ts_range_dimension';
|
|
|
|
CREATE OR REPLACE FUNCTION @extschema@.attach_tablespace(
|
|
tablespace NAME,
|
|
hypertable REGCLASS,
|
|
if_not_attached BOOLEAN = false
|
|
) RETURNS VOID
|
|
AS '@MODULE_PATHNAME@', 'ts_tablespace_attach' LANGUAGE C VOLATILE;
|
|
|
|
CREATE OR REPLACE FUNCTION @extschema@.detach_tablespace(
|
|
tablespace NAME,
|
|
hypertable REGCLASS = NULL,
|
|
if_attached BOOLEAN = false
|
|
) RETURNS INTEGER
|
|
AS '@MODULE_PATHNAME@', 'ts_tablespace_detach' LANGUAGE C VOLATILE;
|
|
|
|
CREATE OR REPLACE FUNCTION @extschema@.detach_tablespaces(hypertable REGCLASS) RETURNS INTEGER
|
|
AS '@MODULE_PATHNAME@', 'ts_tablespace_detach_all_from_hypertable' LANGUAGE C VOLATILE;
|
|
|
|
CREATE OR REPLACE FUNCTION @extschema@.show_tablespaces(hypertable REGCLASS) RETURNS SETOF NAME
|
|
AS '@MODULE_PATHNAME@', 'ts_tablespace_show' LANGUAGE C VOLATILE STRICT;
|
|
|
|
-- Add a data node to a TimescaleDB distributed database.
|
|
CREATE OR REPLACE FUNCTION @extschema@.add_data_node(
|
|
node_name NAME,
|
|
host TEXT,
|
|
database NAME = NULL,
|
|
port INTEGER = NULL,
|
|
if_not_exists BOOLEAN = FALSE,
|
|
bootstrap BOOLEAN = TRUE,
|
|
password TEXT = NULL
|
|
) RETURNS TABLE(node_name NAME, host TEXT, port INTEGER, database NAME,
|
|
node_created BOOL, database_created BOOL, extension_created BOOL)
|
|
AS '@MODULE_PATHNAME@', 'ts_data_node_add' LANGUAGE C VOLATILE;
|
|
|
|
-- Delete a data node from a distributed database
|
|
CREATE OR REPLACE FUNCTION @extschema@.delete_data_node(
|
|
node_name NAME,
|
|
if_exists BOOLEAN = FALSE,
|
|
force BOOLEAN = FALSE,
|
|
repartition BOOLEAN = TRUE,
|
|
drop_database BOOLEAN = FALSE
|
|
) RETURNS BOOLEAN AS '@MODULE_PATHNAME@', 'ts_data_node_delete' LANGUAGE C VOLATILE;
|
|
|
|
-- Attach a data node to a distributed hypertable
|
|
CREATE OR REPLACE FUNCTION @extschema@.attach_data_node(
|
|
node_name NAME,
|
|
hypertable REGCLASS,
|
|
if_not_attached BOOLEAN = FALSE,
|
|
repartition BOOLEAN = TRUE
|
|
) RETURNS TABLE(hypertable_id INTEGER, node_hypertable_id INTEGER, node_name NAME)
|
|
AS '@MODULE_PATHNAME@', 'ts_data_node_attach' LANGUAGE C VOLATILE;
|
|
|
|
-- Detach a data node from a distributed hypertable. NULL hypertable means it will detach from all distributed hypertables
|
|
CREATE OR REPLACE FUNCTION @extschema@.detach_data_node(
|
|
node_name NAME,
|
|
hypertable REGCLASS = NULL,
|
|
if_attached BOOLEAN = FALSE,
|
|
force BOOLEAN = FALSE,
|
|
repartition BOOLEAN = TRUE,
|
|
drop_remote_data BOOLEAN = FALSE
|
|
) RETURNS INTEGER
|
|
AS '@MODULE_PATHNAME@', 'ts_data_node_detach' LANGUAGE C VOLATILE;
|
|
|
|
-- Execute query on a specified list of data nodes. By default node_list is NULL, which means
|
|
-- to execute the query on every data node
|
|
CREATE OR REPLACE PROCEDURE @extschema@.distributed_exec(
|
|
query TEXT,
|
|
node_list name[] = NULL,
|
|
transactional BOOLEAN = TRUE)
|
|
AS '@MODULE_PATHNAME@', 'ts_distributed_exec' LANGUAGE C;
|
|
|
|
-- Execute pg_create_restore_point() on each data node
|
|
CREATE OR REPLACE FUNCTION @extschema@.create_distributed_restore_point(
|
|
name TEXT
|
|
) RETURNS TABLE(node_name NAME, node_type TEXT, restore_point pg_lsn)
|
|
AS '@MODULE_PATHNAME@', 'ts_create_distributed_restore_point' LANGUAGE C VOLATILE STRICT;
|
|
|
|
-- Sets new replication factor for distributed hypertable
|
|
CREATE OR REPLACE FUNCTION @extschema@.set_replication_factor(
|
|
hypertable REGCLASS,
|
|
replication_factor INTEGER
|
|
) RETURNS VOID
|
|
AS '@MODULE_PATHNAME@', 'ts_hypertable_distributed_set_replication_factor' LANGUAGE C VOLATILE;
|
|
|
|
-- Refresh a continuous aggregate across the given window.
|
|
CREATE OR REPLACE PROCEDURE @extschema@.refresh_continuous_aggregate(
|
|
continuous_aggregate REGCLASS,
|
|
window_start "any",
|
|
window_end "any"
|
|
) LANGUAGE C AS '@MODULE_PATHNAME@', 'ts_continuous_agg_refresh';
|
|
|
|
CREATE OR REPLACE FUNCTION @extschema@.alter_data_node(
|
|
node_name NAME,
|
|
host TEXT = NULL,
|
|
database NAME = NULL,
|
|
port INTEGER = NULL,
|
|
available BOOLEAN = NULL
|
|
) RETURNS TABLE(node_name NAME, host TEXT, port INTEGER, database NAME, available BOOLEAN)
|
|
AS '@MODULE_PATHNAME@', 'ts_data_node_alter' LANGUAGE C VOLATILE;
|