全部文档
当前文档

暂无内容

如果没有找到您期望的内容,请尝试其他搜索词

文档中心

图(Graph)

最近更新时间:2025-11-11 16:29:40

图(Graph) 由一组 顶点(Vertex)边(Edge) 组成。

  • 每个顶点和边都可以拥有一组属性(属性映射)。

  • 顶点是图的基本元素,可独立存在。

  • 边用于在两个顶点之间建立有向连接,以描述它们之间的关系。


创建图

可以通过位于 ag_catalog 命名空间下的 create_graph 函数来创建一个新的图。

create_graph()

语法:

create_graph(graph_name);

返回值:

void

参数说明:

参数

描述

graph_name

要创建的图名称

注意事项:

  • 该函数不返回任何结果。如果执行后未出现错误提示,则说明图已成功创建。

  • 创建图时,系统会自动生成相关的内部表结构,用于存储图的元数据与内容。

示例:

SELECT * FROM ag_catalog.create_graph('graph_name');

删除图

要删除已创建的图,可使用位于 ag_catalog 命名空间下的 drop_graph 函数。

drop_graph()

语法:

drop_graph(graph_name, cascade);

返回值:

void

参数说明:

参数

描述

graph_name

要删除的图名称。

cascade

布尔值。当设置为 true 时,将递归删除与该图相关的所有标签(Label)及数据。

注意事项:

  • 此函数不会返回结果。如果执行过程中无错误提示,则说明图已成功删除。

  • 建议在删除图时将 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 命令。

文档导读
纯净模式常规模式

纯净模式

点击可全屏预览文档内容
文档反馈