mirror of
https://github.com/timescale/timescaledb.git
synced 2025-05-16 18:43:18 +08:00
57 lines
1.8 KiB
PL/PgSQL
57 lines
1.8 KiB
PL/PgSQL
-- Creates an index on all chunk for a hypertable.
|
|
-- static
|
|
CREATE OR REPLACE FUNCTION _timescaledb_internal.create_index_on_all_chunks(
|
|
hypertable_id INTEGER,
|
|
main_schema_name NAME,
|
|
main_index_name NAME,
|
|
definition TEXT
|
|
)
|
|
RETURNS VOID LANGUAGE PLPGSQL VOLATILE AS
|
|
$BODY$
|
|
DECLARE
|
|
BEGIN
|
|
PERFORM _timescaledb_internal.create_chunk_index_row(c.schema_name, c.table_name, main_schema_name, main_index_name, definition)
|
|
FROM _timescaledb_catalog.chunk c
|
|
WHERE c.hypertable_id = create_index_on_all_chunks.hypertable_id;
|
|
END
|
|
$BODY$;
|
|
|
|
-- Drops table on all chunks for a hypertable.
|
|
-- static
|
|
CREATE OR REPLACE FUNCTION _timescaledb_internal.drop_index_on_all_chunks(
|
|
main_schema_name NAME,
|
|
main_index_name NAME
|
|
)
|
|
RETURNS VOID LANGUAGE SQL VOLATILE AS
|
|
$BODY$
|
|
DELETE FROM _timescaledb_catalog.chunk_index ci
|
|
WHERE ci.main_index_name = drop_index_on_all_chunks.main_index_name AND
|
|
ci.main_schema_name = drop_index_on_all_chunks.main_schema_name
|
|
$BODY$;
|
|
|
|
|
|
-- Creates indexes on chunk tables when hypertable_index rows created.
|
|
CREATE OR REPLACE FUNCTION _timescaledb_internal.on_change_hypertable_index()
|
|
RETURNS TRIGGER LANGUAGE PLPGSQL AS
|
|
$BODY$
|
|
DECLARE
|
|
hypertable_row _timescaledb_catalog.hypertable;
|
|
BEGIN
|
|
IF TG_OP = 'UPDATE' THEN
|
|
PERFORM _timescaledb_internal.on_trigger_error(TG_OP, TG_TABLE_SCHEMA, TG_TABLE_NAME);
|
|
RETURN NEW;
|
|
ELSIF TG_OP = 'INSERT' THEN
|
|
-- create index on all chunks
|
|
PERFORM _timescaledb_internal.create_index_on_all_chunks(NEW.hypertable_id, NEW.main_schema_name, NEW.main_index_name, NEW.definition);
|
|
|
|
RETURN NEW;
|
|
ELSIF TG_OP = 'DELETE' THEN
|
|
PERFORM _timescaledb_internal.drop_index_on_all_chunks(OLD.main_schema_name, OLD.main_index_name);
|
|
|
|
RETURN OLD;
|
|
END IF;
|
|
END
|
|
$BODY$;
|
|
|
|
|