Config​
The cfg
module contains a set of types and scalars used for configuring
Gel.
Type |
Description |
The abstract base type for all configuration objects. The properties of this type define the set of configuruation settings supported by Gel. | |
The main configuration object. The properties of this object reflect the overall configuration setting from instance level all the way to session level. | |
The database configuration object. It reflects all the applicable configuration at the Gel database level. | |
cfg::BranchConfig (added in 5.0) |
The database branch configuration object. It reflects all the applicable configuration at the Gel branch level. |
The instance configuration object. | |
cfg::ExtensionConfig (added in 5.0) |
The abstract base type for all extension configuration objects. Each extension can define the necessary configuration settings by extending this type and adding the extension-specific properties. |
An object type representing an authentication profile. | |
An enum type representing the different protocols that Gel speaks. | |
An abstract object type representing a method of authentication | |
A subclass of AuthMethod indicating an "always trust" policy (no authentication). | |
A subclass of AuthMethod indicating password-based authentication. | |
A subclass of AuthMethod indicating basic password-based authentication. | |
A subclass of AuthMethod indicating token-based authentication. | |
A scalar type for storing a quantity of memory storage. |
The main configuration object type.
This type will have only one object instance. The cfg::Config
object
represents the sum total of the current Gel configuration. It reflects
the result of applying instance, branch, and session level configuration.
Examining this object is the recommended way of determining the current
configuration.
Here's an example of checking and disabling access policies:
db>
select cfg::Config.apply_access_policies;
{true}
db>
configure session set apply_access_policies := false;
OK: CONFIGURE SESSION
db>
select cfg::Config.apply_access_policies;
{false}
The branch-level configuration object type.
This type will have only one object instance. The cfg::BranchConfig
object represents the state of the branch and instance-level Gel
configuration.
For overall configuration state please refer to the cfg::Config
instead.
The instance-level configuration object type.
This type will have only one object instance. The cfg::InstanceConfig
object represents the state of only instance-level Gel configuration.
For overall configuraiton state please refer to the cfg::Config
instead.
An abstract type representing extension configuration.
Every extension is expected to define its own extension-specific config
object type extending cfg::ExtensionConfig
. Any necessary extension
configuration setting should be represented as properties of this concrete
config type.
Up to three instances of the extension-specific config type will be created,
each of them with a required single link cfg
to the
cfg::Config
, cfg::DatabaseConfig
, or
cfg::InstanceConfig
object depending on the configuration level.
The cfg::AbstractConfig
exposes a corresponding computed
multi-backlink called extensions
.
For example, ext::pgvector extension exposes
probes
as a configurable parameter via ext::pgvector::Config
object:
db> ...
configure session
set ext::pgvector::Config::probes := 5;
OK: CONFIGURE SESSION
db>
select cfg::Config.extensions[is ext::pgvector::Config]{*};
{ ext::pgvector::Config { id: 12b5c70f-0bb8-508a-845f-ca3d41103b6f, probes: 5, ef_search: 40, }, }
An object type designed to specify a client authentication profile.
db> ...
configure instance insert
Auth {priority := 0, method := (insert Trust)};
OK: CONFIGURE INSTANCE
Below are the properties of the Auth
class.
- priority -> int64
-
The priority of the authentication rule. The lower this number, the higher the priority.
- user -> multi str
-
The name(s) of the database role(s) this rule applies to. If set to
'*'
, then it applies to all roles. - method -> cfg::AuthMethod
-
The name of the authentication method type. Expects an instance of
cfg::AuthMethod
; Valid values are:Trust
for no authentication andSCRAM
for SCRAM-SHA-256 password authentication. - comment -> optional str
-
An optional comment for the authentication rule.
Value |
Description |
cfg::ConnectionTransport.TCP |
Gel binary protocol |
cfg::ConnectionTransport.TCP_PG |
Postgres protocol for the SQL query mode |
cfg::ConnectionTransport.HTTP |
Gel binary protocol tunneled over HTTP |
cfg::ConnectionTransport.SIMPLE_HTTP |
EdgeQL over HTTP and GraphQL endpoints |
An abstract object class that represents an authentication method.
It currently has four concrete subclasses, each of which represent an
available authentication method: cfg::SCRAM
,
cfg::JWT
, cfg::Password
, and
cfg::Trust
.
- transports -> multi cfg::ConnectionTransport
-
Which connection transports this method applies to. The subclasses have their own defaults for this.
cfg::SCRAM
indicates password-based authentication.
It uses a challenge-response scheme to avoid transmitting the
password directly. This policy is implemented via SCRAM-SHA-256
It is available for the TCP
, TCP_PG
, and HTTP
transports
and is the default for TCP
and TCP_PG
.
db> ...
configure instance insert
Auth {priority := 0, method := (insert SCRAM)};
OK: CONFIGURE INSTANCE
cfg::Password
indicates simple password-based authentication.
Unlike cfg::SCRAM
, this policy transmits the password
over the (encrypted) channel. It is implemened using HTTP Basic
Authentication over TLS.
This policy is available only for the SIMPLE_HTTP
transport, where it is
the default.
A scalar type representing a quantity of memory storage.
As with uuid
, datetime
, and several other types, cfg::memory
values are declared by casting from an appropriately formatted string.
db>
select <cfg::memory>'1B'; # 1 byte
{<cfg::memory>'1B'}
db>
select <cfg::memory>'5KiB'; # 5 kibibytes
{<cfg::memory>'5KiB'}
db>
select <cfg::memory>'128MiB'; # 128 mebibytes
{<cfg::memory>'128MiB'}
The numerical component of the value must be a non-negative integer; the
units must be one of B|KiB|MiB|GiB|TiB|PiB
. We're using the explicit
KiB
unit notation (1024 bytes) instead of kB
(which is ambiguous,
and may mean 1000 or 1024 bytes).