超市数据库REST API服务

基于PostgreSQL 17的零售/超市数据库系统,提供PostgREST即时REST API和MCP兼容的postgres-mcp服务,支持一键启动,适用于数据分析、原型设计和API实验。

  • by ks250206
  • PLpgSQL
  • 混合部署
  • 更新于
在 GitHub 查看 ks250206/postgres_rest_mcp_demo

使用说明

超市REST堆栈

PostgreSQL 17 基于的零售/超市数据库PostgREST 即席REST API、然后MCP 支持的 postgres-mcp 的构成。模式、样本数据、应用程序用角色被自动投入,所以分析、原型API 可以作为实验的基础。

构成

|服务|角色|端口| | --------------- | ------------------------------------------------------------ | ------ | | postgres 模式/种子已投入PostgreSQL 17 | 5432 | | postgres-mcp | PostgreSQL 的MCP(Server-Sent Events) 桥接服务\u0026#8000\u0026# | postgrest_api | PostgREST(devel) 根据REST API | 3000 |

目录

├── compose.yml                # docker compose 定義
├── data/                      # 永続化される PGDATA(初回起動時に自動生成)
└── postgres/
    ├── postgresql.conf        # 任意の追加設定(空のままでも可)
    └── initdb.d/
        ├── 1_schema.sql       # スキーマ・テーブル定義
        ├── 2_seed.sql         # マスタ / トランザクションのシードデータ
        └── 3_roles.sql        # アプリケーションロールと権限

必要要件

  • Docker 24.x 以降
  • Docker Compose V2(docker compose 可以使用命令)

快速启动

  1. 根据需要调整环境变量(如果未更改) cp .env.example .env 中所述修改相应参数的值。

    cp .env.example .env
    
  2. 在存储库正下方启动容器。

    docker compose -f compose.yml up -d
    
  3. 等待直到通过健康检查(postgres 的healthy 到了…的时候 postgres-mcp 和 postgrest_api 来定义自定义外观。

    docker compose ps
    
  4. PostgREST 对较大场景进行渲染期间已观察到该故障。

    curl "http://localhost:3000/products?select=*"
    
    curl "http://localhost:3000/stock_levels" \
    -H "Accept-Profile: inventory"
    

    默认连接信息: postgresql://appuser:secret@localhost:5432/supermarket_db

架构概述

  • master 架构: categories, suppliers, products, stores, employees, customers
  • transactions 架构: purchases, sales, sale_items
  • inventory 架构: stock_levels 和销售后减少库存的触发器 inventory.update_stock_on_sale

样本数据 2_seed.sql 投入PostgREST 等已弃用的函数的缺少的支持。

环境变数

.env 准备好的话 compose.yml 的,之 ${POSTGRES_*} 自动加载变量(docker compose 啊 .env ),模板名称将采用不同的格式。

|变量|角色|默认| | ------------------- | ------------------------------------------------ | ---------------- | | POSTGRES_USER | DB 管理用户(postgres 服务superuser) | postgres | | POSTGRES_PASSWORD 上述用户的密码 password | | POSTGRES_DB |初始创建DB 名称(架构种子目标)| supermarket_db |

PostgREST / MCP 查看项目中可用的所有族 DATABASE_URI 啊 PGRST_DB_URI 是以这些值为基础组装的。更改值时 data/ 请删除目录,然后重新创建。

PostgREST / MCP 利用期间

PostgREST

  • 端点: http://localhost:3000
  • 目标方案: master,transactions,inventory
  • 连接角色: appuser(3_roles.sql 的CRUD 已授予权限)
  • 例: curl "http://localhost:3000/transactions.sales?select=sale_id,total_amount" 获得销售一览表

postgres mcp(mcp詳細)

  • SSE 端点: http://localhost:8000/sse
  • 内部接続: DATABASE_URI=postgresql://appuser:secret@postgres:5432/${POSTGRES_DB}(Compose 内部网络解决)
  • 访问模式:Compose 那么 --access-mode=unrestricted。如果要只读 compose.yml 命令 --access-mode=restricted 来删除它。
  • 传输: --transport=sse 因此Claude Desktop 啊VS Code MCP 客户端SSE 可以通过设置连接。

MCP 客户端设置示例

Claude Desktop 的,之 claude_desktop_config.json 中添加以下内容:SSE 的 postgres-mcp 中所述修改相应参数的值。

{
  "mcpServers": {
    "supermarket-db": {
      "transport": "sse",
      "url": "http://localhost:8000/sse"
    }
  }
}

连接后MCP 客户端发布 list_tables, describe_table, run_sql 等动作(实施为 postgres-mcp 通过形象)PostgreSQL 中所述修改相应参数的值。SSE 经过DB 的规格化距离的幂函数restricted 而需要与环境混合的每条反射光线,进行环境采样。

常用命令

# ログ確認
docker compose logs -f postgres

# サービス停止
docker compose down

# すべてのボリュームも削除
docker compose down -v

重置数据

如果要重新初始化数据 data/ 删除目录,然后再次 docker compose up 中所述修改相应参数的值。现有的 data/ 剩下的话 initdb.d 的,之SQL 不会重新运行。

rm -rf data
docker compose -f compose.yml up -d

故障排除

  • postgres 无法启动/ exit code 1: data/ 中描述的场景,使用以下步骤创建明细表,以便在概念设计中分析体量的体积。请在备份后删除并重新启动。
  • PostgREST 返回401: PGRST_DB_URI 资格信息 appuser/secret 中所述修改相应参数的值。
  • 端口冲突: compose.yml 的,之 ports 您可以在节中将主机端端口更改为任意值。

许可证

本资料档案库MIT 在许可证下公开。