Overview
Blnk uses PostgreSQL 16 as its primary data store. This guide covers production database setup, migrations, connection pooling, and backup strategies.Requirements
- PostgreSQL 16 or later
- Minimum 4GB RAM (8GB+ recommended for production)
- SSD storage for optimal performance
- Regular backup storage (separate from database storage)
Installation
Using Docker (Recommended)
Ubuntu/Debian
macOS
Database Schema
Blnk uses a dedicatedblnk schema with the following core tables:
Core Tables
ledgers - Financial ledgersIndexes
Critical indexes for performance:Database Migrations
Blnk includes built-in migration support using SQL files in the/sql directory.
Running Migrations
Using Blnk CLI:Migration Files
Migrations are timestamp-based SQL files:+migrate Up and +migrate Down directives:
Connection Configuration
Connection String Format
Configuration in blnk.json
Environment Variables
Alternatively, use environment variables:Connection Pool Tuning
Default Settings
Blnk’s default connection pool settings (from config/config.go:72-77):Production Recommendations
High-traffic deployment:Connection Pool Formula
PostgreSQL Configuration
postgresql.conf Settings
For production workloads, tune PostgreSQL:Apply Configuration
SSL/TLS Configuration
Enable SSL in PostgreSQL
- Generate SSL certificates:
- Update postgresql.conf:
- Update connection string:
SSL Modes
disable- No SSL (not recommended for production)require- SSL required, no certificate verificationverify-ca- SSL required, verify CAverify-full- SSL required, verify CA and hostname
Backup Strategies
pg_dump Backup
Full backup:Automated Backup Script
Continuous Archiving (WAL)
For point-in-time recovery, enable WAL archiving:Restore from Backup
Monitoring
Health Checks
Blnk’s health endpoint checks database connectivity (cmd/server.go:158-180):PostgreSQL Statistics
Slow Query Log
Enable slow query logging:Performance Optimization
Vacuum and Analyze
Autovacuum Configuration
Query Optimization
Use EXPLAIN ANALYZE:Replication Setup
Primary Configuration
Standby Configuration
Troubleshooting
Connection Refused
Check if PostgreSQL is running:Too Many Connections
Increase max_connections or reduce connection pool:Slow Queries
Add missing indexes:Next Steps
- Redis Setup - Configure caching and queues
- Production Checklist - Pre-deployment verification
- Docker Deployment - Containerized setup