mirror of
https://github.com/timescale/timescaledb.git
synced 2025-05-19 04:03:06 +08:00
To allow better caching and reduce the need for locking, chunks now have fixed start and stop times set when the chunk is created.
42 lines
1.4 KiB
PL/PgSQL
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$;
|
|
|