图插件(AGE )使用说明文档
更新时间:2026-05-20
功能说明
Apache AGE是一个提供图数据库功能的 PostgreSQL 版本。Apache AGE的目标是为所有关系型数据库提供图数据处理和分析能力。通过 Apache AGE,PostgreSQL 用户可以在现有的关系型数据库中进行图查询建模。用户可以读写节点和边中的图数据,还可以使用各种算法(例如变长算法和边遍历算法)来分析数据。
RDS PostgreSQL高度兼容Apache AGE的图引擎,支持对知识图谱的存储和查询检索,让您能够在同一个数据库集群上同时使用标准的ANSI SQL和图查询语言openCypher进行查询。
功能特性
- Cypher查询:支持图查询语言。
- 混合查询:支持SQL和/或Cypher混合查询。
- 图管理:支持创建多个图。
- 层次管理:使用图标签组织不同类型的节点和边。
- 属性索引:可以对节点和边以及其上的属性建立索引。
- 完整PostgreSQL支持:支持PostgreSQL特性。
使用限制
支持的RDS PostgreSQL版的版本如下:
- PostgreSQL 17
- PostgreSQL 16
基本概念
- 图(Graph):图是由节点和边组成的数据结构。
- 节点(Node):节点是图数据库中的基本元素,表示数据库中的实体。节点可以具有属性,用于存储与实体相关的信息。
- 边(Edge):边是连接节点的关系。边可以具有权重、方向等属性,用于表示关系的强度和方向。
- 标签(Label):标签是一种用于标识节点或边的分类或属性。标签帮助您语义化数据,以便更容易地进行查询和理解。
操作步骤
加载插件
请使用高权限账号执行如下语句。
Plain Text
1CREATE EXTENSION IF NOT EXISTS age;
设置数据库
对于每次连接,都需要将ag_catalog添加到search_path以简化查询,并通过get_cypher_keywords函数实现插件的加载。
Plain Text
1SET search_path = ag_catalog, "$user", public;
2SELECT * FROM get_cypher_keywords() limit 0;
允许普通用户使用AGE
在ag_catalog模式为普通用户授予USAGE权限。
Plain Text
1GRANT USAGE ON SCHEMA ag_catalog TO<username>;
创建图
创建一个名为test_db的图。
Plain Text
1SELECT create_graph('test_db');
插入数据
包含了6个节点,其中3个的标签为电影(Movie),3个为人员(Person)。3条边,其中2条边的标签为表演(ACTED_IN),一条边为导演(DIRECTED)。
Plain Text
1SELECT * FROM cypher('test_db', $$
2 CREATE (matrix:Movie {title: 'The Matrix', released: 1997})
3 CREATE (cloudAtlas:Movie {title: 'Cloud Atlas', released: 2012})
4 CREATE (forrestGump:Movie {title: 'Forrest Gump', released: 1994})
5 CREATE (keanu:Person {name: 'Keanu Reeves', born: 1964})
6 CREATE (robert:Person {name: 'Robert Zemeckis', born: 1951})
7 CREATE (tom:Person {name: 'Tom Hanks', born: 1956})
8 CREATE (tom)-[:ACTED_IN {roles: ['Forrest']}]->(forrestGump)
9 CREATE (tom)-[:ACTED_IN {roles: ['Zachry']}]->(cloudAtlas)
10 CREATE (robert)-[:DIRECTED]->(forrestGump)
11$$) AS (result1 agtype);
查询数据
查找包含Movie标签的所有节点。
Plain Text
1SELECT * FROM cypher('test_db', $$
2 MATCH (m:Movie)
3 RETURN m
4$$) AS (result1 agtype);
查找标签为ACTED_IN的连接Person和Movie的边。
Plain Text
1SELECT * FROM cypher('test_db', $$
2 MATCH (:Person)-[r:ACTED_IN]->(:Movie)
3 RETURN r
4$$) AS (result1 agtype);
查询标题为The Matrix的所有电影。
Plain Text
1SELECT * FROM cypher('test_db', $$
2 MATCH (m:Movie)
3 WHERE m.title = 'The Matrix'
4 RETURN m
5$$) AS (result1 agtype);
查询标题为Forrest Gump的所有演员。
Plain Text
1SELECT * FROM cypher('test_db', $$
2 MATCH (p:Person)-[:ACTED_IN]->(m)
3 WHERE m.title = 'Forrest Gump'
4 RETURN p
5$$) AS (result1 agtype);
查询发布时间晚于2000年的电影的演员。
Plain Text
1SELECT * FROM cypher('test_db', $$
2 MATCH (p:Person)-[:ACTED_IN]->(m)
3 WHERE m.released > 2000
4 RETURN p, m
5$$) AS (result1 agtype, result2 agtype);
删除数据
删除Person Tom Tykwer和电影Cloud Atlas的导演边关系。
Plain Text
1SELECT * FROM cypher('test_db', $$
2 MATCH (p:Person)-[r:DIRECTED]->(m:Movie)
3 WHERE p.name='Tom Tykwer' AND m.title='Cloud Atlas'
4 DELETE r
5$$) AS (result1 agtype);
当不再需要节点或边的属性时,可以使用REMOVE关键字删除该属性。
Plain Text
1SELECT * FROM cypher('test_db', $$
2 MATCH (m:Movie {title: 'Cloud Atlas', released: 2012})
3 REMOVE m.released
4 RETURN m
5$$) AS (result1 agtype);
评价此篇文章
