The SPQR Router configuration can be specified in JSON, TOML, or YAML format. The configuration file passing as a parameter to run command:

spqr-router run --config ./examples/router.yaml

Refer to the pkg/config/router.go file for the most up-to-date configuration options.

General Settings

SettingDescriptionPossible Values
log_levelThe level of logging output.debug, info, warning, error, fatal
pretty_loggingWhether to write logs in an colorized, human-friendly format.true, false
daemonizeWhether to run the router as a daemon.true, false
reuse_portWhether to create a socket with SO_REUSEPORT and SO_REUSEADDR options.true, false
use_systemd_notifierWhether to use systemd notifier.true, false
systemd_notifier_debugWhether to run systemd notifier in debug mode.true, false
with_coordinatorWhether to run the router in a special coordinator mode.true, false
enable_role_systemWhether to enable the role-based access control system.true, false
roles_fileThe file path to the roles configuration.Any valid file path

Network Settings

SettingDescriptionPossible Values
hostThe host address the router listens on.Any valid hostname
router_portThe port number for the router.Any valid port number
router_ro_portThe port number for the read-only queries router.Any valid port number
admin_console_portThe port number for the admin console.Any valid port number
grpc_api_portThe port number for the gRPC API.Any valid port number

Frontend Rules

Frontend rule is a specification of how clients connect to the router.

Refer to the FrontendRule struct in the pkg/config/rules.go file for the most up-to-date configuration options.

SettingDescriptionPossible Values
dbThe database name to which the rule appliesAny valid database name
usrThe user name for which the rule is applicableAny valid username
search_pathThe search path used for the database connectionAny valid search path
auth_ruleSee General Auth SettingsObject of AuthCfg
pool_modeThe mode of connection pooling usedSESSION, TRANSACTION
pool_discardDetermines if DISCARD ALL will be issued after transaction endtrue, false
pool_rollbackSpecifies whether to execute a rollback on connections returned to the pooltrue, false
pool_prepared_statementIndicates if prepared statements should be pooledtrue, false
pool_defaultIf set to true, uses the default pool settings defined elsewheretrue, false

Backend Rules

Backend Rule is a global setting that determines how the router connects to every shard.

Refer to the BackendRule struct in the pkg/config/router.go and pkg/config/auth_backend.go file for the most up-to-date configuration options.

SettingDescriptionPossible Values
dbThe database name to connect to.Any valid database name
usrThe username for database authentication.Any valid username
auth_rulesA map of authentication rules for backend connections.Map of string keys to AuthBackendCfg objects.
auth_ruleThe default auth rule. On object with usr and password fieldsAn AuthBackendCfg object
pool_defaultIndicates if the connection should use the default pool settings.true or false
connection_limitThe maximum number of connections allowed to the backend.Any integer value
connection_retriesThe number of retries for a failed connection attempt.Any integer value

Shards

Map of string to Shard objects. Refer to the Shard struct in the pkg/config/router.go file for the most up-to-date configuration options.

SettingDescriptionPossible Values
hostsA list of host addresses for the shard.Array of host addresses
typeUse DATA alwaysDATA, WORLD
tlsSee auth.mdxObject of TLSConfig

Statistics Settings

SettingDescriptionPossible Values
time_quantilesThe list of time quantiles to show query time statistics. When empty, no statistics is collectedArray of floats. For example, [0.8]

Feature Flags

SettingDescriptionPossible Values
maintain_paramsWhether to maintain parameters flag.true, false
query_routing.default_route_behaviourWhether to explicitly block multishard queries.BLOCK, ALLOW
with_jaegerWhether to integrate with Jaeger for tracing.true, false
world_shard_fallbackWhether to enable fallback to world shard.true, false

Mode Settings

SettingDescriptionPossible Values
pool_modeDefines the pool modes.SESSION, TRANSACTION
shard_typeDefines the shard types.DATA, WORLD
router_modeTL;DR Use PROXY always. Defines the router modes. Local mode acts like a connection pooler, Proxy mode acts like a query router in sharded installation.LOCAL, PROXY

Debug Settings

SettingDescriptionPossible Values
show_notice_messagesWhether to show notice messages.true, false
pid_file_nameThe file name to store the process ID.Any valid filepath
log_file_nameThe file name for logging output.Any valid filepath
pgproto_debugPostgreSQL protocol debug flag.true, false

QDB Settings

SettingDescriptionPossible Values
use_init_sqlWhether to execute commands from Init SQL filetrue, false
use_coordinator_initWhether to execute commands from Init SQL file on Routertrue, false
init_sqlPath to SQL file that router will execute before the startAny valid file path
exit_on_init_sqlWhether to exit if the parsing of the SQL file failstrue, false
memqdb_backup_pathMemQDB backup state path. MemQDB’s state restored if a file backup exists during the router startup. If there is no file, init.sql will be usedAny valid file path

