mirror of
https://github.com/timescale/timescaledb.git
synced 2025-05-16 10:33:27 +08:00
This patch changes the dump configuration for _timescaledb_catalog.metadata to include all entries. To allow loading logical dumps with this configuration an insert trigger is added that turns uniqueness conflicts into updates to not block the restore.
46 lines
1.6 KiB
PL/PgSQL
46 lines
1.6 KiB
PL/PgSQL
-- This file and its contents are licensed under the Apache License 2.0.
|
|
-- Please see the included NOTICE for copyright information and
|
|
-- LICENSE-APACHE for a copy of the license.
|
|
|
|
CREATE OR REPLACE FUNCTION @extschema@.timescaledb_pre_restore() RETURNS BOOL AS
|
|
$BODY$
|
|
DECLARE
|
|
db text;
|
|
BEGIN
|
|
SELECT current_database() INTO db;
|
|
EXECUTE format($$ALTER DATABASE %I SET timescaledb.restoring ='on'$$, db);
|
|
SET SESSION timescaledb.restoring = 'on';
|
|
PERFORM _timescaledb_functions.stop_background_workers();
|
|
--exported uuid may be included in the dump so backup the version
|
|
RETURN true;
|
|
END
|
|
$BODY$
|
|
LANGUAGE PLPGSQL SET search_path TO pg_catalog, pg_temp;
|
|
|
|
|
|
CREATE OR REPLACE FUNCTION @extschema@.timescaledb_post_restore() RETURNS BOOL AS
|
|
$BODY$
|
|
DECLARE
|
|
db text;
|
|
catalog_version text;
|
|
BEGIN
|
|
SELECT m.value INTO catalog_version FROM pg_extension x
|
|
JOIN _timescaledb_catalog.metadata m ON m.key='timescaledb_version'
|
|
WHERE x.extname='timescaledb' AND x.extversion <> m.value;
|
|
|
|
-- check that a loaded dump is compatible with the currently running code
|
|
IF FOUND THEN
|
|
RAISE EXCEPTION 'catalog version mismatch, expected "%" seen "%"', '@PROJECT_VERSION_MOD@', catalog_version;
|
|
END IF;
|
|
|
|
SELECT current_database() INTO db;
|
|
EXECUTE format($$ALTER DATABASE %I RESET timescaledb.restoring $$, db);
|
|
-- we cannot use reset here because the reset_val might not be off
|
|
SET timescaledb.restoring TO off;
|
|
PERFORM _timescaledb_functions.restart_background_workers();
|
|
|
|
RETURN true;
|
|
END
|
|
$BODY$
|
|
LANGUAGE PLPGSQL SET search_path TO pg_catalog, pg_temp;
|