pg_llm

Text2SQL 设计文档(v1.1)

1. 目标

pg_llm 的 Text2SQL 能力将自然语言问题转换为 SQL,并在 PostgreSQL 内执行,支持可选向量增强与结构化可观测输出。

主要接口:

2. 执行流水线

核心实现入口:src/pg_llm.cpp 中的 build_text2sql_json_internal(...)

步骤 1:上下文组装

步骤 2:可选向量召回

use_vector_search = true 时:

向量相关表为 _pg_llm_catalog.pg_llm_vectors,字段已统一:

步骤 3:SQL 生成

步骤 4:SQL 执行与分析

步骤 5:可观测落库

3. 输入契约

pg_llm_text2sql_json(instance_name, prompt, schema_info, use_vector_search, options)

当前实现识别的 options 键:

4. 输出契约(jsonb

典型结构:

{
  "request_id": "uuid",
  "instance_name": "model-instance",
  "prompt": "show latest 10 orders",
  "generated_sql": "SELECT ...",
  "execution": {
    "status": "SPI_OK_SELECT",
    "row_count": 10,
    "columns": ["id", "created_at"],
    "rows": [{"id": "1", "created_at": "..."}],
    "explain": ["Seq Scan on ..."]
  },
  "similar_queries": ["..."],
  "vector_hits": [
    {
      "table_name": "orders",
      "column_name": "note",
      "row_id": 123,
      "similarity": 0.91,
      "metadata": {"source": "..."}
    }
  ]
}

pg_llm_text2sql(...) 仅返回 generated_sql,用于兼容历史调用。

5. 错误语义

以下场景会抛 PostgreSQL 错误(ereport(ERROR)):

6. 安全说明

7. 构建与发布