ITPub博客

首页 > 数据库 > PostgreSQL > 【PGCCC】使用 Postgres 递归 CTE 进行图形检索

【PGCCC】使用 Postgres 递归 CTE 进行图形检索

原创 PostgreSQL 作者:pgccc 时间:2024-08-14 14:37:42 0 删除 编辑

您是否知道可以将 Postgres 用作某些用例的图形数据库?

假设您有如下图表:

在这里插入图片描述
我们可以在 NetworkX 中构建此图:

 1import networkx as nx
 2
 3G = nx.Graph()
 4
 5G.add_edges_from([
 6    ("A", "B"),
 7    ("A", "C"),
 8    ("A", "D"),
 9    ("A", "E"),
10    ("A", "F"),
11    ("E", "G"),
12    ("F", "G"),
13    ("E", "H"),
14    ("H", "I"),
15    ("D", "I"),
16    ("J", "K"),
17    ("C", "K"),
18    ("C", "L"),
19    ("B", "L"),
20    ("B", "M"),
21    ("N", "O"),
22    ("P", "R"),
23    ("P", "Q"),
24    ("P", "S"),
25    ("R", "S"),
26    ("Q", "S")
27])

要将其存储在 Postgres 中,请创建一个edges表:

1CREATE TABLE IF NOT EXISTS edges (
2    u TEXT,
3    v TEXT
4    -- add other edge attributes
5)
将边插入到表中:
 1INSERT INTO edges (u, v) 
 2VALUES
 3    ('A', 'B'),
 4    ('A', 'C'),
 5    ('A', 'D'),
 6    ('A', 'E'),
 7    ('A', 'F'),
 8    ('B', 'L'),
 9    ('B', 'M'),
10    ('C', 'K'),
11    ('C', 'L'),
12    ('D', 'I'),
13    ('E', 'G'),
14    ('E', 'H'),
15    ('F', 'G'),
16    ('H', 'I'),
17    ('J', 'K'),
18    ('N', 'O'),
19    ('P', 'R'),
20    ('P', 'Q'),
21    ('P', 'S'),
22    ('Q', 'S'),
23    ('R', 'S');

现在我们已经存储了图形,让我们看看如何从 Postgres 中检索连通分量。如果我们想检索连接到“A”的所有节点,我们可以使用这个递归 CTE:

1WITH RECURSIVE cc AS (
 2    SELECT
 3        u, v
 4    FROM
 5        edges
 6    WHERE
 7        u = 'A' OR v = 'A'
 8
 9    UNION
10
11    SELECT
12        e.u, e.v
13    FROM
14        edges e
15    INNER JOIN
16        cc c ON 
17            c.u = e.v OR
18            c.v = e.u OR
19            c.v = e.v OR
20            c.u = e.u
21)
22
23SELECT * FROM cc;

它的视觉工作原理如下:


结论

使用 Postgres 存储图表的优点在于,如果您的实体(节点)已经存储在其他表中,那么您就可以将实体元数据和关系(图表)保存在同一个数据库中,从而避免 Postgres 和图表数据库之间的数据同步。


几点注意事项:


我使用的图是具有数百万个连通分量的不相交无向图。这些图对于实体解析用例非常常见。

检索后,我使用 NetworkX、igraph 等应用程序级库来应用图形算法。与 Neo4j等图形数据库中提供的少数图形算法选项相比,此设置为我提供了更多图形算法选项。

如果您的图很大或者直径很大,最好添加语句超时或限制递归深度,以便上述查询不会花费很长时间。下面是如何实现它们的示例。

我省略了约束和索引之类的内容,这些可以根据您的用例添加。

【PGCCC】PostgreSQL培训考试认证中心,国内权威PG培训认证机构,由工业和信息化部教育与考试中心直发证书。咨询【加V:pgccc400】

#PCP#PCA#postgresql培训#postgresql考试#postgresql认证


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69998444/viewspace-3025009/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
PostgreSQL考试中心

注册时间:2021-04-15

  • 博文量
    108
  • 访问量
    114347