Extensions
Extensions are the way Gel can be extended with more functionality. They can add new types, scalars, functions, etc., but, more importantly, they can add new ways of interacting with the database.
Built-in extensions
There are a few built-in extensions available:
-
edgeql_http
: enables EdgeQL over HTTP, -
graphql
: enables GraphQL, -
auth
: enables Gel Auth, -
ai
: enables ext::ai module, -
pg_trgm
: enablesext::pg_trgm
, which re-exports pgtrgm, -
pg_unaccent
: enablesext::pg_unaccent
, which re-exports unaccent, -
pgcrypto
: enablesext::pgcrypto
, which re-exports pgcrypto, -
pgvector
: enablesext::pgvector
, which re-exports pgvector,
To enable these extensions, add a using
statement at the top level of
your schema:
using extension auth;
# or / and
using extension ai;
Standalone extensions
Additionally, standalone extension packages can be installed via the CLI,
with postgis
being a notable example.
List installed extensions:
$
gel extension list
┌─────────┬─────────┐ │ Name │ Version │ └─────────┴─────────┘
List available extensions:
$
gel extension list-available
┌─────────┬───────────────┐ │ Name │ Version │ │ postgis │ 3.4.3+6b82d77 │ └─────────┴───────────────┘
Install the postgis
extension:
$
gel extension install -E postgis
Found extension package: postgis version 3.4.3+6b82d77 00:00:03 [====================] 22.49 MiB/22.49 MiB Extension 'postgis' installed successfully.
Check that extension is installed:
$
gel extension list
┌─────────┬───────────────┐ │ Name │ Version │ │ postgis │ 3.4.3+6b82d77 │ └─────────┴───────────────┘
After installing extensions, make sure to restart your instance:
$
gel instance restart
Standalone extensions can now be declared in the schema, same as built-in extensions:
using extension postgis;
To restore a dump that uses a standalone extension, that extension must be installed before the restore process.
Using extensions
Syntax
using extension ExtensionName ";"
Extension declaration must be outside any module block since extensions affect the entire database and not a specific module.
DDL commands
This section describes the low-level DDL commands for creating and dropping extensions. You typically don't need to use these commands directly, but knowing about them is useful for reviewing migrations.
create extension
Enable a particular extension for the current schema.
create extension ExtensionName ";"
Examples
Enable GraphQL extension for the current schema:
create extension graphql;
Enable EdgeQL over HTTP extension for the current branch:
create extension edgeql_http;
drop extension
Disable an extension.
drop extension ExtensionName ";"
The command drop extension
disables a currently active extension for
the current branch.
Examples
Disable GraphQL extension for the current schema:
drop extension graphql;
Disable EdgeQL over HTTP extension for the current branch:
drop extension edgeql_http;