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 16(核心小版本2.0.16.8.3.0及以上)
PostgreSQL 15(核心小版本2.0.15.12.4.0及以上)
PostgreSQL 14(核心小版本2.0.14.12.24.0及以上)
使用方法
安裝外掛程式
請使用高許可權帳號執行如下語句,建立高許可權帳號請參考建立資料庫帳號。
CREATE EXTENSION age;安裝外掛程式之後,將其加入需要使用此外掛程式的資料庫或使用者的搜尋路徑和預先載入庫中:
使用Data Management(Data Management)用戶端設定search_path時,可能會存在相容性問題,您可使用PolarDB-Tools執行相關語句。
會話級載入外掛程式:
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;