我正在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
现在在代码中,我想要CHILD
和GRANDCHILD
的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);
}