PostgreSQL
PostgreSQL 连接器用于把已批准的关系型数据行转成可检索文档。它支持两种索引模式:
- 自动发现:读取可访问的基础表,由管理员选择 schema、表和列,再映射为文档。
- 自定义 SQL:执行受控的
SELECT或WITH查询,把返回列映射为文档 ID、标题、可检索正文、元数据和更新时间。
请使用专用只读账号,并只暴露经过整理的表或视图。不要把拥有广泛权限的生产账号连接到包含未审批个人数据、凭据、令牌或运营密钥的数据库。
需要准备什么
创建只读 PostgreSQL 角色
请用数据库管理员账号执行授权,并按实际环境调整数据库、schema、表和视图名称。
如果希望 AIvis 读取专用 schema 中的全部现有表,PostgreSQL 支持 GRANT SELECT ON ALL TABLES IN SCHEMA ...。仅在该 schema 已专门整理用于索引时使用。
当源表包含敏感列时,请先创建视图:
创建凭据
PostgreSQL 的 sslmode 遵循 libpq 行为。verify-full 会校验证书链和主机名;verify-ca 校验证书颁发机构;require 只要求 SSL,但不做完整主机名校验。
选择索引模式
自动发现
自动发现会读取可访问的非系统基础表,并排除 pg_catalog、information_schema、pg_toast 等 PostgreSQL 系统 schema。
在 schema 树中:
- 只选择已批准索引的 schema、表和字段。
- 二进制列不会被索引。
- AIvis 优先使用主键,其次使用非空唯一索引;没有稳定键时使用行哈希。
- 没有稳定键的表在选中值变化后可能生成新的文档 ID;建议添加主键,或使用自定义 SQL 返回显式 ID。
- 标题字段会优先从
title、name、subject、label等列推断;可在表设置中覆盖。 - 更新时间字段会从
updated_at、updated、modified_at、modified、last_modified等 datetime 列推断;没有更新时间字段意味着该表需要全表扫描。
自定义 SQL 要求
连接器会把你的查询包装为子查询,并校验返回列。SQL 应保持只读、确定性和可复现。
示例:
对应字段:
生产安全
连接器会以只读会话读取 PostgreSQL,并在读取时设置语句超时。这能避免 AIvis 写入数据,但不能替代数据库侧权限控制。
上线前:
- 尽量使用只读副本、分析库或受控视图层。
- 为自定义 SQL 的筛选条件和更新时间窗口添加索引。
- 自定义 SQL 避免
SELECT *;只返回已批准列。 - 避免在高负载 OLTP 表上运行长 join。
- 在测量查询计划和同步耗时前,保持较小批大小。
- 如果数据库使用 RLS,请用同一个只读角色验证行级安全行为。
- 确认查询计划不会产生重锁、大表顺序扫描或异常临时文件。
验证
- 确认凭据能用只读角色连接。
- 在自动发现中确认能看到预期 schema、表和字段。
- 在自定义 SQL 中确认查询返回所有已配置列。
- 执行首次同步,检查行数、已索引文档数和失败记录。
- 按标题和正文搜索代表性记录。
- 确认未选 schema、表、字段和敏感列不会出现在搜索中。
- 修改一行测试数据,确认配置更新时间字段后会更新同一文档。
- 使用连接器受众之外的用户测试,确认受限文档不可见。