Skip to main content

V1_TENANT_ACTIVATE_V2_SQL

Constant V1_TENANT_ACTIVATE_V2_SQL 

Source
pub const V1_TENANT_ACTIVATE_V2_SQL: &str = "-- Corrected activation for a prepared version 1 PostgreSQL deployment.\n--\n-- The published 0.2.0 activation artifact is immutable, but it cannot complete:\n-- it validates the version-2 marker constraint while the marker row is still\n-- version 1, and it names only the version-2 delivery foreign key when removing\n-- the version-1 constraint. Run this replacement after the unchanged prepare\n-- artifact and the operator-owned tenant backfill.\n\nBEGIN;\n\nDO $$\nBEGIN\n    IF EXISTS (SELECT 1 FROM dovecote_events WHERE tenant_id IS NULL)\n       OR EXISTS (SELECT 1 FROM dovecote_deliveries WHERE tenant_id IS NULL) THEN\n        RAISE EXCEPTION \'Dovecote tenant backfill is incomplete\';\n    END IF;\n    IF EXISTS (SELECT 1 FROM dovecote_events WHERE tenant_id = \'\')\n       OR EXISTS (SELECT 1 FROM dovecote_deliveries WHERE tenant_id = \'\') THEN\n        RAISE EXCEPTION \'Dovecote tenant backfill contains an empty tenant\';\n    END IF;\n    IF EXISTS (\n        SELECT 1\n        FROM dovecote_deliveries AS d\n        LEFT JOIN dovecote_events AS e ON e.row_id = d.event_row_id\n        WHERE e.row_id IS NULL OR d.tenant_id <> e.tenant_id\n    ) THEN\n        RAISE EXCEPTION \'Dovecote event and delivery tenants do not agree\';\n    END IF;\nEND\n$$;\n\nALTER TABLE dovecote_events\n    ALTER COLUMN tenant_id SET NOT NULL;\nALTER TABLE dovecote_deliveries\n    ALTER COLUMN tenant_id SET NOT NULL;\n\nALTER TABLE dovecote_events\n    ADD CONSTRAINT dovecote_events_tenant_size\n        CHECK (octet_length(tenant_id) <= 255),\n    ADD CONSTRAINT dovecote_events_tenant_nonempty\n        CHECK (octet_length(tenant_id) > 0),\n    ADD CONSTRAINT dovecote_events_tenant_row_unique\n        UNIQUE (tenant_id, row_id);\n\nDROP INDEX IF EXISTS dovecote_events_source_event_id;\nCREATE UNIQUE INDEX dovecote_events_tenant_source_event_id\n    ON dovecote_events (tenant_id COLLATE \"C\", source COLLATE \"C\", event_id COLLATE \"C\");\n\nALTER TABLE dovecote_deliveries\n    DROP CONSTRAINT IF EXISTS dovecote_deliveries_event_row_id_fkey;\nALTER TABLE dovecote_deliveries\n    DROP CONSTRAINT IF EXISTS dovecote_deliveries_event_fk;\nDROP INDEX IF EXISTS dovecote_deliveries_claimable;\nDROP INDEX IF EXISTS dovecote_deliveries_expired_claims;\n\nALTER TABLE dovecote_deliveries\n    ADD CONSTRAINT dovecote_deliveries_tenant_size\n        CHECK (octet_length(tenant_id) <= 255),\n    ADD CONSTRAINT dovecote_deliveries_tenant_nonempty\n        CHECK (octet_length(tenant_id) > 0),\n    ADD CONSTRAINT dovecote_deliveries_event_fk\n        FOREIGN KEY (tenant_id, event_row_id)\n        REFERENCES dovecote_events (tenant_id, row_id)\n        ON DELETE RESTRICT;\n\nCREATE INDEX dovecote_deliveries_claimable\n    ON dovecote_deliveries (tenant_id COLLATE \"C\", state, available_at, event_row_id);\nCREATE INDEX dovecote_deliveries_expired_claims\n    ON dovecote_deliveries (tenant_id COLLATE \"C\", state, claim_expires_at, event_row_id);\n\nALTER TABLE dovecote_schema\n    DROP CONSTRAINT dovecote_schema_version_supported;\nUPDATE dovecote_schema\nSET schema_version = 2,\n    minimum_crate_major = 0,\n    minimum_crate_minor = 2,\n    minimum_crate_patch = 0,\n    rolling_compatible = FALSE;\nALTER TABLE dovecote_schema\n    ADD CONSTRAINT dovecote_schema_version_supported\n        CHECK (schema_version = 2);\n\nCOMMIT;\n";
Expand description

Corrected SQL that validates an operator-owned backfill and activates version 2.

This replaces the immutable 0.2.0 activation artifact, which cannot complete. Applications upgrading a version 1 schema run the unchanged V1_TENANT_PREPARE_SQL, perform their tenant backfill, and then run this artifact instead of V1_TENANT_ACTIVATE_SQL.