fix(migration): 使迁移脚本幂等以支持重试
迁移脚本添加 IF NOT EXISTS 检查,避免重复执行时失败 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
929ae335c5
commit
500e4381a6
|
|
@ -1,16 +1,44 @@
|
|||
-- AlterTable: Add contract_no column to contract_signing_tasks
|
||||
-- 合同编号格式: accountSequence-yyyyMMddHHmm (例如: 10001-202512251003)
|
||||
|
||||
-- 1. 首先添加可空的 contract_no 列
|
||||
ALTER TABLE "contract_signing_tasks" ADD COLUMN "contract_no" VARCHAR(30);
|
||||
-- 1. 首先添加可空的 contract_no 列(如果不存在)
|
||||
DO $$
|
||||
BEGIN
|
||||
IF NOT EXISTS (
|
||||
SELECT 1 FROM information_schema.columns
|
||||
WHERE table_name = 'contract_signing_tasks'
|
||||
AND column_name = 'contract_no'
|
||||
) THEN
|
||||
ALTER TABLE "contract_signing_tasks" ADD COLUMN "contract_no" VARCHAR(30);
|
||||
END IF;
|
||||
END $$;
|
||||
|
||||
-- 2. 为现有记录生成合同编号(基于 account_sequence 和 created_at)
|
||||
UPDATE "contract_signing_tasks"
|
||||
SET "contract_no" = "account_sequence" || '-' || TO_CHAR("created_at", 'YYYYMMDDHH24MI')
|
||||
WHERE "contract_no" IS NULL;
|
||||
|
||||
-- 3. 设置为 NOT NULL
|
||||
ALTER TABLE "contract_signing_tasks" ALTER COLUMN "contract_no" SET NOT NULL;
|
||||
-- 3. 设置为 NOT NULL(如果还不是)
|
||||
DO $$
|
||||
BEGIN
|
||||
IF EXISTS (
|
||||
SELECT 1 FROM information_schema.columns
|
||||
WHERE table_name = 'contract_signing_tasks'
|
||||
AND column_name = 'contract_no'
|
||||
AND is_nullable = 'YES'
|
||||
) THEN
|
||||
ALTER TABLE "contract_signing_tasks" ALTER COLUMN "contract_no" SET NOT NULL;
|
||||
END IF;
|
||||
END $$;
|
||||
|
||||
-- 4. 添加唯一索引
|
||||
CREATE UNIQUE INDEX "contract_signing_tasks_contract_no_key" ON "contract_signing_tasks"("contract_no");
|
||||
-- 4. 添加唯一索引(如果不存在)
|
||||
DO $$
|
||||
BEGIN
|
||||
IF NOT EXISTS (
|
||||
SELECT 1 FROM pg_indexes
|
||||
WHERE tablename = 'contract_signing_tasks'
|
||||
AND indexname = 'contract_signing_tasks_contract_no_key'
|
||||
) THEN
|
||||
CREATE UNIQUE INDEX "contract_signing_tasks_contract_no_key" ON "contract_signing_tasks"("contract_no");
|
||||
END IF;
|
||||
END $$;
|
||||
|
|
|
|||
Loading…
Reference in New Issue