Hologres中支援載入擴充(Extension)以實現更豐富的功能,本文為您介紹Hologres中支援的Extension擴充以及如何載入、查看、卸載Extension。
使用限制
一個資料庫只能在一個Schema下載入一次Extension。例如在某資料庫的預設Schema下載入了Extension,則此資料庫下其他的Schema不能再載入Extension。
可以將extension載入在全域空間pg_catalog系統Schema下,預設該資料庫的所有Schema都能訪問該Extension的功能;如果不指定Schema,則會預設載入在public Schema下。
帳號具有Superuser許可權才能載入、卸載Extension。
目前僅支援載入系統內建Extension,不支援載入自訂及外部Extension。
Extension擴充
Extension名稱 | 適用情境 | 相關文檔 | 使用說明 |
spm、slpm | 開啟許可權模型調用函數的開關。 | 簡單許可權模型的使用、基於Schema層級的簡單許可權模型的使用 | 預設載入到hologres Schema下,不能指定Schema。 |
hive_compatible | 使用get_json_object() 函數。 | JSON函數 | 建議載入到pg_catalog Schema下。 |
hologres_fdw | Hologres跨庫查詢。 | 跨庫查詢(Beta) | 僅獨享執行個體支援,共用叢集不支援。 建議載入到pg_catalog Schema下。
|
dlf_fdw | 通過DLF讀取OSS資料。 | OSS資料湖加速 | 建議載入到pg_catalog Schema下。 |
proxima | 使用Proxima進行向量計算。 | Proxima向量計算 | 僅獨享執行個體支援,共用叢集不支援。 建議載入到pg_catalog Schema下。
|
flow_analysis | 使用明細圈人、漏鬥分析函數。 | 漏鬥和留存函數、明細圈人函數 | 預設載入到public Schema下,且只能載入到public Schema下,不能載入到其他Schema。 |
roaringbitmap | 使用Roaring Bitmap函數。 | RoaringBitmap函數 | |
hg_binlog | 消費Hologres Binlog。 | 通過JDBC消費Hologres Binlog | |
postgis | 使用空間函數。 | PostGIS空間函數 | 僅獨享執行個體支援,共用叢集不支援。 建議載入到pg_catalog Schema下。
|
clickhouse | 相容ClickHouse遷移函數。 | 遷移ClickHouse至Hologres | |
pgcrypto | GEN_RANDOM_UUID函數使用。 | 隨機資料函數 | 建議載入到pg_catalog Schema下。 |
bsi | BSI函數使用。 | BSI函數 | 預設載入到public Schema下,且只能載入到public Schema下,不能載入到其他Schema。 |
hg_anon | 資料脫敏使用。 | 資料脫敏 | 只能載入到pg_catalog Schema下。 |
mysql_compatible | MySQL相容函數 | MySQL相容函數 | 預設載入到hologres Schema下,不能指定Schema。 |
載入Extension
載入Extension時,建議將Extension直接載入到pg_catalog系統Schema下,預設所有Schema都能使用該Extension,載入文法及樣本如下:
說明
如果未指定Schema,則Extension會被預設載入到public Schema下。但需注意,部分Extension只能載入到指定的Schema下,詳情請參見Extension擴充。
文法樣本
載入Extension的SQL命令如下。
CREATE extension IF NOT EXISTS <extension_name> SCHEMA <schema_name>;
參數 | 說明 |
extension_name | 需要載入的extension名稱,Hologres支援的部分Extension參見本文上述列表。 |
schema_name | 載入Extension所在的schema名稱。如果不指定schema,則會預設在public下載入Extension,建議載入在pg_catalog下,資料庫層級可用。 |
使用樣本
在pg_catalog下載入postgis擴充樣本如下。
CREATE extension if not exists postgis schema pg_catalog;
查看當前資料庫已載入Extension
通過如下SQL命令可以查看當前資料庫下已載入的Extension,包括系統預設載入的Extension。
SELECT
e.extname AS "Name",
e.extversion AS "Version",
n.nspname AS "Schema",
c.description AS "Description"
FROM
pg_catalog.pg_extension e
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = e.extnamespace
LEFT JOIN pg_catalog.pg_description c ON c.objoid = e.oid
AND c.classoid = 'pg_catalog.pg_extension'::pg_catalog.regclass
ORDER BY 1;
卸載Extension
卸載Extension的SQL命令如下。
重要
不推薦使用DROP EXTENSION <extension_name> CASCADE;
命令級聯卸載Extension。CASCADE(級聯)刪除命令不僅會刪除指定擴充本身,還會一併清除擴充資料(例如PostGIS資料、RoaringBitmap資料、Proxima資料、Binlog資料、BSI資料等)以及依賴該擴充的對象(包括中繼資料、表、視圖、Server資料等)。
DROP extension <extension_name>;
參數 | 說明 |
extension_name | 需要卸載的Extension名稱,Hologres支援的部分Extension參見本文上述列表。 |
跨Schema查詢Extension樣本
部分Extension只能被載入到指定的Schema下,不能被載入到pg_catalog,例如roaringbitmap extension只能被載入到public Schema下,當表存在於非public Schema時,使用RB函數查詢會報錯function xxx does not exist
,因此在使用函數時需要加上函數的預設Schema名稱。roaringbitmap Extension的使用樣本如下。
資料準備。
建立非public Schema的表並匯入資料。
CREATE EXTENSION roaringbitmap;
CREATE SCHEMA test;
CREATE TABLE test.t1 (
id integer,
bitmap roaringbitmap
);
INSERT INTO test.t1
SELECT
1,
RB_BUILD (ARRAY[1, 2, 3, 4, 5, 6, 7, 8, 9, 200]);
INSERT INTO test.t1
SELECT
2,
RB_BUILD_AGG (e)
FROM
GENERATE_SERIES(1, 100) e;
在public Schema下使用RB函數查詢,成功執行。
SELECT
RB_OR (a.bitmap, b.bitmap)
FROM (
SELECT
bitmap
FROM
test.t1
WHERE
id = 1) AS a,
(
SELECT
bitmap
FROM
test.t1
WHERE
id = 2) AS b;
切換到指定Schema使用RB函數查詢,報錯。
set search_path to test;
SELECT
RB_OR (a.bitmap, b.bitmap)
FROM (
SELECT
bitmap
FROM
test.t1
WHERE
id = 1) AS a,
(
SELECT
bitmap
FROM
test.t1
WHERE
id = 2) AS b;
RROR: function rb_or(public.roaringbitmap, public.roaringbitmap) does not exist
解決方案:在RB函數前加public Schema,將函數放入public Schema執行。
SELECT
public.RB_OR (a.bitmap, b.bitmap)
FROM (
SELECT
bitmap
FROM
test.t1
WHERE
id = 1) AS a,
(
SELECT
bitmap
FROM
test.t1
WHERE
id = 2) AS b;
常見問題
Extension被載入到了錯誤的Schema下,導致切換Schema後無法訪問對應的函數或文法,報錯function xxx does not exist
。