← ClaudeAtlas

db-migrationlisted

建立 Supabase migration,確保符合安全規範
YuDefine/nuxt-supabase-starter · ★ 45 · API & Backend · score 76
Install: claude install-skill YuDefine/nuxt-supabase-starter
<!-- 🔒 LOCKED — managed by clade Source: plugins/hub-core/commands/db-migration.md Edit at: <clade-central-repo> Local edits will be reverted by the next sync. --> ## User Input ```text $ARGUMENTS ``` ## Outline 建立新的 Supabase migration,確保符合 AGENTS.md 中的所有規範。 ### Step 1: 確認需求 詢問使用者要建立什麼樣的 migration: - 新增表格? - 修改欄位? - 建立函式? - 新增 RLS 政策? ### Step 2: 建立 Migration 檔案 使用 Supabase CLI 建立 migration(**禁止手動建立 .sql 檔案**): ```bash supabase migration new <description_in_snake_case> ``` ### Step 3: 撰寫 Migration 內容 根據需求撰寫 SQL,**必須遵守以下規範**: #### 函式規範(CRITICAL) ```sql -- ✅ 正確:search_path 必須是空字串 CREATE OR REPLACE FUNCTION schema_name.function_name() RETURNS return_type LANGUAGE plpgsql SECURITY DEFINER SET search_path = '' -- 必須是空字串! AS $$ BEGIN -- 使用完整路徑:schema_name.table_name SELECT * FROM core.users WHERE id = auth.uid(); END; $$; ``` ```sql -- ❌ 禁止:任何其他 search_path 值 SET search_path = public, pg_temp -- 絕對禁止! SET search_path = public -- 禁止! ``` #### Schema 規範 - 使用正確的 schema 前綴(如 `public.`、`core.`,或專案自訂業務 schema) - 所有表格/函式引用使用完整路徑(避免裸表名觸發 `search_path` resolution) ### Step 4: 本地測試與類型產生(自動) 依序執行以下步驟,任何步驟失敗則停止並顯示錯誤。**MUST** 透過 package.json 偵測 consumer 是用本機 Docker Supabase 還是遠端 LXC(via `pnpm db:*` wrapper)。 ```bash # 從 package.json 讀 types 路徑(若有自訂);fallback 到 conventional locations # 避開頂層 return(Node script 不允許)— 用 if/else 與 .find() TYPES=$(node -e " const fs = require('fs'); const pkg = require('./package.json'); const custom = pkg.config && pkg.con