最近更新时间:2025-11-11 16:29:40
图(Graph) 由一组 顶点(Vertex) 和 边(Edge) 组成。
每个顶点和边都可以拥有一组属性(属性映射)。
顶点是图的基本元素,可独立存在。
边用于在两个顶点之间建立有向连接,以描述它们之间的关系。
可以通过位于 ag_catalog 命名空间下的 create_graph 函数来创建一个新的图。
语法:
create_graph(graph_name);返回值:
void参数说明:
参数 | 描述 |
| 要创建的图名称 |
注意事项:
该函数不返回任何结果。如果执行后未出现错误提示,则说明图已成功创建。
创建图时,系统会自动生成相关的内部表结构,用于存储图的元数据与内容。
示例:
SELECT * FROM ag_catalog.create_graph('graph_name');要删除已创建的图,可使用位于 ag_catalog 命名空间下的 drop_graph 函数。
语法:
drop_graph(graph_name, cascade);返回值:
void参数说明:
参数 | 描述 |
| 要删除的图名称。 |
| 布尔值。当设置为 |
注意事项:
此函数不会返回结果。如果执行过程中无错误提示,则说明图已成功删除。
建议在删除图时将 cascade 参数设置为 true,否则需要手动使用 SQL DDL 语句逐一删除图中的节点、边及相关对象。
示例:
SELECT * FROM ag_catalog.drop_graph('graph_name', true);使用 AGE 创建图时,将为每个单独的图生成一个命名空间。 创建的图的名称和命名空间可以在 ag_catalog 命名空间的 ag_graph 表中看到:
SELECT create_graph('new_graph');
NOTICE: graph "new_graph" has been created
create_graph
--------------
(1 row)
SELECT * FROM ag_catalog.ag_graph;
name | namespace
-----------+-----------
new_graph | new_graph
(1 row)创建图后,系统会在该图的命名空间下生成两个基础表:
_ag_label_vertex:顶点(Vertex)的父表
_ag_label_edge:边(Edge)的父表
所有新创建的顶点标签与边标签都将继承自这两个表。
可以通过以下查询查看数据库中所有图的顶点与边标签信息:
-- 在创建新顶点标签之前。
SELECT * FROM ag_catalog.ag_label;
name | graph | id | kind | relation | seq_name
------------------+-------+----+------+----------------------------+-------------------------
_ag_label_vertex | 68484 | 1 | v | new_graph._ag_label_vertex | _ag_label_vertex_id_seq
_ag_label_edge | 68484 | 2 | e | new_graph._ag_label_edge | _ag_label_edge_id_seq
(2 rows)
-- 创建新顶点标签。
SELECT create_vlabel('new_graph', 'Person');
NOTICE: VLabel "Person" has been created
create_vlabel
---------------
(1 row)
-- 创建新顶点标签后。
SELECT * FROM ag_catalog.ag_label;
name | graph | id | kind | relation | seq_name
------------------+-------+----+------+----------------------------+-------------------------
_ag_label_vertex | 68484 | 1 | v | new_graph._ag_label_vertex | _ag_label_vertex_id_seq
_ag_label_edge | 68484 | 2 | e | new_graph._ag_label_edge | _ag_label_edge_id_seq
Person | 68484 | 3 | v | new_graph."Person" | Person_id_seq
(3 rows)每当执行 create_vlabel() 函数创建顶点标签时,系统会在图对应的命名空间下自动生成一个新表:
new_graph."<label>"同理,执行 create_elabel() 函数时,将为边标签创建对应的表。
如果使用 Cypher 语句创建顶点与边,这些表也会自动创建。示例如下:
-- 创建两个顶点和一条边。
SELECT * FROM cypher('new_graph', $$
CREATE (:Person {name: 'Daedalus'})-[:FATHER_OF]->(:Person {name: 'Icarus'})
$$) AS (a agtype);
a
---
(0 rows)
-- 显示新创建的表。
SELECT * FROM ag_catalog.ag_label;
name | graph | id | kind | relation | seq_name
------------------+-------+----+------+----------------------------+-------------------------
_ag_label_vertex | 68484 | 1 | v | new_graph._ag_label_vertex | _ag_label_vertex_id_seq
_ag_label_edge | 68484 | 2 | e | new_graph._ag_label_edge | _ag_label_edge_id_seq
Person | 68484 | 3 | v | new_graph."Person" | Person_id_seq
FATHER_OF | 68484 | 4 | e | new_graph."FATHER_OF" | FATHER_OF_id_seq
(4 rows)建议不要在图保留的命名空间中执行 DML 或 DDL 命令。
纯净模式
