PolarDB PostgreSQL版(兼容Oracle)以插件形式实现图数据库,使用Cypher语言对数据库中的图进行查询。本文介绍图数据库的基本概念,及图数据库的使用方法。
概念介绍
图(Graph):图由节点(结点或顶点)和边(连接节点的关系)组成。图是一种非线性的数据结构,可用于表示实体及其之间的关系。
节点(Node):节点是图中的基本单位,表示实体,例如用户、产品、地点等。每个节点可以包含属性(即数据字段),用于描述节点的特征或行为。
边(Edge):边表示节点之间的关系或连接。每条边可以是有向的(从一个节点指向另一个节点)或无向的(没有特定方向)。边也可以有属性,用于描述关系的特征(如关系类型、权重等)。
属性(Property):属性是节点或边的附加信息,例如节点的名称、创建时间、边的权重等。通过属性,可以更细致地描述节点和边。
图查询语言:图查询语言是用于与图数据库进行交互的一种专门语言,允许通过编写查询来检索、分析和操作图数据。本插件使用Cypher作为图查询语言,同时支持与PostgreSQL原有的SQL、PL/PGSQL等语言组合进行查询。常用的查询语法包括
MATCH
,WITH
,RETURN
,ORDER BY
,SKIP
,LIMIT
,CREATE
,DELETE
,SET
,REMOVE
和MERGE
等。
前提条件
支持的PolarDB PostgreSQL版(兼容Oracle)版本如下:
Oracle语法兼容 2.0(内核小版本2.0.14.24.0及以上)。
您可通过如下语句查看PolarDB PostgreSQL版(兼容Oracle)的内核小版本号:
SHOW polar_version;
使用方法
安装插件
CREATE EXTENSION age;
安装插件之后,将其加入需要使用此插件的数据库或用户的搜索路径和预加载库中:
ALTER DATABASE <dbname> SET search_path = public,ag_catalog;
ALTER USER <username> SET search_path = public,ag_catalog;
ALTER DATABASE <dbname> SET session_preload_libraries TO 'age';
ALTER USER <username> SET session_preload_libraries TO 'age';
创建图
使用位于ag_catalog
命名空间中的create_graph
函数创建图。
SELECT create_graph('graph_name');
创建顶点和边
使用
CREATE
子句创建一个具有标签和属性的单个顶点。SELECT * FROM cypher('graph_name', $$ CREATE (:label {property:"Node A"}) $$) as (v agtype);
SELECT * FROM cypher('graph_name', $$ CREATE (:label {property:"Node B"}) $$) as (v agtype);
在两个节点之间创建一条边并设置其属性。
SELECT * FROM cypher('graph_name', $$ MATCH (a:label), (b:label) WHERE a.property = 'Node A' AND b.property = 'Node B' CREATE (a)-[e:RELTYPE {property:a.property + '<->' + b.property}]->(b) RETURN e $$) as (e agtype);
查询节点
查询连接的节点。
SELECT * from cypher('graph_name', $$
MATCH (V)-[R]-(V2)
RETURN V,R,V2
$$) as (V agtype, R agtype, V2 agtype);
删除图
使用位于ag_catalog
命名空间中的drop_graph
函数删除图。
SELECT drop_graph('graph_name', true);
卸载插件
DROP EXTENSION age;
卸载插件之后,重置加载项。
ALTER DATABASE <dbname> RESET search_path;
ALTER USER <username> RESET search_path;
ALTER DATABASE <dbname> RESET session_preload_libraries;
ALTER USER <username> RESET session_preload_libraries;