From 0acfbaa8b1fb303683fdd2b7f1a7dea05cfb5b8e Mon Sep 17 00:00:00 2001 From: Craig Ringer Date: Fri, 10 Jul 2015 11:18:24 +0800 Subject: [PATCH] Update existing bdr triggers to 'tgisinternal' New truncate_triggers are created as `tgisinternal` but exiting ones are not changed. Fix that by doing a one-off catalog update during the BDR extension upgrade, setting any existing BDR truncate triggers to internal and appending their oid to their names to match new triggers. Further improvement for issue #62 --- Makefile.in | 8 +++++- bdr.control | 2 +- expected/upgrade.out | 7 +++-- extsql/bdr--0.10.0.6--0.10.0.7.sql | 42 ++++++++++++++++++++++++++++++ sql/upgrade.sql | 4 +++ 5 files changed, 59 insertions(+), 4 deletions(-) create mode 100644 extsql/bdr--0.10.0.6--0.10.0.7.sql diff --git a/Makefile.in b/Makefile.in index a394d70a82..cb9d258243 100644 --- a/Makefile.in +++ b/Makefile.in @@ -37,7 +37,8 @@ DATA = \ extsql/bdr--0.10.0.2--0.10.0.3.sql \ extsql/bdr--0.10.0.3--0.10.0.4.sql \ extsql/bdr--0.10.0.4--0.10.0.5.sql \ - extsql/bdr--0.10.0.5--0.10.0.6.sql + extsql/bdr--0.10.0.5--0.10.0.6.sql \ + extsql/bdr--0.10.0.6--0.10.0.7.sql DATA_built = \ extsql/bdr--0.8.0.1.sql \ @@ -61,6 +62,7 @@ DATA_built = \ extsql/bdr--0.10.0.3.sql \ extsql/bdr--0.10.0.4.sql \ extsql/bdr--0.10.0.5.sql \ + extsql/bdr--0.10.0.7.sql \ extsql/bdr--0.10.0.6.sql DOCS = bdr.conf.sample README.bdr @@ -230,6 +232,10 @@ extsql/bdr--0.10.0.6.sql: extsql/bdr--0.10.0.5.sql extsql/bdr--0.10.0.5--0.10.0. mkdir -p extsql cat $^ > $@ +extsql/bdr--0.10.0.7.sql: extsql/bdr--0.10.0.6.sql extsql/bdr--0.10.0.6--0.10.0.7.sql + mkdir -p extsql + cat $^ > $@ + bdr_resetxlog: pg_resetxlog.o $(CC) $(CFLAGS) $^ $(LDFLAGS) $(LDFLAGS_EX) $(libpq_pgport) $(LIBS) -o $@$(X) diff --git a/bdr.control b/bdr.control index 1ebfa15371..cc49872a50 100644 --- a/bdr.control +++ b/bdr.control @@ -1,6 +1,6 @@ # bdr extension comment = 'Bi-directional replication for PostgreSQL' -default_version = '0.10.0.6' +default_version = '0.10.0.7' module_pathname = '$libdir/bdr' relocatable = false requires = btree_gist diff --git a/expected/upgrade.out b/expected/upgrade.out index b6375f05fc..81dd64aa93 100644 --- a/expected/upgrade.out +++ b/expected/upgrade.out @@ -51,6 +51,8 @@ CREATE EXTENSION bdr VERSION '0.10.0.5'; DROP EXTENSION bdr; CREATE EXTENSION bdr VERSION '0.10.0.6'; DROP EXTENSION bdr; +CREATE EXTENSION bdr VERSION '0.10.0.7'; +DROP EXTENSION bdr; -- evolve version one by one from the oldest to the newest one CREATE EXTENSION bdr VERSION '0.8.0'; ALTER EXTENSION bdr UPDATE TO '0.8.0.1'; @@ -74,14 +76,15 @@ ALTER EXTENSION bdr UPDATE TO '0.10.0.3'; ALTER EXTENSION bdr UPDATE TO '0.10.0.4'; ALTER EXTENSION bdr UPDATE TO '0.10.0.5'; ALTER EXTENSION bdr UPDATE TO '0.10.0.6'; +ALTER EXTENSION bdr UPDATE TO '0.10.0.7'; -- Should never have to do anything: You missed adding the new version above. ALTER EXTENSION bdr UPDATE; -NOTICE: version "0.10.0.6" of extension "bdr" is already installed +NOTICE: version "0.10.0.7" of extension "bdr" is already installed \dx bdr List of installed extensions Name | Version | Schema | Description ------+----------+------------+------------------------------------------- - bdr | 0.10.0.6 | pg_catalog | Bi-directional replication for PostgreSQL + bdr | 0.10.0.7 | pg_catalog | Bi-directional replication for PostgreSQL (1 row) \c postgres diff --git a/extsql/bdr--0.10.0.6--0.10.0.7.sql b/extsql/bdr--0.10.0.6--0.10.0.7.sql new file mode 100644 index 0000000000..c6845ec184 --- /dev/null +++ b/extsql/bdr--0.10.0.6--0.10.0.7.sql @@ -0,0 +1,42 @@ +SET LOCAL search_path = bdr; +SET bdr.permit_unsafe_ddl_commands = true; +SET bdr.skip_ddl_replication = true; + +-- +-- When updating BDR existing truncate triggers will not be marked as tgisinternal. +-- +-- We now permit updates on the catalogs, so simply update them to be +-- tgisinternal. +-- +-- There's no need to replicate this change, since the extension update +-- script runs on each node and the trigger definition tuples are different +-- on each node anyway. +-- + +DO +$$ +DECLARE + rc integer; +BEGIN + UPDATE pg_trigger + SET tgisinternal = 't', tgname = tgname || '_' || oid + FROM pg_proc p + INNER JOIN pg_namespace n ON (p.pronamespace = n.oid) + WHERE pg_trigger.tgfoid = p.oid + AND tgname = 'truncate_trigger' + AND p.proname = 'queue_truncate' + AND n.nspname = 'bdr'; + + GET DIAGNOSTICS rc = ROW_COUNT; + + IF rc > 0 THEN + RAISE LOG 'BDR update: Set % existing truncate_trigger entries to tgisinternal', rc; + END IF; + +END; +$$ +LANGUAGE plpgsql; + +RESET bdr.permit_unsafe_ddl_commands; +RESET bdr.skip_ddl_replication; +RESET search_path; diff --git a/sql/upgrade.sql b/sql/upgrade.sql index b8c37e7a7e..fc7af53929 100644 --- a/sql/upgrade.sql +++ b/sql/upgrade.sql @@ -75,6 +75,9 @@ DROP EXTENSION bdr; CREATE EXTENSION bdr VERSION '0.10.0.6'; DROP EXTENSION bdr; +CREATE EXTENSION bdr VERSION '0.10.0.7'; +DROP EXTENSION bdr; + -- evolve version one by one from the oldest to the newest one CREATE EXTENSION bdr VERSION '0.8.0'; ALTER EXTENSION bdr UPDATE TO '0.8.0.1'; @@ -98,6 +101,7 @@ ALTER EXTENSION bdr UPDATE TO '0.10.0.3'; ALTER EXTENSION bdr UPDATE TO '0.10.0.4'; ALTER EXTENSION bdr UPDATE TO '0.10.0.5'; ALTER EXTENSION bdr UPDATE TO '0.10.0.6'; +ALTER EXTENSION bdr UPDATE TO '0.10.0.7'; -- Should never have to do anything: You missed adding the new version above. ALTER EXTENSION bdr UPDATE; -- 2.39.5