OA0 = Omni AI 0
OA0 是一个探索 AI 的论坛
现在注册
已注册用户请  登录
OA0  ›  技能包  ›  supabase:连接 Supabase 进行数据库操作、向量搜索与云存储存储

supabase:连接 Supabase 进行数据库操作、向量搜索与云存储存储

 
  server ·  2026-02-25 07:34:24 · 2 次点击  · 0 条评论  

名称: supabase
描述: 连接 Supabase 以进行数据库操作、向量搜索和存储管理。适用于数据存储、执行 SQL 查询、使用 pgvector 进行相似性搜索以及管理数据表。当请求涉及数据库、向量存储、嵌入或 Supabase 时触发。
元数据: {"clawdbot":{"requires":{"env":["SUPABASE_URL","SUPABASE_SERVICE_KEY"]}}}


Supabase CLI

与 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

命令详解

query - 执行原始 SQL

{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'"

select - 带筛选条件的表查询

{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"

insert - 插入行数据

{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"}]'

update - 更新行数据

{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"

upsert - 插入或更新

{baseDir}/scripts/supabase.sh upsert <table> '<json>'

# 示例(需要唯一约束)
{baseDir}/scripts/supabase.sh upsert users '{"id": 1, "name": "Updated Name"}'

delete - 删除行数据

{baseDir}/scripts/supabase.sh delete <table> --eq <col:val>

# 示例
{baseDir}/scripts/supabase.sh delete sessions --lt "expires_at:2024-01-01"

vector-search - 使用 pgvector 进行相似性搜索

{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)

tables - 列出所有表

{baseDir}/scripts/supabase.sh tables

describe - 显示表结构

{baseDir}/scripts/supabase.sh describe <table>

rpc - 调用存储过程

{baseDir}/scripts/supabase.sh rpc <function_name> '<json_params>'

# 示例
{baseDir}/scripts/supabase.sh rpc get_user_stats '{"user_id": 123}'

向量搜索配置指南

1. 启用 pgvector 扩展

CREATE EXTENSION IF NOT EXISTS vector;

2. 创建包含嵌入列的表

CREATE TABLE documents (
  id bigserial PRIMARY KEY,
  content text,
  metadata jsonb,
  embedding vector(1536)
);

3. 创建相似性搜索函数

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;
$$;

4. 创建索引以提升性能

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 用于生成嵌入向量

注意事项

  • 服务角色密钥会绕过行级安全策略(RLS)
  • 客户端或受限访问场景请使用匿名密钥
  • 向量搜索功能需要 pgvector 扩展支持
  • 嵌入向量默认使用 OpenAI 的 text-embedding-ada-002 模型(1536 维)
2 次点击  ∙  0 人收藏  
登录后收藏  
目前尚无回复
0 条回复
About   ·   Help   ·    
OA0 - Omni AI 0 一个探索 AI 的社区
沪ICP备2024103595号-2
Developed with Cursor