Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Quickstart (testing)

Goal

Поднять angarabased, подключиться через psql, выполнить базовый DDL/DML и убедиться, что pgwire работает.

Prerequisites

  • Linux x86_64
  • Один из вариантов установки:
  • Rust toolchain (см. rust-toolchain.toml) для source build,
  • или portable archive x86_64-unknown-linux-gnu (glibc >= 2.28).

Install from portable archive

mkdir -p /opt/angarabase
tar -xzf angarabase-0.6.3-x86_64-unknown-linux-gnu.tar.gz -C /opt/angarabase
/opt/angarabase/angarabase-0.6.3/bin/angarabase-server --version

If runtime glibc is below baseline (2.28), angarabase-server exits fail-closed with an explicit compatibility message.

Native package flow

For RPM/DEB deployments, service start is intentionally blocked before secure init:

angarabase-server --init /var/lib/angarabase --superuser admin --auth-mode scram --superuser-password-file /secure/path/pass.txt --require-auth
systemctl start angarabase

If you intentionally need trust bootstrap for isolated labs, it must be explicit:

angarabase-server --init /var/lib/angarabase --auth-mode trust --insecure-trust

Build

cargo build -p angarabase-server
cargo build -p angara-cli

Run server (local)

AngaraBase использует явную инициализацию инстанса (--init) перед обычным запуском.

Минимальный путь для тестирования (без ручного создания конфига):

  1. Выполните одноразовую инициализацию в директории инстанса.
target/debug/angarabase-server --init /tmp/angarabase-instance --superuser angara_root --superuser-password 'change-me' --auth-mode scram

По умолчанию будет создано:

  • data/ в /tmp/angarabase-instance/data
  • txlog/ в /tmp/angarabase-instance/txlog
  • конфиг angarabase.conf в /tmp/angarabase-instance/angarabase.conf
  1. Запустите сервер:
target/debug/angarabase-server --config /tmp/angarabase-instance/angarabase.conf

В этом сценарии используется SCRAM bootstrap user angara_root. Для локального trust/no-auth режима можно явно запускать с --allow-insecure-no-auth.

SecurityContext note:

  • In scram/cert modes, protected SQL execution requires session context.
  • Minimal setup for tenant-scoped workloads:
SET SESSION CONTEXT 'app.tenant_id' = 'public';

Альтернативный путь (если вы хотите использовать существующий конфиг):

  • --config <path> при --init читается как input-конфиг, если файл существует,
  • и записывается как output-конфиг, если файл не существует.

Примеры:

# init using an existing config (input)
target/debug/angarabase-server --config ./angarabase.conf --init

# init and write a new config (output; file must not exist)
target/debug/angarabase-server --config /tmp/angarabase.conf --init /tmp/angarabase-instance

Для локальной разработки допускается shortcut:

target/debug/angarabase-server --config angarabase.conf --dev

--dev сохраняет auto-init поведение только для dev/test сценариев.

Connect with psql

psql "host=127.0.0.1 port=5432 user=angara_root dbname=base password=change-me sslmode=disable"

Smoke SQL

CREATE TABLE t (id INT PRIMARY KEY, v INT);
INSERT INTO t (id, v) VALUES (1, 10);
INSERT INTO t (id, v) VALUES (2, 20);
SELECT * FROM t ORDER BY id;

Restart check (DDL survives restart)

CREATE TABLE metadata (catalog) should survive restart.

  1. Остановите сервер (Ctrl+C).
  2. Запустите снова.
  3. Проверьте, что таблица видна:
SELECT table_name FROM sys.tables WHERE table_name = 't';

Sys introspection (sys.*)

Примеры полезных запросов:

SELECT * FROM sys.identity;
SELECT * FROM sys.health;
SELECT * FROM sys.settings WHERE name IN ('server.addr','storage.data_directory');
SELECT * FROM sys.tables;
SELECT * FROM sys.columns WHERE table_name = 't';

Optional: SQL shutdown (fail-closed)

По умолчанию shutdown через SQL выключен. Чтобы включить (локально/для тестов):

export ANGARABASE_ALLOW_SQL_SHUTDOWN=1

После этого можно запросить shutdown из psql:

SELECT sys.request_shutdown();

If something fails

Дальше

После того как сервер ответил psql -h 127.0.0.1 и базовый SELECT отработал, логичные следующие шаги: