Configuration Reference
AngaraBase configuration knobs are managed through the SETTINGS_REGISTRY in engine-utils.
Knobs can be set via SET <name> = <value> (session scope) or in the server config file (global scope).
How to Apply Settings
-- Session scope (immediate, affects current connection only):
SET max_connections = 200;
-- View current value:
SHOW max_connections;
For global (persistent) settings, edit the server configuration file (angarabase.toml):
# angarabase.toml — server configuration file
max_connections = 200
storage.data_directory = "/var/lib/angarabase/data"
transaction_log.durability = "strict"
tls.enabled = true
tls.cert_path = "/etc/angarabase/server.crt"
tls.key_path = "/etc/angarabase/server.key"
Dynamic vs. Static settings:
Dynamic: true— takes effect immediately viaSETwithout server restartDynamic: false— requires server restart to take effect (instance-scope settings)
Typical Production Configuration
# Minimal production-ready angarabase.toml
max_connections = 200
server.addr = "0.0.0.0:5432"
storage.data_directory = "/var/lib/angarabase/data"
storage.transaction_log_directory = "/var/lib/angarabase/wal"
transaction_log.durability = "strict" # fsync on every commit
transaction_log.wal_compression = "lz4" # reduce WAL disk usage
tls.enabled = true
tls.require_on_remote_bind = true
auth.mode = "scram_sha256"
security.dev_mode = false
Configuration Knobs
Dynamic: false means the setting requires a server restart to take effect. Has Validator: yes means invalid values are rejected at
SETtime with SQLSTATE22023.
| Name | Default | Scope | Dynamic | Has Validator | Description |
|---|---|---|---|---|---|
max_connections | 100 | instance | false | yes | Maximum number of concurrent client connections (0 = unlimited). |
server.addr | 127.0.0.1:5152 | instance | false | no | pgwire bind address in host:port format (e.g. 127.0.0.1:5152 or 0.0.0.0:5432) |
server.host | `` | instance | false | no | DEPRECATED: use server.addr instead. pgwire bind host |
server.port | `` | instance | false | no | DEPRECATED: use server.addr instead. pgwire bind port |
storage.data_directory | `` | instance | false | no | storage data dir (immutable) |
storage.transaction_log_directory | `` | instance | false | no | txlog dir (immutable) |
transaction_log.backend | file | instance | false | no | transaction log backend (noop/file/file_bin) |
transaction_log.durability | strict | instance | false | no | transaction log durability (strict/relaxed/group_commit) |
transaction_log.fsync | true | instance | false | yes | transaction log fsync (strict mode; dev override) |
transaction_log.group_commit_v2 | false | instance | false | yes | group_commit waiter batching toggle |
transaction_log.wal_compression | off | instance | false | no | WAL compression mode: off|lz4|zstd |
transaction_log.wal_compression_min_bytes | 256 | instance | false | yes | minimum payload bytes for compression attempt |
transaction_log.wal_archive_enable | false | instance | false | yes | append durable WAL bytes to archive stream |
transaction_log.wal_archive_dir | /tmp/angarabase-dev/wal_archive | instance | false | no | WAL archive directory path |
security.dev_mode | false | instance | false | yes | development mode preset |
security.allow_insecure | false | instance | false | yes | allow insecure combinations (explicit override) |
security.tde_enabled | false | instance | false | yes | transparent data encryption toggle |
security.tde_master_key_id | `` | instance | false | no | non-secret TDE master key identifier |
security.tde_last_rotation_unix | 0 | instance | false | yes | last TDE key rotation time (unix seconds) |
tls.enabled | false | instance | false | yes | enable pgwire TLS |
tls.cert_path | `` | instance | false | no | TLS cert path (PEM) |
tls.key_path | `` | instance | false | no | TLS key path (PEM) |
tls.require_on_remote_bind | false | instance | true | yes | refuse remote bind without TLS |
tls.gost_enabled | false | instance | false | yes | enable GOST crypto profiles (opt-in, fail-closed) |
tls.gost_cipher_suites | `` | instance | false | no | GOST cipher suites preference (TLS 1.2 + GOST ciphers) |
auth.mode | trust | instance | false | no | pgwire auth mode |
rbac.admin_users | `` | instance | true | no | seed list of RBAC admins |
audit.log_path | `` | instance | true | no | audit JSONL sink path |
audit.dml_mode | off | instance | true | no | audit DML policy mode: off|allowlist|denylist |
audit.dml_allowlist | `` | instance | true | no | audit DML allowlist (comma-separated table refs) |
audit.dml_denylist | `` | instance | true | no | audit DML denylist (comma-separated table refs) |
audit.export_json_enabled | false | instance | true | yes | enable JSON audit export worker |
audit.export_syslog_enabled | false | instance | true | yes | enable Syslog audit export worker |
audit.export_rate_limit_rps | 10 | instance | true | yes | audit export max events per second |
ops.allow_sql_shutdown | false | instance | true | yes | enable SQL shutdown trigger |
ops.shutdown_timeout_ms | 1000 | instance | true | yes | graceful shutdown timeout (ms) |
ops.metrics_addr | `` | instance | false | no | metrics bind addr |
ops.admin_addr | `` | instance | false | no | admin API bind addr |
lock_timeout | 0 | session | true | yes | session lock timeout (ms); 0=off |
statement_timeout | 0 | session | true | yes | statement execution timeout (ms); 0=off |
angara.consumer_id | `` | session | true | no | optional logical consumer identifier for the session |
sql.execution_mode | auto | instance | true | no | SQL execution mode: ir_auto|ir_only|ir_strict|force_vector|force_row |
sql.parallel.dop_cap_global | 4 | instance | true | yes | global cap for parallel workers available to SQL runtime |
sql.parallel.dop_cap_query | 2 | instance | true | yes | per-query cap for SQL parallel workers |
aqp_enabled | true | instance | true | yes | adaptive query processing global enable flag |
aqp_mode | conservative | instance | true | no | adaptive mode: conservative|aggressive |
aqp_min_query_time_ms | 100 | instance | true | yes | minimum query latency for learning |
aqp_learning_rate | 0.1 | instance | true | no | AQP EMA learning rate |
aqp_max_correction | 100.0 | instance | true | no | max correction multiplier |
aqp_memory_feedback_limit_mb | 1024 | instance | true | yes | global memory feedback cap in MB |
aqp_variance_threshold | 10.0 | instance | true | no | variance threshold to disable unstable corrections |
aqp_correction_cache_mb | 64 | instance | true | yes | in-memory correction cache budget in MB |
aqp_store_capacity_mb | 1024 | instance | true | yes | AQP advisory store capacity budget in MB |
learned_optimizer_enabled | false | instance | true | yes | learned optimizer master switch |
learned_optimizer_mode | active | instance | true | no | learned optimizer mode: active|shadow |
learned_optimizer_timeout_us | 50 | instance | true | yes | learned predict timeout per operator in microseconds |
learned_optimizer_memory_limit_mb | 64 | instance | true | yes | learned model in-memory budget in MB |
learned_optimizer_confidence_threshold | 0.5 | instance | true | no | global confidence floor for learned predictions |
learned_optimizer_max_nodes_per_query | 20 | instance | true | yes | maximum learned inference calls per query |
learned_optimizer_regression_window | 1000 | instance | true | yes | rolling window size for regression detection |
txn.max_write_set_pages | 65536 | instance | false | yes | max pages modified by one txn |
txn.max_write_set_bytes | 536870912 | instance | false | yes | max bytes modified by one txn |
buffer_pool.uncommitted_pages_ratio_hard | 0.5 | instance | false | no | hard limit for buffer-pool fraction of frames carrying uncommitted page-image deltas |
buffer_pool.backpressure.mode | block | instance | false | no | backpressure mode: block|fail_fast |
buffer_pool.backpressure.timeout_ms | 5000 | instance | false | yes | max wait time in block mode |
wal.vlf_enable | false | instance | true | yes | enable Variable Length Files for WAL |
wal.max_size_mb | 1024 | instance | true | yes | maximum WAL file size in MB |
wal.vlf_size_mb | 64 | instance | true | yes | VLF segment size in MB |
wal.init_vlfs | 4 | instance | true | yes | initial number of VLF segments |
execution.mode | auto | instance | true | no | SQL execution mode (auto/force_vector/force_row) |
execution.vector_batch_size | 4096 | instance | true | yes | vector execution batch size |
execution.query_memory_limit_mb | 256 | instance | true | yes | per-query memory limit in MB |
aqp.enabled | true | instance | true | yes | enable Adaptive Query Processing |
aqp.mode | conservative | instance | true | no | AQP mode (conservative/aggressive) |
aqp.min_query_time_ms | 100 | instance | true | yes | minimum query time for AQP feedback |
aqp.learning_rate | 0.1 | instance | true | no | AQP EMA learning rate |
aqp.max_correction | 100.0 | instance | true | no | maximum AQP correction multiplier |
aqp.variance_threshold | 10.0 | instance | true | no | variance threshold for unstable corrections |
aqp.correction_cache_mb | 64 | instance | true | yes | AQP correction cache size in MB |
aqp.store_capacity_mb | 1024 | instance | true | yes | AQP store capacity in MB |
diagnostics.log_min_duration_ms | -1 | instance | true | yes | slow query log threshold in ms (-1=disabled) |
diagnostics.log_query_text | false | instance | true | yes | include query text in slow log |
diagnostics.stat_statements_max | 1024 | instance | true | yes | max stat_statements entries (0=disabled) |
checkpoint.dirty_track_enabled | true | instance | false | yes | Enable dirty-page bitmap for O(dirty) checkpoint scans instead of O(total) full scan. When true (default) the checkpoint worker uses BufferPool.checkpoint_dirty to skip checkpoints entirely when no pages have been written since the last flush. |
logging.log_level | info | instance | true | yes | structured logging level (error/warn/info/debug/trace) |
Deprecated Settings
Settings with deprecated_since set will log a warning when used. Migrate away before upgrading.
Validation
Settings with validators reject invalid values with SQLSTATE 22023 (invalid_parameter_value):
SET max_connections = 'abc';
-- ERROR: invalid value for parameter "max_connections": "abc" (SQLSTATE 22023)