Getting Started with HeliosDB
Container images: HeliosDB Full images are not published on Docker Hub or any other public registry. Images and Helm charts are provided through private registry access during onboarding: contact sales@heliosdb.com. The examples on this page use
heliosdb-full:<tag>, an image built locally from the licensed source distribution (docker build -t heliosdb-full:<tag> .); replace it with the image reference you receive if you use the private registry.
Estimated Time: 30 minutes
This guide helps you install, configure and run your first queries in under 30 minutes.
Table of Contents
- Prerequisites
- Installation
- Starting HeliosDB
- Connecting to HeliosDB
- Creating Your First Database
- Running Your First Queries
- Loading Sample Data
- Next Steps
Prerequisites
System Requirements
Minimum (for development/testing):
- CPU: 2 cores
- RAM: 4 GB
- Disk: 10 GB available space
- OS: Linux, macOS, or Windows
Recommended (for production):
- CPU: 8+ cores
- RAM: 32+ GB
- Disk: 100+ GB SSD (NVMe preferred)
- Network: 10 Gbps
- OS: Ubuntu 22.04 LTS or RHEL 9
Software Dependencies
- Rust: 1.75+ (if building from source)
- Docker: 24.0+ (for containerized deployment)
- PostgreSQL client: 14+ (for psql CLI)
Installation
Choose one of the following installation methods:
Option 1: Docker (Recommended for Quick Start)
Quickest way to start: no compilation required.
# Build the HeliosDB Full image from the licensed source distributiondocker build -t heliosdb-full:latest .
# Run HeliosDB containerdocker run -d --name heliosdb \ -e HELIOSDB_ALLOW_EXTERNAL=1 \ -p 127.0.0.1:5432:5432 \ -p 127.0.0.1:8443:8443 \ -v heliosdb_data:/var/lib/heliosdb/data \ heliosdb-full:latest
# Verify it's runningdocker logs heliosdb 2>&1 | grep -E "listening|Server ready"
# Expected output:# PostgreSQL protocol listening on 0.0.0.0:5432# HTTP Gateway listening on 0.0.0.0:8443# Server ready - accepting connectionsThe image binds all interfaces inside the container, so it needs
HELIOSDB_ALLOW_EXTERNAL=1 to start; the -p options above publish the ports on
the host’s loopback address only. For credentials and the MySQL and Oracle
listeners, follow the Quick Start.
Ports:
- 5432: PostgreSQL wire protocol
- 8443: HTTP gateway (plain HTTP;
POST /api/v1/query)
Option 2: Native Binary
HeliosDB Full is distributed to licensed customers. Native binaries, container images and source access are provided during onboarding — contact sales@heliosdb.com for access.
Starting HeliosDB
Docker Deployment
If you installed via Docker, skip this section (the server is already running).
Native Binary Deployment
The server binary is heliosdb-full. It has no init or server subcommands:
it creates the data directory on first start and runs in the foreground until
you stop it (run it under systemd or another supervisor for production).
# Start the server (PostgreSQL on 5432 and the HTTP gateway on 8443, bound to 127.0.0.1)heliosdb-full --data-dir /var/lib/heliosdb/data
# More listenersheliosdb-full --data-dir /var/lib/heliosdb/data --enable-mysql --enable-oracle
# Remote clients: bind a private address and opt in explicitlyheliosdb-full --data-dir /var/lib/heliosdb/data --bind-addr 10.0.0.12 --allow-externalSettings come from command-line flags and HELIOSDB_* environment variables; a
TOML file can be passed with --config (or HELIOSDB_CONFIG). See the
Server Configuration Reference.
Verify server is running:
curl -s http://127.0.0.1:8443/health# {"status":"healthy","version":"..."}
ss -tlnp | grep 5432Connecting to HeliosDB
Using psql (PostgreSQL Client)
Install psql (if not already installed):
# Ubuntu/Debiansudo apt install postgresql-client
# macOSbrew install libpqConnect to HeliosDB:
# Using default settingspsql -h localhost -p 5432 -U postgres -d postgres
# Enter the superuser password (see the Quick Start credentials table)
# You should see:# psql (15.4, server <version>)# Type "help" for help.## postgres=#Using Python Client
Install a PostgreSQL driver (HeliosDB Full speaks the PostgreSQL wire protocol):
pip install "psycopg[binary]"Connect and query:
import osimport psycopg
with psycopg.connect( host="localhost", port=5432, user="postgres", password=os.environ["PGPASSWORD"], # the superuser password dbname="postgres",) as conn: print(conn.execute("SELECT version()").fetchone())See CONNECTING.md for more connection methods (Java, JavaScript, Go, etc.).
Creating Your First Database
Step 1: Create Database
-- Create a new databaseCREATE DATABASE myapp;
-- List all databases\l
-- Connect to new database\c myappStep 2: Create Schema
-- Create users tableCREATE TABLE users ( id SERIAL PRIMARY KEY, username VARCHAR(50) UNIQUE NOT NULL, email VARCHAR(255) UNIQUE NOT NULL, created_at TIMESTAMP DEFAULT NOW(), profile JSONB);
-- Create indexesCREATE INDEX idx_users_email ON users(email);CREATE INDEX idx_users_created_at ON users(created_at);
-- Create posts tableCREATE TABLE posts ( id SERIAL PRIMARY KEY, user_id INTEGER REFERENCES users(id) ON DELETE CASCADE, title VARCHAR(255) NOT NULL, content TEXT, published_at TIMESTAMP, tags TEXT[], metadata JSONB);
-- Create index on foreign keyCREATE INDEX idx_posts_user_id ON posts(user_id);Running Your First Queries
Insert Data
-- Insert usersINSERT INTO users (username, email, profile) VALUES('alice', 'alice@example.com', '{"role": "admin", "verified": true}'),('bob', 'bob@example.com', '{"role": "user", "verified": false}'),('charlie', 'charlie@example.com', '{"role": "moderator", "verified": true}');
-- Insert postsINSERT INTO posts (user_id, title, content, published_at, tags) VALUES(1, 'Getting Started with HeliosDB', 'This is my first post...', NOW(), ARRAY['heliosdb', 'tutorial']),(1, 'Advanced Features', 'Let me show you...', NOW(), ARRAY['heliosdb', 'advanced']),(2, 'Hello World', 'My introduction...', NOW(), ARRAY['intro']);Query Data
-- Simple SELECTSELECT * FROM users;
-- Filter with WHERESELECT username, emailFROM usersWHERE profile->>'role' = 'admin';
-- JOIN tablesSELECT u.username, p.title, p.published_atFROM users uJOIN posts p ON u.id = p.user_idWHERE p.published_at > NOW() - INTERVAL '7 days'ORDER BY p.published_at DESC;
-- Aggregate dataSELECT u.username, COUNT(p.id) AS post_countFROM users uLEFT JOIN posts p ON u.id = p.user_idGROUP BY u.id, u.usernameORDER BY post_count DESC;Update Data
-- Update single rowUPDATE usersSET profile = profile || '{"verified": true}'WHERE username = 'bob';
-- Update with JOINUPDATE postsSET metadata = '{"featured": true}'WHERE user_id IN ( SELECT id FROM users WHERE profile->>'role' = 'admin');Delete Data
-- Delete with conditionDELETE FROM posts WHERE published_at IS NULL;
-- Cascade delete (posts will be auto-deleted due to FK constraint)DELETE FROM users WHERE username = 'charlie';Loading Sample Data
Option 1: Load from CSV
-- Create tableCREATE TABLE sales ( id SERIAL PRIMARY KEY, product VARCHAR(100), quantity INTEGER, price DECIMAL(10,2), sale_date DATE);
-- Load from CSVCOPY sales (product, quantity, price, sale_date)FROM '/path/to/sales.csv'DELIMITER ','CSV HEADER;
-- VerifySELECT COUNT(*) FROM sales;Option 2: Generate Random Data
-- Install random data generator extensionCREATE EXTENSION IF NOT EXISTS helios_random;
-- Generate 1 million random usersINSERT INTO users (username, email, profile)SELECT 'user_' || generate_series AS username, 'user' || generate_series || '@example.com' AS email, json_build_object( 'role', (ARRAY['user', 'admin', 'moderator'])[floor(random() * 3 + 1)], 'verified', random() > 0.5 )::jsonb AS profileFROM generate_series(1, 1000000);
-- VerifySELECT COUNT(*) FROM users;-- Output: 1000000Next Steps
With HeliosDB installed and your first queries run, these are the next topics:
1. Learn Advanced Querying
- Query Guide - Comprehensive query examples
- Data Types Reference - All supported data types
2. Explore Unique Features
- Vector Search: Vector Search Guide
- Natural Language Queries: NL2SQL Guide
- Time-Series: Time-Series Guide
- Graph Queries: Graph Query Guide
3. Production Deployment
4. Development
5. Get Help
- FAQ - Frequently Asked Questions
- Support: support@heliosdb.com
- Discord Community
Quick Reference
Useful Commands
-- List databases\l
-- List tables\dt
-- Describe table\d users
-- List indexes\di
-- Show current databaseSELECT current_database();
-- Show server versionSELECT version();
-- Show active connectionsSELECT * FROM pg_stat_activity;
-- Show database sizeSELECT pg_size_pretty(pg_database_size('myapp'));
-- Show table sizeSELECT pg_size_pretty(pg_total_relation_size('users'));Configuration and Files
- Settings: command-line flags and
HELIOSDB_*environment variables; an optional TOML file via--config - Logs: the server’s standard output (
docker logs heliosdbfor the container) - Data directory:
--data-dir(/var/lib/heliosdb/datain the container image)
Common Issues
Can’t connect to server?
# Check if the server is runningcurl -s http://127.0.0.1:8443/healthdocker ps --filter name=heliosdb
# Check if port is listeningss -tlnp | grep 5432The server binds 127.0.0.1 by default; remote clients need --bind-addr and
--allow-external.
Permission denied?
# Fix data directory permissionssudo chown -R $USER:$USER /var/lib/heliosdbNext: Connecting to HeliosDB →