如何用SQL或Cypher查询AgensGraph向量标签的继承关系?
获取AgensGraph向量标签的继承关系列表
当然可以,你可以通过SQL查询系统表或者使用Cypher语句来获取向量标签(VLABEL)的父类与子类对应关系,具体方法如下:
方法一:SQL查询系统表
AgensGraph基于PostgreSQL开发,向量标签的继承关系存储在系统表中,通过关联ag_label(存储标签元数据)和pg_inherits(存储继承关系)即可查询:
SELECT CONCAT(child.nspname, '.', child.relname) AS 子类向量标签, CONCAT(parent.nspname, '.', parent.relname) AS 父类向量标签 FROM pg_inherits JOIN ag_label child ON pg_inherits.inhrelid = child.oid JOIN ag_label parent ON pg_inherits.inhparent = parent.oid WHERE child.labkind = 'v' -- 筛选向量标签 AND parent.labkind = 'v';
说明:
ag_label.labkind = 'v'用于指定只查询向量标签,若要查边标签可改为'e'nspname是标签所在的命名空间,relname是标签名,拼接后是完整的标签标识
方法二:Cypher查询
你也可以用Cypher语法结合系统表来查询,支持批量查询或指定标签查询:
批量查询所有继承关系对
MATCH (child:ag_label), (parent:ag_label) WHERE EXISTS((child)-[:inhrelid]->(pg_inherits)<-[:inhparent]-(parent)) AND child.labkind = 'v' AND parent.labkind = 'v' RETURN child.nspname + '.' + child.relname AS 子类向量标签, parent.nspname + '.' + parent.relname AS 父类向量标签;
查询指定子类的所有父类
比如查询childLabelName的父类:
MATCH (child:ag_label {relname: 'childLabelName', labkind: 'v'}) JOIN pg_inherits ON child.oid = pg_inherits.inhrelid JOIN (parent:ag_label) ON pg_inherits.inhparent = parent.oid RETURN parent.nspname + '.' + parent.relname AS 父类向量标签;
查询指定父类的所有子类
比如查询labelName的子类:
MATCH (parent:ag_label {relname: 'labelName', labkind: 'v'}) JOIN pg_inherits ON parent.oid = pg_inherits.inhparent JOIN (child:ag_label) ON pg_inherits.inhrelid = child.oid RETURN child.nspname + '.' + child.relname AS 子类向量标签;
内容的提问来源于stack exchange,提问作者Lex Man
相关产品推荐
相关产品推荐

