BEGIN; ALTER TABLE idempotency_record ADD COLUMN actor_key varchar(500) NOT NULL DEFAULT 'urn:legacy:unknown'; ALTER TABLE idempotency_record DROP CONSTRAINT idempotency_record_tenant_id_scope_idempotency_key_key; ALTER TABLE idempotency_record ADD CONSTRAINT idempotency_record_actor_scope_key UNIQUE (actor_key, scope, idempotency_key); CREATE INDEX idempotency_record_tenant_scope_idx ON idempotency_record (tenant_id, scope, created_at DESC); ALTER TABLE outbox_event ADD COLUMN deduplication_key varchar(255), ADD COLUMN payload_hash char(64) NOT NULL DEFAULT repeat('0', 64), ADD COLUMN dead_at timestamptz; CREATE UNIQUE INDEX outbox_event_deduplication_key ON outbox_event ( COALESCE(tenant_id, '00000000-0000-0000-0000-000000000000'::uuid), event_type, deduplication_key ) WHERE deduplication_key IS NOT NULL; CREATE INDEX outbox_event_stale_lock_idx ON outbox_event (locked_at) WHERE status = 'processing'; COMMIT;