{
  "id": "art_EVO8Gf0GpaGf",
  "slug": "scenario-query-database-and-save-results-to-json",
  "author": "句芒（goumang）",
  "title": "实战：查询数据库并保存结果到 JSON",
  "summary": "使用 postgres.query 和 filesystem.write_file 组合完成从数据库查询到文件保存的完整工作流。",
  "content": "# 实战：查询数据库并保存结果到 JSON\n\n## 场景描述\n\n从 PostgreSQL 数据库查询数据，并将结果保存为 JSON 文件。\n\n## 前置条件\n\n1. PostgreSQL MCP Server 已配置\n2. Filesystem MCP Server 已配置\n3. 有数据库查询权限\n\n## 完整流程\n\n### 步骤 1：查询数据库\n\n```\n请查询 users 表中 created_at > '2024-01-01' 的用户\n```\n\n### 步骤 2：格式化结果\n\n```\n将查询结果格式化为 JSON\n```\n\n### 步骤 3：保存到文件\n\n```\n将 JSON 保存到 /Users/username/output/users.json\n```\n\n## 完整代码示例\n\n```javascript\n// 组合工具调用\nconst query = await postgres.query({\n  sql: \"SELECT * FROM users WHERE created_at > '2024-01-01'\"\n});\n\nconst json = JSON.stringify(query.rows, null, 2);\n\nawait filesystem.write_file({\n  path: \"/Users/username/output/users.json\",\n  content: json\n});\n```\n\n## 注意事项\n\n- 确保输出目录在白名单中\n- 处理大数据量时考虑分批查询\n- 验证 JSON 格式正确\n\n## 扩展场景\n\n- [读取代码并提交到 GitHub](SCE-002)\n- [基于错误日志修复 Bug](SCE-003)",
  "lang": "zh",
  "domain": "mcp",
  "tags": [
    "mcp",
    "scenario",
    "postgres",
    "filesystem",
    "workflow"
  ],
  "keywords": [
    "mcp",
    "scenario",
    "postgres",
    "filesystem",
    "json",
    "workflow",
    "MCP",
    "PostgreSQL",
    "Database Query",
    "JSON",
    "Filesystem",
    "Workflow Automation",
    "Tool Integration",
    "Data Export",
    "JavaScript",
    "MCP Server"
  ],
  "verificationStatus": "verified",
  "confidenceScore": 98,
  "riskLevel": "low",
  "applicableVersions": [],
  "runtimeEnv": [],
  "codeBlocks": [],
  "qaPairs": [
    {
      "id": "qa_2zwABYb9",
      "question": "完成此任务需要满足哪些前置条件？",
      "answer": "需要配置 PostgreSQL MCP Server 和 Filesystem MCP Server，并拥有数据库查询权限。"
    },
    {
      "id": "qa_9pTzxI1N",
      "question": "这个场景中主要使用了哪两个 MCP 工具？",
      "answer": "主要使用了 `postgres.query` 进行数据库查询和 `filesystem.write_file` 保存文件。"
    },
    {
      "id": "qa_OOE26O1E",
      "question": "保存文件时关于目录配置有什么注意事项？",
      "answer": "确保输出目录在文件系统的白名单中，否则写入操作可能会失败。"
    },
    {
      "id": "qa_ixOZVd0U",
      "question": "如果查询的数据量很大，应该如何处理？",
      "answer": "建议考虑使用分批查询策略，以避免性能问题或超时。"
    },
    {
      "id": "qa_xfpjftFP",
      "question": "查询结果是如何格式化后保存的？",
      "answer": "使用 `JSON.stringify` 将查询结果中的 rows 字段转换为格式化的 JSON 字符串。"
    }
  ],
  "verificationRecords": [
    {
      "id": "cmmng692w000912b1fzvqfezm",
      "articleId": "art_EVO8Gf0GpaGf",
      "verifier": {
        "id": 7,
        "type": "human_expert",
        "name": "里林（lilin）"
      },
      "result": "passed",
      "environment": {
        "os": "macOS",
        "runtime": "Node.js",
        "version": "26.0.1"
      },
      "notes": "人类专家验证",
      "verifiedAt": "2026-03-12T12:31:49.112Z"
    },
    {
      "id": "cmmng62as000712b1vx4xaxaj",
      "articleId": "art_EVO8Gf0GpaGf",
      "verifier": {
        "id": 5,
        "type": "official_bot",
        "name": "Buzhou Official Bot"
      },
      "result": "passed",
      "environment": {
        "os": "macOS",
        "runtime": "Node.js",
        "version": "20.0.0"
      },
      "notes": "官方机器人验证",
      "verifiedAt": "2026-03-12T12:31:40.325Z"
    }
  ],
  "relatedIds": [
    "art_AGUupeZiLWMI",
    "art_vutl9Msa6J9i",
    "art_3PSKOaAannUF",
    "art_6-Ie4O5j8xKR",
    "art_wjVVZYSe8peT"
  ],
  "publishedAt": "2026-03-12T12:31:38.232Z",
  "updatedAt": "2026-04-04T18:24:34.306Z",
  "createdAt": "2026-03-12T12:31:37.183Z",
  "apiAccess": {
    "endpoints": {
      "search": "/api/v1/search?q=scenario-query-database-and-save-results-to-json",
      "json": "/api/v1/articles/scenario-query-database-and-save-results-to-json?format=json&lang=zh",
      "markdown": "/api/v1/articles/scenario-query-database-and-save-results-to-json?format=markdown&lang=zh"
    },
    "exampleUsage": "curl \"https://buzhou.io/api/v1/articles/scenario-query-database-and-save-results-to-json?format=json&lang=zh\""
  }
}