如何在Apache Age中获取数据库内所有图的全量信息及图数量
获取Apache Age中所有图的详情及图数量的方法
1. 统计数据库中Age图的数量
直接对ag_catalog.ag_graph表做计数查询即可:
SELECT COUNT(*) AS total_graphs FROM ag_catalog.ag_graph;
2. 获取所有图的顶点与关系详情
每个Age图的顶点和关系会存储在对应命名空间的专用表中,也可以通过Cypher语句查询,以下是两种常用方法:
方法一:逐个查询单图的详情
首先先获取所有图的名称和对应的命名空间:
SELECT name, namespace FROM ag_catalog.ag_graph;
针对每个图,比如图名为demo_graph,命名空间为demo_graph_ns,可以用两种方式查询:
- 直接查询底层表:
-- 查询所有顶点 SELECT * FROM demo_graph_ns.demo_graph_vertices; -- 查询所有关系 SELECT * FROM demo_graph_ns.demo_graph_edges; - 使用Cypher查询(更贴合Age的图操作习惯):
-- 查询所有顶点 SELECT * FROM cypher('demo_graph', $$ MATCH (n) RETURN n $$) AS (n agtype); -- 查询所有关系 SELECT * FROM cypher('demo_graph', $$ MATCH ()-[r]->() RETURN r $$) AS (r agtype);
方法二:批量查询所有图的详情
如果数据库中的图较多,可通过PL/pgSQL脚本自动遍历所有图并输出详情:
DO $$ DECLARE graph_rec RECORD; BEGIN FOR graph_rec IN SELECT name, namespace FROM ag_catalog.ag_graph LOOP -- 打印当前图的标识信息 RAISE NOTICE '===== 图名称: % | 命名空间: % =====', graph_rec.name, graph_rec.namespace; -- 查询并输出顶点数据 RAISE NOTICE '--- 顶点数据 ---'; EXECUTE format('SELECT * FROM %I.%I', graph_rec.namespace, graph_rec.name || '_vertices'); -- 查询并输出关系数据 RAISE NOTICE '--- 关系数据 ---'; EXECUTE format('SELECT * FROM %I.%I', graph_rec.namespace, graph_rec.name || '_edges'); END LOOP; END $$;
如果偏好Cypher语法,也可以用下面的脚本:
DO $$ DECLARE graph_name TEXT; BEGIN FOR graph_name IN SELECT name FROM ag_catalog.ag_graph LOOP RAISE NOTICE '===== 图: % =====', graph_name; -- 用Cypher查询所有顶点 RAISE NOTICE '--- 顶点 ---'; EXECUTE format('SELECT * FROM cypher(''%s'', $$ MATCH (n) RETURN n $$) AS (n agtype)', graph_name); -- 用Cypher查询所有关系 RAISE NOTICE '--- 关系 ---'; EXECUTE format('SELECT * FROM cypher(''%s'', $$ MATCH ()-[r]->() RETURN r $$) AS (r agtype)', graph_name); END LOOP; END $$;
内容的提问来源于stack exchange,提问作者Kamlesh Kumar
相关产品推荐
相关产品推荐

