关于 supabase
此技能通过管理 API 在 Supabase 项目中执行 SQL,并提供环境选择与安全指导,适用于查询、架构变更、策略、存储元数据和迁移。
主要功能
- 01管理命名连接环境
- 02执行 SQL 字符串和文件
- 03使用项目管理 API 权限
- 04以 JSON 查看查询结果
- 05遵循破坏性变更安全措施
- 06参考 SQL 示例手册
适用场景
- 01查询指定环境中的数据
- 02修改数据库架构或策略
- 03从文件执行迁移
- 04检查存储元数据或数据库架构
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ jawwadfirdousi/ agent-skills --skill supabase安装后在 Claude Code 中输入/supabase确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
.gitignoreenvironments.example.jsonreferences/sql-cookbook.mdscripts/supabase.sh详细介绍
Supabase
通过管理 API 对 Supabase 项目运行 SQL:查询数据、修改架构(DDL)、管理策略(RLS)、存储元数据和迁移。SQL 以管理 API 权限运行,因此应将其视为管理员级数据库访问。
所有操作都通过一个脚本 scripts/supabase.sh 完成,该脚本有三个命令:
env— 管理连接环境(存储在environments.json中)sql— 运行 SQL 字符串sql-file— 运行文件中的 SQL
环境
每个环境都是 environments.json 中的一个命名条目(已加入 gitignore,权限为 chmod 600),其中包含 url 和可选的 access_token。使用 env 子命令管理环境:
# List configured envs (tokens masked)
scripts/supabase.sh env list
# Add an env (--url required; --access-token and --description optional)
scripts/supabase.sh env add dev --url https://<dev-ref>.supabase.co --access-token sbp_...
scripts/supabase.sh env add prod --url https://<prod-ref>.supabase.co --description "Production"
# Update one or more fields on an existing env
scripts/supabase.sh env update dev --url https://<new-ref>.supabase.co --access-token sbp_...
# Inspect one env: human (default), json, or shell export
scripts/supabase.sh env get dev
scripts/supabase.sh env get dev --format json
scripts/supabase.sh env get dev --format export
# Remove an env (refused if it is the only one)
scripts/supabase.sh env remove prod
# Verify at least one env is configured (non-zero exit otherwise)
scripts/supabase.sh env check
脚本强制执行以下规则:
env add需要--url;环境名称必须唯一。- 如果只剩一个环境,
env remove将拒绝删除。 - 访问令牌是机密信息。如果环境中未存储令牌,则使用 shell 中的
SUPABASE_ACCESS_TOKEN。 - 脚本会从技能根目录读取
environments.json;如果该文件已存在于~/.config/claude/supabase-environments.json,则从该处读取。
如果脚本报告 no environments configured 或 SUPABASE_URL not set,则表示用户尚未完成设置:运行 env add 创建第一个环境,或引导用户查看自述文件。
选择环境
使用 --env <name> 为每条命令指定环境。解析顺序如下:
1) --env <name> set -> use that env from environments.json
2) SUPABASE_URL + TOKEN exported -> use those exported values
3) exactly one env configured -> use it (--env optional)
4) multiple envs, none named -> error: pass --env <name>
当用户指定环境(“在 prod 中”“在 dev 上”)时,传入 --env <name>。如果存在多个环境,而用户未指定其中一个,则在运行前询问要使用哪个环境。
运行 SQL
# Run a SQL string
scripts/supabase.sh sql --env dev "SELECT * FROM users LIMIT 5"
scripts/supabase.sh sql --env prod "SELECT count(*) FROM users"
scripts/supabase.sh sql --env dev "INSERT INTO users (name, email) VALUES ('Alice', '[email protected]')"
# Run SQL from a file (prefer for long or multi-statement SQL)
scripts/supabase.sh sql-file --env dev ./migrations/001_init.sql
- 为 SQL 加上引号。转义内部的双引号(例如策略名称:
\"items_read_own\")。 sql会将整个字符串作为一条查询发送,因此多个以;分隔的语句会一起运行。- 包含
$的 SQL —— 美元引用的函数/触发器主体($$ … $$)或位置参数($1)—— 必须通过sql-file运行。在双引号括起的sql参数中,shell 会展开$$(替换为其 PID)和$1,导致语句被破坏。文件内容会原样发送,因此sql-file是安全的。
读取输出
输出是原始管理 API JSON,并通过 jq 处理:
- 查询成功时,会以 JSON 形式返回结果(
SELECT返回行对象数组)。 - 查询被拒绝时,会返回包含
message字段的对象,例如{"message": "syntax error at or near ..."}。可通过检查是否只有一个message键来判断失败——即使 SQL 被拒绝,HTTP 调用通常仍会成功(退出码也通常如此)。
安全
这些命令以管理 API(管理员)权限运行,因此错误语句可能会删除数据或破坏线上项目。运行前:
- 对破坏性语句向用户确认 —
DROP、TRUNCATE,以及任何不带WHERE子句的DELETE/UPDATE— 尤其是针对生产环境时。 - 确认写入的目标环境。 如果配置了多个环境,且请求涉及写入或 DDL,则在运行前确认要使用哪个环境(
--env <name>);不要让写入操作回退到自动选择的环境。 - 先进行只读探索。 在修改数据和架构前,优先使用
SELECT ... LIMIT检查数据和架构。 - 确保迁移具有原子性。 将多步修改用
BEGIN; ... COMMIT;包裹(通过sql-file),以便中途失败时回滚。请注意,CREATE INDEX CONCURRENTLY不能在事务中运行,应作为独立语句运行。 - 确保迁移可以重复运行。 优先使用
CREATE TABLE IF NOT EXISTS、CREATE OR REPLACE、ADD COLUMN IF NOT EXISTS和DROP ... IF EXISTS。
SQL 参考
有关涵盖 DDL、索引、枚举类型、视图、函数/RPC、触发器、RLS、数据模式(upsert、JSONB)、pgvector 相似度搜索、存储和架构自省的现成示例,请参阅 references/sql-cookbook.md。