timescaledb/sql/main/chunk_replica_node_index_triggers.sql
Matvey Arye 42ee7c8586 starting refactor of clustering and naming logic
This fix allows more flexible placement of tables on a node; better
and more flexible logic for remote placement of chunks on nodes.
2016-11-22 16:41:27 -05:00

42 lines
1.4 KiB
PL/PgSQL

CREATE OR REPLACE FUNCTION _sysinternal.on_create_chunk_replica_node_index()
RETURNS TRIGGER LANGUAGE PLPGSQL AS
$BODY$
DECLARE
BEGIN
IF TG_OP <> 'INSERT' THEN
RAISE EXCEPTION 'Only inserts supported on % table', TG_TABLE_NAME
USING ERRCODE = 'IO101';
END IF;
IF NEW.index_type = 'TIME-VALUE' THEN
EXECUTE format(
$$
CREATE INDEX %1$I ON %2$I.%3$I
USING BTREE(time DESC NULLS LAST, %4$I)
WHERE %4$I IS NOT NULL
$$,
NEW.index_name, NEW.schema_name, NEW.table_name, NEW.field_name);
ELSIF NEW.index_type = 'VALUE-TIME' THEN
EXECUTE format(
$$
CREATE INDEX %1$I ON %2$I.%3$I
USING BTREE(%4$I, time DESC NULLS LAST)
WHERE %4$I IS NOT NULL
$$,
NEW.index_name, NEW.schema_name, NEW.table_name, NEW.field_name);
ELSE
RAISE EXCEPTION 'Unknown index type %', index_type
USING ERRCODE = 'IO103';
END IF;
RETURN NEW;
END
$BODY$
SET SEARCH_PATH = 'public';
BEGIN;
DROP TRIGGER IF EXISTS trigger_on_create_chunk_replica_node_index
ON chunk_replica_node_index;
CREATE TRIGGER trigger_on_create_chunk_replica_node_index AFTER INSERT OR UPDATE OR DELETE ON chunk_replica_node_index
FOR EACH ROW EXECUTE PROCEDURE _sysinternal.on_create_chunk_replica_node_index();
COMMIT;