全部產品
Search
文件中心

Hologres:Extension擴充

更新時間:Jun 30, 2024

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函數

  • 僅獨享執行個體支援,共用叢集不支援。

  • 預設載入到public Schema下,且只能載入到public Schema下,不能載入到其他Schema。

hg_binlog

消費Hologres Binlog。

通過JDBC消費Hologres Binlog

  • 僅獨享執行個體支援,共用叢集不支援。

  • 預設載入到hologres Schema下,不能指定Schema。

postgis

使用空間函數。

PostGIS空間函數

  • 僅獨享執行個體支援,共用叢集不支援。

  • 建議載入到pg_catalog Schema下。

clickhouse

相容ClickHouse遷移函數。

遷移ClickHouse至Hologres

  • 僅獨享執行個體支援,共用叢集不支援。

  • 預設載入到public Schema下,且只能載入到public Schema下,不能載入到其他Schema。

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命令如下。

    -- 需Superuser許可權執行
    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資料等)。

-- 需Superuser許可權執行
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的使用樣本如下。

  1. 資料準備。

    建立非public Schema的表並匯入資料。

    CREATE EXTENSION roaringbitmap;
    
    CREATE SCHEMA test;
    
    --建立表在指定Schema下
    CREATE TABLE test.t1 (
        id integer,
        bitmap roaringbitmap
    );
    
    --數組位置對應的BIT值為1
    INSERT INTO test.t1
    SELECT
        1,
        RB_BUILD (ARRAY[1, 2, 3, 4, 5, 6, 7, 8, 9, 200]);
    
    --將輸入的多條記錄的值對應位置的BIT值設定為1,最後彙總為一個roaringbitmap
    INSERT INTO test.t1
    SELECT
        2,
        RB_BUILD_AGG (e)
    FROM
        GENERATE_SERIES(1, 100) e;
    
  2. 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;
  3. 切換到指定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
  4. 解決方案:在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

  • 問題原因:通常是因為Extension被載入到了public Schema下,切換Schema後,無法訪問。

  • 解決方案:卸載Extension,並將Extension重新載入到pg_catalog Schema下,這樣所有的Schema都能訪問。樣本如下:

    重要

    卸載Extension時,不建議使用DROP EXTENSION  <extension_name> CASCADE;的文法,否則會將該Extension依賴的相關對象全部刪除,容易對業務產生影響。

    drop extension hologres_fdw;
    
    create extension if not exists hologres_fdw schema pg_catalog;