The SPQR Router configuration can be specified in JSON, TOML, or YAML format. The configuration file passing as a parameter to run command:

spqr-router run --config ./examples/router.yaml

Refer to the pkg/config/router.go file for the most up-to-date configuration options.

General Settings

SettingDescriptionPossible Values
log_levelThe level of logging output.debug, info, warning, error, fatal
pretty_loggingWhether to write logs in an colorized, human-friendly format.true, false
daemonizeWhether to run the router as a daemon.true, false
reuse_portWhether to create a socket with SO_REUSEPORT and SO_REUSEADDR options.true, false
use_systemd_notifierWhether to use systemd notifier.true, false
systemd_notifier_debugWhether to run systemd notifier in debug mode.true, false
with_coordinatorWhether to run the router in a special coordinator mode.true, false
enable_role_systemWhether to enable the role-based access control system.true, false
roles_fileThe file path to the roles configuration.Any valid file path

Network Settings

SettingDescriptionPossible Values
hostThe host address the router listens on.Any valid hostname
router_portThe port number for the router.Any valid port number
router_ro_portThe port number for the read-only queries router.Any valid port number
admin_console_portThe port number for the admin console.Any valid port number
grpc_api_portThe port number for the gRPC API.Any valid port number

Frontend Rules

Frontend rule is a specification of how clients connect to the router.

Refer to the FrontendRule struct in the pkg/config/rules.go file for the most up-to-date configuration options.

SettingDescriptionPossible Values
dbThe database name to which the rule appliesAny valid database name
usrThe user name for which the rule is applicableAny valid username
search_pathThe search path used for the database connectionAny valid search path
auth_ruleSee General Auth SettingsObject of AuthCfg
pool_modeThe mode of connection pooling usedSESSION, TRANSACTION
pool_discardDetermines if DISCARD ALL will be issued after transaction endtrue, false
pool_rollbackSpecifies whether to execute a rollback on connections returned to the pooltrue, false
pool_prepared_statementIndicates if prepared statements should be pooledtrue, false
pool_defaultIf set to true, uses the default pool settings defined elsewheretrue, false

Backend Rules

Backend Rule is a global setting that determines how the router connects to every shard.

Refer to the BackendRule struct in the pkg/config/router.go and pkg/config/auth_backend.go file for the most up-to-date configuration options.

SettingDescriptionPossible Values
dbThe database name to connect to.Any valid database name
usrThe username for database authentication.Any valid username
auth_rulesA map of authentication rules for backend connections.Map of string keys to AuthBackendCfg objects.
auth_ruleThe default auth rule. On object with usr and password fieldsAn AuthBackendCfg object
pool_defaultIndicates if the connection should use the default pool settings.true or false
connection_limitThe maximum number of connections allowed to the backend.Any integer value
connection_retriesThe number of retries for a failed connection attempt.Any integer value

Shards

Map of string to Shard objects. Refer to the Shard struct in the pkg/config/router.go file for the most up-to-date configuration options.

SettingDescriptionPossible Values
hostsA list of host addresses for the shard.Array of host addresses
typeUse DATA alwaysDATA, WORLD
tlsSee auth.mdxObject of TLSConfig

Statistics Settings

SettingDescriptionPossible Values
time_quantilesThe list of time quantiles to show query time statistics. When empty, no statistics is collectedArray of floats. For example, [0.8]

Feature Flags

SettingDescriptionPossible Values
maintain_paramsWhether to maintain parameters flag.true, false
query_routing.default_route_behaviourWhether to explicitly block multishard queries.BLOCK, ALLOW
with_jaegerWhether to integrate with Jaeger for tracing.true, false
world_shard_fallbackWhether to enable fallback to world shard.true, false

Mode Settings

SettingDescriptionPossible Values
pool_modeDefines the pool modes.SESSION, TRANSACTION
shard_typeDefines the shard types.DATA, WORLD
router_modeTL;DR Use PROXY always. Defines the router modes. Local mode acts like a connection pooler, Proxy mode acts like a query router in sharded installation.LOCAL, PROXY

Debug Settings

SettingDescriptionPossible Values
show_notice_messagesWhether to show notice messages.true, false
pid_file_nameThe file name to store the process ID.Any valid filepath
log_file_nameThe file name for logging output.Any valid filepath
pgproto_debugPostgreSQL protocol debug flag.true, false

QDB Settings

SettingDescriptionPossible Values
use_init_sqlWhether to execute commands from Init SQL filetrue, false
use_coordinator_initWhether to execute commands from Init SQL file on Routertrue, false
init_sqlPath to SQL file that router will execute before the startAny valid file path
exit_on_init_sqlWhether to exit if the parsing of the SQL file failstrue, false
memqdb_backup_pathMemQDB backup state path. MemQDB’s state restored if a file backup exists during the router startup. If there is no file, init.sql will be usedAny valid file path