如何获得父标签的所有子标签?



我正在Apache AGE上工作,我想要给定父标签的所有子标签。
示例:
我有一条边命名为PARENT,GRANDCHILD,CHILD继承了这个PARENT。我想要从PostgreSQL表继承父的所有边。假设我有PARENT边缘标签的OID可用。我想获得所有子标签的oid。

我已经做了什么:

SELECT * FROM create_elabel('test', 'PARENT'); -- Created an edge Label named PARENT
SELECT * FROM create_elabel('test', 'CHILD', ARRAY['PARENT']); -- Created an edge Label named CHILD, Inherits PARENT
SELECT * FROM create_elabel('test', 'GRANDCHILD', ARRAY['PARENT']); -- Created an edge Label named GRANDCHILD, Inherits PARENT

现在在代码中,我想要CHILDGRANDCHILD的oid当我寻找PARENT的孩子。
哪个PostgreSQL函数会允许我这样做?

您可以使用find_inheritance_children函数,该函数将返回子标签表OID的列表。此外,有必要使用has_subclass函数检查当前标签是否有子边。has_subclass函数接收Relation类型参数并返回一个布尔值(如果存在子边则为True,如果不存在则为False)。假设您已经有了父标签的OID,代码必须类似于:

// add this to use the functions.
#include "catalog/pg_inherits.h"
List *child_edges_oid;
// verify if the current edge has child edges
if (has_subclass(edge_label_table_oid))
{
// get the edge's child labels OIDs 
child_edges_oid = find_inheritance_children(edge_label_table_oid, NoLock);
}