SuperAPI AI 工具集

pscale-sql

数据与分析

查看项目

更新于 10-16 07:31

技能介绍

用途

pscale sql 用于对 PlanetScale 数据库分支执行单条 SQL 查询,使用临时凭证连接。它主要面向代理(agents)和脚本,适合非交互式的自动化场景;如果需要进行交互式探索,官方建议改用 pscale shell。

主要能力

  • 执行单条 SQL 查询,支持机器可读输出,默认使用 reader 只读角色。
  • 支持从副本读取:--replica。
  • MySQL/Vitess 场景下可指定 keyspace:--keyspace。
  • PostgreSQL 或 Neki 场景下可指定数据库名:--dbname,默认数据库为 postgres。
  • 人类可读输出默认以表格展示,支持 --vertical 或查询末尾的 MySQL 风格 \G 以纵向方式呈现宽行结果;CLI 会在发送 SQL 前去除末尾的 \G 或 \g,\G 会启用纵向输出。JSON 仍是自动化场景的首选格式。
  • JSON 模式下的失败会返回结构化错误信封,应解析其中的机器可读 code/message 字段,而不是抓取带颜色的人类输出。

使用方式

常用命令示例:

# 只读查询,机器可读输出(默认角色为 reader)
pscale sql <database> <branch> --org <org> --format json --query "SELECT 1"

# 从副本读取
pscale sql <database> <branch> --org <org> --format json --replica --query "SELECT count(*) FROM users"

# MySQL/Vitess:需要时指定 keyspace
pscale sql <database> <branch> --org <org> --format json --keyspace <keyspace> --query "SELECT 1"

PostgreSQL 或 Neki 场景指定数据库名(默认 postgres):

pscale sql   --org  --format json --dbname app --query "SELECT 1"

人类可读输出示例:

pscale sql   --org  --query "SHOW VITESS_TABLETS"
pscale sql   --org  --vertical --query "SHOW REPLICA STATUS"
pscale sql   --org  --query "SHOW REPLICA STATUS\G"

标志应放在位置参数之后:

pscale sql <database> <branch> --org <org> --format json --query "SELECT 1"

角色与安全

  • 默认角色为 reader。
  • 仅当用户明确要求可写操作时,才使用 --role writer、--role readwriter 或 --role admin。
  • 包含 DELETE、DROP 或 TRUNCATE 的破坏性 SQL 会被拦截,除非传入 --force。该防护还会检测改写数据的 CTE,以及包裹破坏性语句的 EXPLAIN ANALYZE/EXPLAIN ANALYSE。MySQL 可执行注释(如 /*! DROP TABLE ... /)和按版本控制的 /!80000 DELETE ... */ 属于实际执行的 SQL,同样会被纳入安全检查,不应视为无效注释。
  • 代理在使用 --force 前必须获得用户明确批准,并先展示确切的查询语句和目标数据库/分支/组织。

可写操作与破坏性操作示例:

# 有意的非破坏性写入,使用可写角色
pscale sql <database> <branch> --org <org> --role admin --query "UPDATE users SET disabled = true WHERE id = 123"

# 破坏性操作:仅在用户明确批准后执行
pscale sql <database> <branch> --org <org> --role admin --force --query "DELETE FROM sessions WHERE expires_at < now()"

代理工作流

  1. 确认 <org>、<database>、<branch>、引擎上下文(Vitess/MySQL 还是 Postgres/Neki),以及查询是否为只读。
  2. 只读查询优先使用 --format json,并保持默认 reader 角色。
  3. 写操作前,与用户确认目标与确切的 SQL。
  4. 未经对确切破坏性查询的明确批准,绝不添加 --force。
  5. JSON 模式失败时解析结构化错误中的 code/message 字段。
  6. 返回简明摘要,并视情况附带行数/结果。

适用场景

  • 代理或脚本执行只读 SQL。
  • 收集数据、执行自动化查询。
  • 需要机器可读 JSON 输出的自动化流程。
  • 在获得明确批准的前提下执行受控的写操作。

连接与限制

  • 对于 PostgreSQL 和 Neki 目标,CLI 创建的临时连接默认使用 sslmode=verify-full;除非用户有具体且经批准的诊断理由需要在命令之外更改连接行为,否则应保留该验证。
  • Neki 使用 Postgres 风格的临时角色;新建的临时角色可能不会立即就绪,CLI 在连接前最多等待一分钟。
  • pscale sql 面向单条非交互式查询;交互式探索应使用 pscale shell。

参考

pscale sql --help 的当前输出见 references/commands.md。