Community写作与编辑github.com

tablestudioapp/plugins

如何安全地通过 TableStudio 读取和更改项目的数据库。适用于任何涉及真实数据库的任务:查询或检查数据、调查数据错误、修复或回填行、种子数据、添加或更改表、列、索引或约束、编写或审查迁移、或运行 SQL。也适用于你本应使用 psql、mysql、sqlite3、wrangler d1 execute、DATABASE_URL 或自行建立连接的一次性脚本的场景。

plugins 是什么?

此技能(插件)将 TableStudio(Mac 上的数据库应用)的 MCP 工具集成到 AI 助手中,让您能通过已保存的连接安全地与数据库交互,无需暴露凭据。与原始 psql 会话不同,它提供写操作的精确预演、一次性沙箱副本以及审批收件箱等安全防护。技能涵盖完整的数据库工作流程:通过连接列表和会话笔记发现正确的数据库;通过模式搜索和只读查询进行调查;通过预演或 SELECT 计数方式安全执行 INSERT/UPDATE/DELETE;指导变更通过迁移工具或暂存机制(staging)进行;以及通过比较模式和数据检查来验证迁移以防范部署失败。它强制实施安全策略,如预演、行数期望和暂存审批,特别是针对生产环境。该技能适用于 Claude Code、Cursor、Codex 等支持 MCP 的客户端,并且一旦 TableStudio 应用打开并运行其 MCP 服务器,即自动可用。

兼容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/tablestudioapp/plugins/tree/HEAD/tablestudio/skills/database-workflow

Installed? Explore more 写作与编辑 skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

通过 TableStudio 使用数据库

TableStudio 是用户在 Mac 上的数据库应用。它的 MCP 工具可以不通过凭据访问用户已保存的连接,并且带有原始 psql 会话所没有的安全网:对真实行的精确写操作预演、可丢弃的沙箱副本,以及一个让用户审批更改的审查收件箱。请使用这些工具进行数据库工作,而不是使用 psql、mysql、sqlite3 或自行建立连接的脚本。

以下工具名称是 TableStudio 的。你的客户端可能会带前缀显示它们(在 Claude Code 中:mcp__plugin_tablestudio_tablestudio__list_connections)。如果它们是延迟加载的,请在首次调用前按该名称加载它们。

1. 在操作之前找到正确的数据库

会话的 数据库上下文 备注(来自 TableStudio 插件)通常会指出仓库中每个数据库设置背后的 TableStudio 连接,包括其 ID 和环境。使用该 ID 作为 connection_id。该备注也会说明 TableStudio 工具何时不可用以及用户应如何处理。

如果没有该备注,或者针对它未命名的数据库:

  1. 调用 list_connections。每个连接可能携带用户告知 TableStudio 的信息:
    • project:它所属的项目。优先选择项目与你正在处理的仓库匹配的连接。
    • environment:development、staging 或 production。缺失表示未标记,而非 development。
    • read_only:TableStudio 拒绝写入该数据库。Staging 仍可工作。
    • location:local(此 Mac)、remote 或 sandbox(可丢弃副本,安全可用于实验)。
    • agent_writes:direct 意味着 execute_query 可能在那里写入(当写入开启时);review 意味着每个更改都会通过 stage_migration 供用户应用。TableStudio 决定此设置,而不是你:生产环境以及任何用户未标记为 development 或 staging 的远程数据库都是 review。
    • notes:用户关于数据库约定的备注(软删除、金额以分为单位、命名)。请遵循它们。
  2. 首先匹配项目,然后通过 host、port 和 database 与项目自身的设置(.env、config)进行确认。
  3. 如果两个连接都可能是用户所指的,或者你无法判断其中一个是否为生产环境,请询问。不要猜测。

然后:

  • 在计划任何超出读取范围的操作之前,先调用 describe_capabilities 一次。它会说明当前是否允许直接写入、暂存和沙箱,并指出每个功能背后的设置。请据此进行规划,而不是在请求被拒绝时才得知限制。
  • agent_writes: review(生产环境,或远程且未标记)意味着永远不要直接写入:将更改暂存以供审查。TableStudio 会在那里拒绝直接写入,因此从一开始就规划暂存。
  • 在编写 SQL 之前检查 engine(postgres、mysql、sqlite、d1、clickhouse),并编写该方言的 SQL。
  • 未保存在 TableStudio 中的数据库无法通过其工具访问。请用户将其添加到 TableStudio。绝不要在聊天中索要密码。
  • 如果调用因数据库不可达而失败,请调用 connection_status。当它指出本地服务器已停止时,请使用它提供的 instance_id 调用 start_local_database。

