-- Add new function definitions, columns and tables for distributed hypertables DROP FUNCTION IF EXISTS create_hypertable(regclass,name,name,integer,name,name,anyelement,boolean,boolean,regproc,boolean,text,regproc,regproc); ALTER TABLE _timescaledb_catalog.hypertable ADD COLUMN replication_factor SMALLINT NULL CHECK (replication_factor > 0); -- Table for hypertable -> node mappings CREATE TABLE IF NOT EXISTS _timescaledb_catalog.hypertable_data_node ( hypertable_id INTEGER NOT NULL REFERENCES _timescaledb_catalog.hypertable(id), node_hypertable_id INTEGER NULL, node_name NAME NOT NULL, block_chunks BOOLEAN NOT NULL, UNIQUE(node_hypertable_id, node_name), UNIQUE(hypertable_id, node_name) ); SELECT pg_catalog.pg_extension_config_dump('_timescaledb_catalog.hypertable_data_node', ''); GRANT SELECT ON _timescaledb_catalog.hypertable_data_node TO PUBLIC; -- Table for chunk -> nodes mappings CREATE TABLE IF NOT EXISTS _timescaledb_catalog.chunk_data_node ( chunk_id INTEGER NOT NULL REFERENCES _timescaledb_catalog.chunk(id), node_chunk_id INTEGER NOT NULL, node_name NAME NOT NULL, UNIQUE(node_chunk_id, node_name), UNIQUE(chunk_id, node_name) ); SELECT pg_catalog.pg_extension_config_dump('_timescaledb_catalog.chunk_data_node', ''); GRANT SELECT ON _timescaledb_catalog.chunk_data_node TO PUBLIC; --placeholder to allow creation of functions below CREATE TYPE rxid; CREATE OR REPLACE FUNCTION _timescaledb_internal.rxid_in(cstring) RETURNS rxid AS '@MODULE_PATHNAME@', 'ts_remote_txn_id_in' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; CREATE OR REPLACE FUNCTION _timescaledb_internal.rxid_out(rxid) RETURNS cstring AS '@MODULE_PATHNAME@', 'ts_remote_txn_id_out' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; CREATE TYPE rxid ( internallength = 16, input = _timescaledb_internal.rxid_in, output = _timescaledb_internal.rxid_out ); CREATE TABLE _timescaledb_catalog.remote_txn ( data_node_name NAME, --this is really only to allow us to cleanup stuff on a per-node basis. remote_transaction_id TEXT CHECK (remote_transaction_id::rxid is not null), PRIMARY KEY (remote_transaction_id) ); CREATE INDEX IF NOT EXISTS remote_txn_data_node_name_idx ON _timescaledb_catalog.remote_txn(data_node_name); SELECT pg_catalog.pg_extension_config_dump('_timescaledb_catalog.remote_txn', ''); GRANT SELECT ON _timescaledb_catalog.remote_txn TO PUBLIC;