timescaledb/sql/common/chunk.sql
Olof Rensfelt d070514f2a Fixed time chunk ranges.
To allow better caching and reduce the need for locking, chunks now
have fixed start and stop times set when the chunk is created.
2017-04-23 19:45:46 -04:00

42 lines
1.4 KiB
PL/PgSQL

--get the chunk for a given partition and time.
CREATE OR REPLACE FUNCTION _timescaledb_internal.get_chunk(
partition_id INT,
time_point BIGINT
)
RETURNS _timescaledb_catalog.chunk LANGUAGE SQL STABLE AS
$BODY$
SELECT *
FROM _timescaledb_catalog.chunk c
WHERE c.partition_id = get_chunk.partition_id AND
(c.start_time <= time_point OR c.start_time IS NULL) AND
(c.end_time >= time_point OR c.end_time IS NULL);
$BODY$;
CREATE OR REPLACE FUNCTION _timescaledb_catalog.local_chunk_size(name, name) RETURNS bigint
AS '$libdir/timescaledb', 'local_chunk_size' LANGUAGE C IMMUTABLE STRICT;
--returns the current size of a chunk (in bytes) given its ID.
--The size is typically aligned with the page size in Postgres.
CREATE OR REPLACE FUNCTION _timescaledb_internal.get_local_chunk_size(
chunk_id INT
)
RETURNS BIGINT LANGUAGE PLPGSQL STABLE AS
$BODY$
DECLARE
chunk_replica_row _timescaledb_catalog.chunk_replica_node;
BEGIN
SELECT *
INTO STRICT chunk_replica_row
FROM _timescaledb_catalog.chunk_replica_node crn
WHERE crn.chunk_id = get_local_chunk_size.chunk_id
AND crn.database_name = current_database();
IF chunk_replica_row.database_name != current_database() THEN
RAISE EXCEPTION 'get_local_chunk_size should only be called locally'
USING ERRCODE = 'IO501';
END IF;
RETURN _timescaledb_catalog.local_chunk_size(chunk_replica_row.schema_name, chunk_replica_row.table_name);
END
$BODY$;