2. 读取和调查

  • 通过名称片段查找表或列,而不是猜测名称:search_schema 可查找表和列,get_table_ddl 提供完整结构、索引、外键和 referenced_by。
  • 使用 execute_query 运行读取。选择你需要的列、过滤、聚合,并限制 LIMIT。结果有上限(max_rows,默认 200),因此 truncated 的结果并非全部答案。
  • 读取操作在只读事务中运行,时限 30 秒,包括生产环境,因此即使通过函数也无法更改数据。仍然请保持廉价:在大型生产表上,请过滤索引列或使用 database_overview 的行估算值,而不是使用 count(*)。
  • 数据错误: 首先在数据中重现它。找到错误的行,对其计数,并找到它们开始出现的时间(min(created_at))。然后读取写入它们的代码。向用户展示证明该问题的查询。修复代码,如果行需要修复,则那是数据更改(第 3 节)。
  • 切勿将机密、密码或连接字符串粘贴到 SQL、代码、文档或聊天中。连接字符串唯一应去的地方是项目 gitignore 的 env 文件,用于本地数据库(本地数据库技能涵盖了 get_connection_url)。

3. 更改数据 (INSERT, UPDATE, DELETE)

在 PostgreSQL 上:

  1. 编写语句,然后使用它调用 preflight_statement。你将获得一个 verdict(looks_fine、review 或 would_fail)、dry_run.rows(精确显示它将更改多少行,只读)、级联到其他表的内容,以及可能导致失败的原因。
  2. 用通俗的语言告诉用户它将做什么:“这将更新 invoices 中的 142 行;没有级联。” 如果 verdict 是 would_fail,请先修复语句。如果是 review,请解释原因。
  3. 然后要么:
    • agent_writes: direct,并且允许直接写入: 使用设置为 dry_run.rows 的 expected_rows 调用 execute_query。只有当恰好更改了那么多行时,它才会提交,否则会回滚。在远程 PostgreSQL 数据库上,TableStudio 拒绝没有 expected_rows 的数据更改。
    • agent_writes: review、不允许写入,或者任何用户应先看到的内容: 使用清晰的 title、SQL 和包含预演计数的 rationale(“通过...发现的 142 条重复发票作废”)调用 stage_migration。它会进入 TableStudio 代理中心的用户审查队列,并且不会运行。

在 其他引擎 上没有预演:首先运行一个带有相同 WHERE 条件的 SELECT count(*),报告计数,然后遵循相同的执行或暂存规则。

在对重要的数据库进行任何破坏性操作之前(大型 DELETE、DROP、TRUNCATE),当沙箱启用时,调用 create_restore_point,并告知用户你已这样做。

4. 更改模式

如果仓库使用迁移工具(Prisma、Drizzle、Rails、Django、Alembic、Laravel、Supabase、Knex、Ecto、TypeORM、Wrangler D1 或纯编号 SQL 文件;当插件检测到迁移工具时,会话上下文会命名它),则该更改属于该工具:

  1. 以该工具的方式进行更改:编辑模式并生成迁移,或编写迁移文件。
  2. 将该工具的开发命令应用到本地开发数据库。
  3. 对照真实数据检查它(见下文)。
  4. 将应用到其他环境的工作留给用户正常的部署流程。切勿亲自针对生产环境运行该工具的部署命令。

在迁移工具拥有模式所有权时直接运行 ALTER TABLE 会使工具的历史记录与数据库不同步,从而破坏下一次部署。

如果没有迁移工具,或者用户要求对现有数据库进行一次性更改:

  1. 首先使用 get_table_ddl 读取表。在删除或重命名任何内容之前,检查 referenced_by。
  2. 在副本上尝试:create_sandbox(data:none 仅模式,sample 获取真实行的切片),使用 execute_query 在沙箱的连接上运行 DDL,并检查它是否符合你的意图。
  3. 使用 compare_schemas 显示差异(沙箱作为 source_connection_id,真实数据库作为 target_connection_id)。
  4. 在真实连接上使用 stage_migration 提出更改。用户在 TableStudio 中应用它。

对照真实数据检查迁移

在本地数据库上通过的迁移,在真实行所在的环境仍可能失败或锁定应用程序。在您认为迁移完成之前,请以只读方式对照它将部署到的数据库(通常是 staging 或 production,来自会话备注或 list_connections)进行检查:

  1. 对于它更改的每个表,运行 get_table_ddl:获取行数、索引以及引用它的内容。

  2. 对于它添加的每个约束,使用 execute_query 运行 SELECT 来查找会破坏它的行:

    • NOT NULL:SELECT count(*) FROM t WHERE col IS NULL
    • UNIQUE:SELECT col, count(*) FROM t GROUP BY col HAVING count(*) > 1 LIMIT 20
    • 外键:父行不存在的子行(LEFT JOIN … WHERE parent.id IS NULL)
    • CHECK,或更窄的类型或长度:超出新范围的行

    任何行都意味着部署会失败。向迁移添加回填或清理步骤,并加以说明。

  3. 在 PostgreSQL 上,标记锁定或重写大表的步骤(见下文),并切换到安全模式。

  4. 当更改很棘手时,在副本上实际运行它:从该连接创建 `data:

相关技能