PolarDB PostgreSQL版以插件形式实现图数据库,使用Cypher语言对数据库中的图进行查询。本文介绍图数据库的基本概念,及图数据库的使用方法。
概念介绍
图(Graph):图由节点(结点或顶点)和边(连接节点的关系)组成。图是一种非线性的数据结构,可用于表示实体及其之间的关系。
节点(Node):节点是图中的基本单位,表示实体,例如用户、产品、地点等。每个节点可以包含属性(即数据字段),用于描述节点的特征或行为。
边(Edge):边表示节点之间的关系或连接。每条边可以是有向的(从一个节点指向另一个节点)或无向的(没有特定方向)。边也可以有属性,用于描述关系的特征(如关系类型、权重等)。
属性(Property):属性是节点或边的附加信息,例如节点的名称、创建时间、边的权重等。通过属性,可以更细致地描述节点和边。
图查询语言:图查询语言是用于与图数据库进行交互的一种专门语言,允许通过编写查询来检索、分析和操作图数据。本插件使用Cypher作为图查询语言,同时支持与PostgreSQL原有的SQL、PL/PGSQL等语言组合进行查询。常用的查询语法包括
MATCH
,WITH
,RETURN
,ORDER BY
,SKIP
,LIMIT
,CREATE
,DELETE
,SET
,REMOVE
和MERGE
等。
前提条件
支持的PolarDB PostgreSQL版的版本如下:
PostgreSQL 14(内核小版本14.12.24.0及以上)。
使用方法
安装插件
请使用高权限账号执行如下语句,创建高权限账号请参考创建数据库账号。
CREATE EXTENSION age;
安装插件之后,将其加入需要使用此插件的数据库或用户的搜索路径和预加载库中:
会话级加载插件:
SELECT * FROM ag_catalog.get_cypher_keywords() limit 0;
同时,可以将
ag_catalog
添加到search_path
以简化查询:SET search_path = ag_catalog, "$user", public;
永久加载插件:
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';
如普通账号需使用此插件功能,可使用以下方式:
为普通账号授予
USAGE
权限。GRANT USAGE ON SCHEMA ag_catalog TO <username>;
如普通账号只需创建图,则可授予CREATE权限。
GRANT CREATE ON DATABASE <dbname> TO <username>;
创建图
使用位于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;
- 本页导读 (1)
- 概念介绍
- 前提条件
- 使用方法
- 安装插件
- 创建图
- 创建顶点和边
- 查询节点
- 删除图
- 卸载插件