diff --git a/schema/postgresql/v12/visibility/versioned/v1.14/add_external_payload_size_and_count_search_attributes.sql b/schema/postgresql/v12/visibility/versioned/v1.14/add_external_payload_size_and_count_search_attributes.sql index 8e46782d7c..750134e65f 100644 --- a/schema/postgresql/v12/visibility/versioned/v1.14/add_external_payload_size_and_count_search_attributes.sql +++ b/schema/postgresql/v12/visibility/versioned/v1.14/add_external_payload_size_and_count_search_attributes.sql @@ -1,9 +1,31 @@ ALTER TABLE executions_visibility -ADD COLUMN TemporalExternalPayloadSizeBytes BIGINT GENERATED ALWAYS AS ((search_attributes->'TemporalExternalPayloadSizeBytes')::bigint) STORED; + ADD COLUMN IF NOT EXISTS TemporalExternalPayloadSizeBytes BIGINT GENERATED ALWAYS AS ((search_attributes->'TemporalExternalPayloadSizeBytes')::bigint) STORED, + ADD COLUMN IF NOT EXISTS TemporalExternalPayloadCount BIGINT GENERATED ALWAYS AS ((search_attributes->'TemporalExternalPayloadCount')::bigint) STORED; -ALTER TABLE executions_visibility -ADD COLUMN TemporalExternalPayloadCount BIGINT GENERATED ALWAYS AS ((search_attributes->'TemporalExternalPayloadCount')::bigint) STORED; +-- Drop invalid indices +DO LANGUAGE 'plpgsql' $$ +DECLARE + r RECORD; +BEGIN + FOR r IN + SELECT i.relname as indexname + FROM + pg_class i, + pg_index ix + WHERE + i.oid = ix.indexrelid + AND ix.indrelid = (SELECT oid FROM pg_class WHERE relname = 'executions_visibility') + AND i.relname IN ( + 'by_temporal_external_payload_size_bytes', + 'by_temporal_external_payload_count' + ) + AND NOT ix.indisvalid + LOOP + EXECUTE format('DROP INDEX %I', r.indexname); + RAISE NOTICE 'Dropped invalid index %', r.indexname; + END LOOP; +END $$; -CREATE INDEX by_temporal_external_payload_size_bytes ON executions_visibility (namespace_id, TemporalExternalPayloadSizeBytes, (COALESCE(close_time, '9999-12-31 23:59:59')) DESC, start_time DESC, run_id); -CREATE INDEX by_temporal_external_payload_count ON executions_visibility (namespace_id, TemporalExternalPayloadCount, (COALESCE(close_time, '9999-12-31 23:59:59')) DESC, start_time DESC, run_id); +CREATE INDEX CONCURRENTLY IF NOT EXISTS by_temporal_external_payload_size_bytes ON executions_visibility (namespace_id, TemporalExternalPayloadSizeBytes, (COALESCE(close_time, '9999-12-31 23:59:59')) DESC, start_time DESC, run_id); +CREATE INDEX CONCURRENTLY IF NOT EXISTS by_temporal_external_payload_count ON executions_visibility (namespace_id, TemporalExternalPayloadCount, (COALESCE(close_time, '9999-12-31 23:59:59')) DESC, start_time DESC, run_id);