mirror of
https://github.com/timescale/timescaledb.git
synced 2025-05-17 02:53:51 +08:00
Allow users to specify an explicit "operation_id" while carrying out a copy/move operation. If it's specified then that is used as the identifier for the copy/move operation. Otherwise, am implicit id as before gets created and used.
108 lines
4.2 KiB
PL/PgSQL
108 lines
4.2 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;
|
|
|
|
DROP PROCEDURE timescaledb_experimental.move_chunk(REGCLASS, NAME, NAME, NAME);
|
|
DROP PROCEDURE timescaledb_experimental.copy_chunk(REGCLASS, NAME, NAME, NAME);
|