PostgreSQL 19将引入SQL属性图查询(SQL/PGQ),支持图模式匹配,新增GRAPH_TABLE函数、属性图DDL命令及系统目录。作者虽承认其重要性,但认为语法复杂,优势不明显,更倾向传统JOIN写法,并推荐相关博客供深入理解。
PostgreSQL 的 GRAPH_TABLE 在解析层将图查询重写为对底层表的普通连接,由常规优化器生成计划,因此性能可预测,所需索引与等价 SQL 连接相同,EXPLAIN 直接显示连接树。边表主键索引源列,反向遍历需在目标列加索引,可提速约 20 倍。PG 19 尚不支持变长模式与最短路径,可用 WITH RECURSIVE 变通。
本文介绍 PostgreSQL 19 中 SQL/PGQ 图查询的进阶用法:以人物、公司为顶点,knows、works_at 为边构建属性图,演示查询 Alice 朋友的就职公司及查找互相认识的同事。因 PG19 暂不支持逗号分隔的多模式匹配,需先用 GRAPH_TABLE 输出 ID 再 JOIN;多边表图应显式命名边标签,变长跳数 {1,3} 语法暂未支持。
PostgreSQL 19 将支持 SQL/PGQ,允许直接在关系表上定义属性图并用 GRAPH_TABLE 查询,无需扩展或复制数据。文章以小型社交网络为例,演示 CREATE PROPERTY GRAPH、顶点与边查询、有向与无向遍历、查找朋友的朋友及 WHERE 过滤,执行计划显示查询被重写为普通 SQL,无额外执行节点。
完成下面两步后,将自动完成登录并继续当前操作。