From 6c4a40c42dc9e2f6920990b2f45ed2440304cf5e Mon Sep 17 00:00:00 2001 From: hailin Date: Sun, 28 Dec 2025 05:26:38 -0800 Subject: [PATCH] =?UTF-8?q?fix(migration):=20=E4=BD=BF=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=BA=93=E8=BF=81=E7=A7=BB=E8=84=9A=E6=9C=AC=E5=B9=82=E7=AD=89?= =?UTF-8?q?=E5=8C=96=EF=BC=8C=E6=94=AF=E6=8C=81=E9=87=8D=E5=A4=8D=E6=89=A7?= =?UTF-8?q?=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 将 008_add_co_managed_wallet_fields.up.sql 改为幂等脚本: - 使用 DO $$ ... IF NOT EXISTS 检查列是否存在再添加 - 使用 CREATE INDEX IF NOT EXISTS 创建索引 - 使用 DROP CONSTRAINT IF EXISTS 删除约束 这确保迁移脚本可以安全地多次执行,不会因列/索引已存在而失败。 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- .../008_add_co_managed_wallet_fields.up.sql | 24 +++++++++++++------ 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/backend/mpc-system/migrations/008_add_co_managed_wallet_fields.up.sql b/backend/mpc-system/migrations/008_add_co_managed_wallet_fields.up.sql index 3a526334..584395e9 100644 --- a/backend/mpc-system/migrations/008_add_co_managed_wallet_fields.up.sql +++ b/backend/mpc-system/migrations/008_add_co_managed_wallet_fields.up.sql @@ -1,14 +1,24 @@ -- Migration: 008_add_co_managed_wallet_fields -- Description: Add wallet_name and invite_code fields for co-managed wallet sessions -- and extend session_type to support 'co_managed_keygen' +-- This migration is idempotent - safe to run multiple times --- Add new columns for co-managed wallet sessions -ALTER TABLE mpc_sessions - ADD COLUMN wallet_name VARCHAR(255), - ADD COLUMN invite_code VARCHAR(50); +-- Add new columns for co-managed wallet sessions (idempotent) +DO $$ +BEGIN + IF NOT EXISTS (SELECT 1 FROM information_schema.columns + WHERE table_name = 'mpc_sessions' AND column_name = 'wallet_name') THEN + ALTER TABLE mpc_sessions ADD COLUMN wallet_name VARCHAR(255); + END IF; --- Create index for invite_code lookups -CREATE INDEX idx_mpc_sessions_invite_code ON mpc_sessions(invite_code) WHERE invite_code IS NOT NULL; + IF NOT EXISTS (SELECT 1 FROM information_schema.columns + WHERE table_name = 'mpc_sessions' AND column_name = 'invite_code') THEN + ALTER TABLE mpc_sessions ADD COLUMN invite_code VARCHAR(50); + END IF; +END $$; + +-- Create index for invite_code lookups (idempotent) +CREATE INDEX IF NOT EXISTS idx_mpc_sessions_invite_code ON mpc_sessions(invite_code) WHERE invite_code IS NOT NULL; -- Drop the existing session_type constraint ALTER TABLE mpc_sessions DROP CONSTRAINT IF EXISTS chk_session_type; @@ -17,6 +27,6 @@ ALTER TABLE mpc_sessions DROP CONSTRAINT IF EXISTS chk_session_type; ALTER TABLE mpc_sessions ADD CONSTRAINT chk_session_type CHECK (session_type IN ('keygen', 'sign', 'co_managed_keygen')); --- Add comment for the new columns +-- Add comment for the new columns (safe to run multiple times) COMMENT ON COLUMN mpc_sessions.wallet_name IS 'Wallet name for co-managed wallet sessions'; COMMENT ON COLUMN mpc_sessions.invite_code IS 'Invite code for co-managed wallet sessions - used for participants to join';