名称: supabase
描述: 连接 Supabase 以进行数据库操作、向量搜索和存储管理。适用于数据存储、执行 SQL 查询、使用 pgvector 进行相似性搜索以及管理数据表。当请求涉及数据库、向量存储、嵌入或 Supabase 时触发。
元数据: {"clawdbot":{"requires":{"env":["SUPABASE_URL","SUPABASE_SERVICE_KEY"]}}}
与 Supabase 项目进行交互:执行查询、CRUD 操作、向量搜索及表管理。
# 必需
export SUPABASE_URL="https://yourproject.supabase.co"
export SUPABASE_SERVICE_KEY="eyJhbGciOiJIUzI1NiIs..."
# 可选:用于管理 API
export SUPABASE_ACCESS_TOKEN="sbp_xxxxx"
# SQL 查询
{baseDir}/scripts/supabase.sh query "SELECT * FROM users LIMIT 5"
# 插入数据
{baseDir}/scripts/supabase.sh insert users '{"name": "John", "email": "john@example.com"}'
# 带条件筛选查询
{baseDir}/scripts/supabase.sh select users --eq "status:active" --limit 10
# 更新数据
{baseDir}/scripts/supabase.sh update users '{"status": "inactive"}' --eq "id:123"
# 删除数据
{baseDir}/scripts/supabase.sh delete users --eq "id:123"
# 向量相似性搜索
{baseDir}/scripts/supabase.sh vector-search documents "搜索查询" --match-fn match_documents --limit 5
# 列出所有表
{baseDir}/scripts/supabase.sh tables
# 查看表结构
{baseDir}/scripts/supabase.sh describe users
{baseDir}/scripts/supabase.sh query "<SQL>"
# 示例
{baseDir}/scripts/supabase.sh query "SELECT COUNT(*) FROM users"
{baseDir}/scripts/supabase.sh query "CREATE TABLE items (id serial primary key, name text)"
{baseDir}/scripts/supabase.sh query "SELECT * FROM users WHERE created_at > '2024-01-01'"
{baseDir}/scripts/supabase.sh select <table> [options]
选项:
--columns <cols> 逗号分隔的列名(默认:*)
--eq <col:val> 等于筛选(可多次使用)
--neq <col:val> 不等于筛选
--gt <col:val> 大于
--lt <col:val> 小于
--like <col:val> 模式匹配(使用 % 作为通配符)
--limit <n> 结果数量限制
--offset <n> 结果偏移量
--order <col> 排序字段
--desc 降序排列
# 示例
{baseDir}/scripts/supabase.sh select users --eq "status:active" --limit 10
{baseDir}/scripts/supabase.sh select posts --columns "id,title,created_at" --order created_at --desc
{baseDir}/scripts/supabase.sh select products --gt "price:100" --lt "price:500"
{baseDir}/scripts/supabase.sh insert <table> '<json>'
# 单行插入
{baseDir}/scripts/supabase.sh insert users '{"name": "Alice", "email": "alice@test.com"}'
# 多行插入
{baseDir}/scripts/supabase.sh insert users '[{"name": "Bob"}, {"name": "Carol"}]'
{baseDir}/scripts/supabase.sh update <table> '<json>' --eq <col:val>
# 示例
{baseDir}/scripts/supabase.sh update users '{"status": "inactive"}' --eq "id:123"
{baseDir}/scripts/supabase.sh update posts '{"published": true}' --eq "author_id:5"
{baseDir}/scripts/supabase.sh upsert <table> '<json>'
# 示例(需要唯一约束)
{baseDir}/scripts/supabase.sh upsert users '{"id": 1, "name": "Updated Name"}'
{baseDir}/scripts/supabase.sh delete <table> --eq <col:val>
# 示例
{baseDir}/scripts/supabase.sh delete sessions --lt "expires_at:2024-01-01"
{baseDir}/scripts/supabase.sh vector-search <table> "<query>" [options]
选项:
--match-fn <name> RPC 函数名(默认:match_<table>)
--limit <n> 结果数量(默认:5)
--threshold <n> 相似度阈值 0-1(默认:0.5)
--embedding-model <m> 查询嵌入模型(默认:使用 OpenAI)
# 示例
{baseDir}/scripts/supabase.sh vector-search documents "如何设置身份验证" --limit 10
# 需要预先创建匹配函数,例如:
# CREATE FUNCTION match_documents(query_embedding vector(1536), match_threshold float, match_count int)
{baseDir}/scripts/supabase.sh tables
{baseDir}/scripts/supabase.sh describe <table>
{baseDir}/scripts/supabase.sh rpc <function_name> '<json_params>'
# 示例
{baseDir}/scripts/supabase.sh rpc get_user_stats '{"user_id": 123}'
CREATE EXTENSION IF NOT EXISTS vector;
CREATE TABLE documents (
id bigserial PRIMARY KEY,
content text,
metadata jsonb,
embedding vector(1536)
);
CREATE OR REPLACE FUNCTION match_documents(
query_embedding vector(1536),
match_threshold float DEFAULT 0.5,
match_count int DEFAULT 5
)
RETURNS TABLE (
id bigint,
content text,
metadata jsonb,
similarity float
)
LANGUAGE plpgsql
AS $$
BEGIN
RETURN QUERY
SELECT
documents.id,
documents.content,
documents.metadata,
1 - (documents.embedding <=> query_embedding) AS similarity
FROM documents
WHERE 1 - (documents.embedding <=> query_embedding) > match_threshold
ORDER BY documents.embedding <=> query_embedding
LIMIT match_count;
END;
$$;
CREATE INDEX ON documents
USING ivfflat (embedding vector_cosine_ops)
WITH (lists = 100);
| 变量名 | 是否必需 | 描述 |
|---|---|---|
| SUPABASE_URL | 是 | 项目 URL(格式:https://xxx.supabase.co) |
| SUPABASE_SERVICE_KEY | 是 | 服务角色密钥(拥有完全访问权限) |
| SUPABASE_ANON_KEY | 否 | 匿名密钥(受限访问权限) |
| SUPABASE_ACCESS_TOKEN | 否 | 管理 API 令牌 |
| OPENAI_API_KEY | 否 | 用于生成嵌入向量 |