mirror of
https://github.com/timescale/timescaledb.git
synced 2025-05-15 18:13:18 +08:00
Add an internal api to drop a single chunk. This function drops the storage and metadata associated with the chunk. Note that chunk dependencies are not affected. e.g. Continuous aggs are not updated when this chunk is dropped.
106 lines
4.0 KiB
PL/PgSQL
106 lines
4.0 KiB
PL/PgSQL
DROP VIEW _timescaledb_internal.hypertable_chunk_local_size;
|
|
DROP FUNCTION _timescaledb_internal.relation_size(relation REGCLASS);
|
|
DROP INDEX _timescaledb_catalog.chunk_constraint_dimension_slice_id_idx;
|
|
CREATE INDEX chunk_constraint_chunk_id_dimension_slice_id_idx ON _timescaledb_catalog.chunk_constraint (chunk_id, dimension_slice_id);
|
|
DROP FUNCTION _timescaledb_internal.freeze_chunk(chunk REGCLASS);
|
|
DROP FUNCTION _timescaledb_internal.drop_chunk(chunk REGCLASS);
|
|
|
|
DO
|
|
$$
|
|
DECLARE
|
|
caggs_finalized TEXT;
|
|
caggs_count INTEGER;
|
|
BEGIN
|
|
SELECT
|
|
string_agg(format('%I.%I', user_view_schema, user_view_name), ', '),
|
|
count(*)
|
|
INTO
|
|
caggs_finalized,
|
|
caggs_count
|
|
FROM
|
|
_timescaledb_catalog.continuous_agg
|
|
WHERE
|
|
finalized IS TRUE;
|
|
|
|
IF caggs_count > 0 THEN
|
|
RAISE EXCEPTION 'Downgrade is not possible because there are % continuous aggregates using the finalized form: %', caggs_count, caggs_finalized
|
|
USING HINT = 'Remove the corresponding continuous aggregates manually before downgrading';
|
|
END IF;
|
|
END;
|
|
$$
|
|
LANGUAGE 'plpgsql';
|
|
|
|
--
|
|
-- Rebuild the catalog table `_timescaledb_catalog.continuous_agg`
|
|
--
|
|
-- We need to recreate the catalog from scratch because when we drop a column
|
|
-- Postgres mark the `pg_attribute.attisdropped=TRUE` instead of removing it from
|
|
-- the `pg_catalog.pg_attribute` table.
|
|
--
|
|
-- If we downgrade and upgrade the extension without rebuild the catalog table it
|
|
-- will mess with `pg_attribute.attnum` and we will end up with issues when trying
|
|
-- to update data in those catalog tables.
|
|
--
|
|
DROP VIEW IF EXISTS timescaledb_information.hypertables;
|
|
DROP VIEW IF EXISTS timescaledb_information.continuous_aggregates;
|
|
|
|
ALTER EXTENSION timescaledb
|
|
DROP TABLE _timescaledb_catalog.continuous_agg;
|
|
|
|
ALTER TABLE _timescaledb_catalog.continuous_aggs_materialization_invalidation_log
|
|
DROP CONSTRAINT continuous_aggs_materialization_invalid_materialization_id_fkey;
|
|
|
|
ALTER TABLE _timescaledb_catalog.continuous_agg
|
|
DROP COLUMN finalized;
|
|
|
|
CREATE TABLE _timescaledb_catalog._tmp_continuous_agg (
|
|
LIKE _timescaledb_catalog.continuous_agg
|
|
INCLUDING ALL
|
|
-- indexes and constraintes will be created later to keep original names
|
|
EXCLUDING INDEXES
|
|
EXCLUDING CONSTRAINTS
|
|
);
|
|
|
|
INSERT INTO _timescaledb_catalog._tmp_continuous_agg
|
|
SELECT
|
|
mat_hypertable_id,
|
|
raw_hypertable_id,
|
|
user_view_schema,
|
|
user_view_name,
|
|
partial_view_schema,
|
|
partial_view_name,
|
|
bucket_width,
|
|
direct_view_schema,
|
|
direct_view_name,
|
|
materialized_only
|
|
FROM
|
|
_timescaledb_catalog.continuous_agg
|
|
ORDER BY
|
|
mat_hypertable_id;
|
|
|
|
DROP TABLE _timescaledb_catalog.continuous_agg;
|
|
|
|
ALTER TABLE _timescaledb_catalog._tmp_continuous_agg
|
|
RENAME TO continuous_agg;
|
|
|
|
ALTER TABLE _timescaledb_catalog.continuous_agg
|
|
ADD CONSTRAINT continuous_agg_pkey PRIMARY KEY (mat_hypertable_id),
|
|
ADD CONSTRAINT continuous_agg_partial_view_schema_partial_view_name_key UNIQUE (partial_view_schema, partial_view_name),
|
|
ADD CONSTRAINT continuous_agg_user_view_schema_user_view_name_key UNIQUE (user_view_schema, user_view_name),
|
|
ADD CONSTRAINT continuous_agg_mat_hypertable_id_fkey FOREIGN KEY (mat_hypertable_id) REFERENCES _timescaledb_catalog.hypertable(id) ON DELETE CASCADE,
|
|
ADD CONSTRAINT continuous_agg_raw_hypertable_id_fkey FOREIGN KEY (raw_hypertable_id) REFERENCES _timescaledb_catalog.hypertable(id) ON DELETE CASCADE;
|
|
|
|
CREATE INDEX continuous_agg_raw_hypertable_id_idx ON _timescaledb_catalog.continuous_agg (raw_hypertable_id);
|
|
|
|
SELECT pg_catalog.pg_extension_config_dump('_timescaledb_catalog.continuous_agg', '');
|
|
|
|
GRANT SELECT ON TABLE _timescaledb_catalog.continuous_agg TO PUBLIC;
|
|
|
|
ALTER TABLE _timescaledb_catalog.continuous_aggs_materialization_invalidation_log
|
|
ADD CONSTRAINT continuous_aggs_materialization_invalid_materialization_id_fkey
|
|
FOREIGN KEY (materialization_id)
|
|
REFERENCES _timescaledb_catalog.continuous_agg(mat_hypertable_id) ON DELETE CASCADE;
|
|
|
|
ANALYZE _timescaledb_catalog.continuous_agg;
|
|
|