-- Note, if you installed update 2.6.3 prior to the release of 2.6.4, this update will not change anything, but is still required to be installed to allow the extension version update chain to work. -- While upgrading to version 2.6.3 or later, if you encounter the error: "cannot ALTER TABLE "part_config_sub" because it has pending trigger events" (or for the part_config table), then you must install that update by itself first and then install the update to 2.6.4 separately in a different transaction. Changing the values of a column in the same transaction as altering it to add/remove a constraint can cause the pending triggers error. The only way around that is to do the steps as separate transactions, which this update separates out from the previous one that caused the issue. Unfortunately, all extension updates run in a single transaction unless you upgrade manually to a specific version to control the transaction state between versions. (Github Issue #167). /* If you encounter this error, do the updates for 2.6.3 & 2.6.4 as follows: BEGIN; ALTER EXTENSION pg_partman UPDATE TO '2.6.3'; COMMIT; BEGIN; ALTER EXTENSION pg_partman UPDATE TO '2.6.4'; COMMIT; */ -- Redoing this again shouldn't matter ALTER TABLE @extschema@.part_config ALTER COLUMN epoch SET DEFAULT 'none'; ALTER TABLE @extschema@.part_config_sub ALTER COLUMN sub_epoch SET DEFAULT 'none'; -- Only recreate constraints if they don't already exist from a previous 2.6.3 update before 2.6.4 was available DO $$ DECLARE v_exists text; BEGIN SELECT conname INTO v_exists FROM pg_catalog.pg_constraint t JOIN pg_catalog.pg_class c ON t.conrelid = c.oid JOIN pg_catalog.pg_namespace n ON c.relnamespace = n.oid WHERE t.conname = 'part_config_epoch_check' AND c.relname = 'part_config' AND n.nspname = '@extschema@'; IF v_exists IS NULL THEN EXECUTE format(' ALTER TABLE @extschema@.part_config ADD CONSTRAINT part_config_epoch_check CHECK (@extschema@.check_epoch_type(epoch))'); END IF; v_exists := NULL; SELECT conname INTO v_exists FROM pg_catalog.pg_constraint t JOIN pg_catalog.pg_class c ON t.conrelid = c.oid JOIN pg_catalog.pg_namespace n ON c.relnamespace = n.oid WHERE t.conname = 'part_config_sub_epoch_check' AND c.relname = 'part_config_sub' AND n.nspname = '@extschema@'; IF v_exists IS NULL THEN EXECUTE format(' ALTER TABLE @extschema@.part_config_sub ADD CONSTRAINT part_config_sub_epoch_check CHECK (@extschema@.check_epoch_type(sub_epoch))'); END IF; END $$;