Sistema de Banco de Dados
Pool de conexões e configuração de banco de dados SQL. Suporta PostgreSQL, MySQL, SQLite, Microsoft SQL Server e Oracle.
Tipos de Entradas
| Tipo | Descrição |
|---|---|
db.sql.postgres |
Banco de dados PostgreSQL |
db.sql.mysql |
Banco de dados MySQL |
db.sql.sqlite |
Banco de dados SQLite |
db.sql.mssql |
Microsoft SQL Server |
db.sql.oracle |
Banco de dados Oracle |
Configuração
Bancos de Dados Padrão (PostgreSQL, MySQL, MSSQL, Oracle)
# src/data/_index.yaml
version: "1.0"
namespace: app.data
entries:
- name: main_db
kind: db.sql.postgres
host: "localhost"
port: 5432
database: "myapp"
username: "dbuser"
password: "dbpass"
pool:
max_open: 25
max_idle: 5
max_lifetime: "1h"
options:
sslmode: "disable"
lifecycle:
auto_start: true
SQLite
- name: cache_db
kind: db.sql.sqlite
file: "/var/data/cache.db" # Use :memory: para em memória
pool:
max_open: 1
max_idle: 1
max_lifetime: "1h"
options:
cache: "shared"
lifecycle:
auto_start: true
Campos de Conexão
Campos de Banco de Dados Padrão
| Campo | Tipo | Descrição |
|---|---|---|
host |
string | Endereço do host do banco de dados |
port |
int | Número da porta do banco de dados |
database |
string | Nome do banco de dados |
username |
string | Usuário do banco de dados |
password |
string | Senha do banco de dados |
pool |
object | Configurações de pool de conexões |
options |
map | Opções específicas do banco de dados |
lifecycle |
object | Configuração de ciclo de vida |
Campos SQLite
| Campo | Tipo | Descrição |
|---|---|---|
file |
string | Caminho do arquivo de banco de dados ou :memory: |
pool |
object | Configurações de pool de conexões |
options |
map | Opções específicas do SQLite |
lifecycle |
object | Configuração de ciclo de vida |
Campos de Variáveis de Ambiente
Use o sufixo _env para carregar valores de variáveis de ambiente ou entradas env.variable:
| Campo | Descrição |
|---|---|
host_env |
Host de variável de ambiente |
port_env |
Porta de variável de ambiente |
database_env |
Nome do banco de dados do ambiente |
username_env |
Usuário do ambiente |
password_env |
Senha do ambiente |
- name: prod_db
kind: db.sql.postgres
host_env: "DB_HOST"
port_env: "DB_PORT"
database_env: "DB_NAME"
username_env: "DB_USER"
password_env: "app.secrets:db_password" # Referencia entrada env.variable
env.variable para credenciais. Veja Ambiente para gerenciamento seguro de segredos.
Pool de Conexões
Configure o comportamento de pool de conexões. Configurações de pool mapeiam para o pool de conexões database/sql do Go.
| Campo | Tipo | Padrão | Descrição |
|---|---|---|---|
max_open |
int | 0 | Máximo de conexões abertas (0 = ilimitado) |
max_idle |
int | 0 | Máximo de conexões ociosas (0 = ilimitado) |
max_lifetime |
duration | 1h | Tempo de vida máximo da conexão |
pool:
max_open: 25 # Limita conexões concorrentes
max_idle: 5 # Mantém 5 conexões prontas
max_lifetime: "30m" # Recicla conexões a cada 30 minutos
max_idle menor ou igual a max_open. Conexões excedendo max_lifetime são fechadas e substituídas, ajudando a recuperar de conexões obsoletas.
Formatos DSN
Cada tipo de banco de dados constrói um DSN a partir da configuração:
PostgreSQL {id="dsn-postgresql"}
postgres://username:password@host:port/database?sslmode=disable
MySQL {id="dsn-mysql"}
username:password@tcp(host:port)/database?charset=utf8mb4
SQLite {id="dsn-sqlite"}
file:/path/to/database.db?cache=shared
:memory:?mode=memory
Microsoft SQL Server {id="dsn-mssql"}
sqlserver://username:password@host:port?database=dbname
Oracle {id="dsn-oracle"}
oracle://username:password@host:port/service_name
Opções de Banco de Dados
Opções comuns específicas de cada banco de dados:
PostgreSQL {id="options-postgresql"}
options:
sslmode: "require" # disable, require, verify-ca, verify-full
connect_timeout: "10" # Timeout de conexão em segundos
application_name: "myapp"
MySQL {id="options-mysql"}
options:
charset: "utf8mb4"
parseTime: "true" # Analisa valores de tempo para time.Time
loc: "Local" # Fuso horário
SQLite {id="options-sqlite"}
options:
cache: "shared" # shared, private
mode: "rwc" # ro, rw, rwc, memory
_journal_mode: "WAL" # DELETE, TRUNCATE, PERSIST, MEMORY, WAL, OFF
Microsoft SQL Server {id="options-mssql"}
options:
encrypt: "true"
TrustServerCertificate: "false"
Oracle {id="options-oracle"}
options:
poolMinSessions: "1"
poolMaxSessions: "10"
poolIncrement: "1"
Exemplos
PostgreSQL com SSL
- name: secure_postgres
kind: db.sql.postgres
host: "db.example.com"
port: 5432
database: "production"
username: "app_user"
password: "${DB_PASSWORD}"
pool:
max_open: 50
max_idle: 10
max_lifetime: "1h"
options:
sslmode: "verify-full"
sslcert: "/certs/client.crt"
sslkey: "/certs/client.key"
sslrootcert: "/certs/ca.crt"
lifecycle:
auto_start: true
Réplica de Leitura MySQL
- name: mysql_replica
kind: db.sql.mysql
host: "replica.db.example.com"
port: 3306
database: "app"
username: "readonly"
password_env: "REPLICA_PASSWORD"
pool:
max_open: 20
max_idle: 5
max_lifetime: "30m"
options:
charset: "utf8mb4"
parseTime: "true"
readTimeout: "30s"
SQLite Em Memória
- name: test_db
kind: db.sql.sqlite
file: ":memory:"
pool:
max_open: 1
max_idle: 1
options:
cache: "shared"
mode: "memory"
Configuração com Múltiplos Bancos de Dados
entries:
# Banco de dados principal
- name: users_db
kind: db.sql.postgres
host_env: "USERS_DB_HOST"
port: 5432
database: "users"
username_env: "USERS_DB_USER"
password_env: "USERS_DB_PASSWORD"
lifecycle:
auto_start: true
# Banco de dados de analytics
- name: analytics_db
kind: db.sql.mysql
host_env: "ANALYTICS_DB_HOST"
port: 3306
database: "analytics"
username_env: "ANALYTICS_DB_USER"
password_env: "ANALYTICS_DB_PASSWORD"
lifecycle:
auto_start: true
# Cache local
- name: cache
kind: db.sql.sqlite
file: "/var/cache/app.db"
lifecycle:
auto_start: true
Registro em Tempo de Execução
Bancos de dados podem ser registrados em tempo de execução usando o módulo registry, permitindo configuração dinâmica de banco de dados baseada no estado da aplicação ou configuração externa.
API Lua
Veja Módulo SQL para API de operações de banco de dados.