pg_llm 的 Text2SQL 能力将自然语言问题转换为 SQL,并在 PostgreSQL 内执行,支持可选向量增强与结构化可观测输出。
主要接口:
pg_llm_text2sql(...) returns text(兼容旧接口)pg_llm_text2sql_json(...) returns jsonb(结构化主接口)核心实现入口:src/pg_llm.cpp 中的 build_text2sql_json_internal(...)。
ModelManager 获取模型实例。options 到 Text2SQLConfig。schema_info,或Text2SQL::get_schema_info() 自动获取。当 use_vector_search = true 时:
Text2SQL::search_vectors(prompt) 召回相关向量命中。Text2SQL::get_similar_queries(prompt) 召回相似 NL-SQL 样例。向量相关表为 _pg_llm_catalog.pg_llm_vectors,字段已统一:
query_vector(向量列)table_name、column_name、row_id、metadataText2SQL::generate_statement(prompt, schema, vector_hits, similar_queries)。generated_sql)。EXPLAIN <sql>,并返回计划文本(execution.explain)。pg_llm_audit_log 写入审计记录(event_type = text2sql)。pg_llm_trace_log 写入完整追踪信息。request_id 关联全链路。pg_llm_text2sql_json(instance_name, prompt, schema_info, use_vector_search, options)
instance_name text:已注册模型实例名prompt text:自然语言问题schema_info text default NULL:可选 schema JSON 覆盖use_vector_search bool default true:是否开启向量增强options jsonb:运行时参数当前实现识别的 options 键:
enable_cachecache_ttl_secondsparallel_processingmax_parallel_threadssimilarity_thresholdsample_data_limitjsonb)典型结构:
{
"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,用于兼容历史调用。
以下场景会抛 PostgreSQL 错误(ereport(ERROR)):
schema_info/options JSON 非法pg_llm.redact_sensitive 脱敏策略。contrib/pg_llm/CMakeLists.txt)。sql/pg_llm--1.1.sql。sql/pg_llm--1.0--1.1.sql。