Hologres mendukung pemuatan ekstensi untuk menambahkan fitur baru. Topik ini menjelaskan ekstensi yang didukung serta cara memuat, melihat, dan menguninstalnya.
Batasan
Sebuah ekstensi hanya dapat dimuat ke dalam satu schema per database. Misalnya, jika Anda memuat ekstensi ke dalam schema default suatu database, Anda tidak dapat memuat ekstensi yang sama ke dalam schema lain dari database tersebut.
Anda dapat memuat ekstensi ke dalam schema sistem global pg_catalog. Hal ini membuat fitur-fitur ekstensi tersedia untuk semua schema dalam database secara default. Jika Anda tidak menentukan schema, ekstensi akan dimuat ke dalam schema public.
Hanya akun dengan izin Superuser yang dapat memuat atau menguninstal ekstensi.
Saat ini, hanya ekstensi sistem bawaan yang didukung. Anda tidak dapat memuat ekstensi kustom atau eksternal.
Extension
Extension name | Scenarios | References | Usage notes |
spm, slpm | Aktifkan sakelar untuk memanggil fungsi menggunakan model izin. | Use the simple permission model, Use the schema-level simple permission model | Dimuat ke dalam schema hologres secara default. Anda tidak dapat menentukan schema berbeda. |
hive_compatible | Gunakan fungsi | Muat ekstensi ini ke dalam schema pg_catalog. | |
hologres_fdw | Lakukan kueri lintas-database di Hologres. |
| |
dlf_fdw | Baca data OSS menggunakan DLF. | Muat ekstensi ini ke dalam schema pg_catalog. | |
proxima | Gunakan Proxima untuk komputasi vektor. |
| |
flow_analysis | Gunakan fungsi segmentasi pengguna dan analisis funnel. | Dimuat ke dalam schema public secara default. Ekstensi ini hanya dapat dimuat ke dalam schema public. | |
roaringbitmap | Gunakan fungsi Roaring Bitmap. |
| |
hg_binlog | Konsumsi data Hologres Binlog. |
| |
postgis | Gunakan fungsi spasial. |
| |
ClickHouse | Menyediakan fungsi yang kompatibel dengan ClickHouse untuk migrasi. |
| |
pgcrypto | Gunakan fungsi GEN_RANDOM_UUID. | Muat ekstensi ini ke dalam skema pg_catalog. | |
bsi | Gunakan fungsi BSI. | Dimuat ke dalam skema public secara default. Ekstensi ini hanya dapat dimuat ke dalam skema public. | |
hg_anon | Digunakan untuk data masking. | Hanya dapat dimuat ke dalam skema pg_catalog. | |
mysql_compatible | Fungsi yang kompatibel dengan MySQL | Dimuat ke dalam schema hologres secara default. Anda tidak dapat menentukan schema lain. |
Load an extension
Anda dapat memuat ekstensi langsung ke dalam skema sistem pg_catalog, sehingga ekstensi tersebut tersedia untuk semua skema secara default. Bagian berikut menunjukkan sintaks dan contohnya.
Jika Anda tidak menentukan skema, ekstensi akan dimuat ke dalam skema public secara default. Perhatikan bahwa beberapa ekstensi hanya dapat dimuat ke dalam skema tertentu. Untuk informasi selengkapnya, lihat Supported extensions.
Examples
Perintah SQL untuk memuat ekstensi adalah sebagai berikut.
-- Perintah ini memerlukan izin Superuser. CREATE extension IF NOT EXISTS <extension_name> SCHEMA <schema_name>;Parameter
Description
extension_name
Nama ekstensi yang akan dimuat. Untuk daftar ekstensi yang didukung di Hologres, lihat tabel dalam topik ini.
schema_name
Nama schema tempat ekstensi dimuat. Jika Anda tidak menentukan schema, ekstensi akan dimuat ke dalam schema public secara default. Muat ekstensi ke pg_catalog agar tersedia di tingkat database.
Example
Contoh berikut menunjukkan cara memuat ekstensi postgis ke dalam skema pg_catalog.
CREATE extension if not exists postgis schema pg_catalog;
View loaded extensions in the current database
Anda dapat menjalankan perintah SQL berikut untuk melihat ekstensi yang telah dimuat di database saat ini, termasuk ekstensi yang dimuat secara default.
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;Uninstall an extension
Perintah SQL untuk meng-uninstall ekstensi adalah sebagai berikut.
Jangan gunakan perintah DROP EXTENSION <extension_name> CASCADE; untuk melakukan penghapusan secara kaskade. Opsi CASCADE tidak hanya menghapus ekstensi, tetapi juga melakukan purge terhadap semua data terkait (seperti data PostGIS, RoaringBitmap, Proxima, Binlog, dan BSI) serta objek dependen (seperti metadata, tabel, view, dan data server).
-- Perintah ini memerlukan izin Superuser.
DROP extension <extension_name>;Parameter | Description |
extension_name | Nama ekstensi yang akan diuninstal. Untuk daftar ekstensi yang didukung di Hologres, lihat tabel dalam topik ini. |
Example: Query an extension across schemas
Beberapa ekstensi hanya dapat dimuat ke dalam skema tertentu, bukan ke dalam pg_catalog. Sebagai contoh, ekstensi roaringbitmap hanya dapat dimuat ke dalam skema public. Jika sebuah tabel berada di skema selain public, kueri yang menggunakan fungsi Roaring Bitmap (RB) akan gagal dengan pesan error function xxx does not exist. Untuk mencegah hal ini, tambahkan awalan nama skema default pada nama fungsi saat memanggilnya. Contoh berikut menunjukkan cara menggunakan ekstensi roaringbitmap.
Siapkan data.
Buat tabel di skema selain public dan impor data.
CREATE EXTENSION roaringbitmap; CREATE SCHEMA test; -- Buat tabel di schema yang ditentukan. CREATE TABLE test.t1 ( id integer, bitmap roaringbitmap ); -- Atur nilai BIT menjadi 1 untuk posisi array yang sesuai. INSERT INTO test.t1 SELECT 1, RB_BUILD (ARRAY[1, 2, 3, 4, 5, 6, 7, 8, 9, 200]); -- Atur nilai BIT menjadi 1 untuk posisi yang sesuai dari beberapa record input, lalu agregasikan menjadi satu roaringbitmap. INSERT INTO test.t1 SELECT 2, RB_BUILD_AGG (e) FROM GENERATE_SERIES(1, 100) e;Kueri data menggunakan fungsi RB di skema public. Kueri berhasil.
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;Beralih ke skema yang ditentukan dan jalankan kueri dengan fungsi RB. Terjadi error.
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; ERROR: function rb_or(public.roaringbitmap, public.roaringbitmap) does not existSolusi: Tambahkan awalan public pada fungsi RB agar fungsi tersebut dieksekusi di skema public.
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;
FAQ
Ekstensi dimuat ke schema yang salah. Setelah beralih ke schema lain, Anda tidak dapat mengakses fungsi atau sintaksnya, dan muncul error function xxx does not exist.
Penyebab: Hal ini biasanya terjadi karena ekstensi dimuat ke dalam schema public. Setelah Anda beralih ke schema berbeda, ekstensi tersebut tidak lagi dapat diakses.
Solusi: Uninstal ekstensi tersebut, lalu muat ulang ke dalam schema pg_catalog. Dengan demikian, ekstensi akan dapat diakses dari semua schema. Contoh berikut menunjukkan cara melakukannya:
PentingSaat menguninstal ekstensi, jangan gunakan sintaks
DROP EXTENSION <extension_name> CASCADE;. Perintah ini akan menghapus semua objek yang bergantung pada ekstensi dan dapat memengaruhi layanan Anda.drop extension hologres_fdw; create extension if not exists hologres_fdw schema pg_catalog;