Sistema de Banco de Dados
Sistema de Banco de Dados
Seção intitulada “Sistema de Banco de Dados”Pool de conexões e configuração de banco de dados SQL. Suporta PostgreSQL, MySQL e SQLite.
Tipos de Entradas
Seção intitulada “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 |
Configuração
Seção intitulada “Configuração”Bancos de Dados Padrão (PostgreSQL, MySQL)
Seção intitulada “Bancos de Dados Padrão (PostgreSQL, MySQL)”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 - 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: trueCampos de Conexão
Seção intitulada “Campos de Conexão”Campos de Banco de Dados Padrão
Seção intitulada “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
Seção intitulada “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
Seção intitulada “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.variableenv.variable para credenciais. Veja Ambiente para gerenciamento seguro de segredos.
Pool de Conexões
Seção intitulada “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 minutosmax_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
Seção intitulada “Formatos DSN”Cada tipo de banco de dados constrói um DSN a partir da configuração:
PostgreSQL {id=“dsn-postgresql”}
Seção intitulada “PostgreSQL {id=“dsn-postgresql”}”postgres://username:password@host:port/database?sslmode=disableMySQL {id=“dsn-mysql”}
Seção intitulada “MySQL {id=“dsn-mysql”}”username:password@tcp(host:port)/database?charset=utf8mb4SQLite {id=“dsn-sqlite”}
Seção intitulada “SQLite {id=“dsn-sqlite”}”file:/path/to/database.db?cache=shared:memory:?mode=memoryOpções de Banco de Dados
Seção intitulada “Opções de Banco de Dados”Opções comuns específicas de cada banco de dados:
PostgreSQL {id=“options-postgresql”}
Seção intitulada “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”}
Seção intitulada “MySQL {id=“options-mysql”}”options: charset: "utf8mb4" parseTime: "true" # Analisa valores de tempo para time.Time loc: "Local" # Fuso horárioSQLite {id=“options-sqlite”}
Seção intitulada “SQLite {id=“options-sqlite”}”options: cache: "shared" # shared, private mode: "rwc" # ro, rw, rwc, memory _journal_mode: "WAL" # DELETE, TRUNCATE, PERSIST, MEMORY, WAL, OFFExemplos
Seção intitulada “Exemplos”PostgreSQL com SSL
Seção intitulada “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: trueRéplica de Leitura MySQL
Seção intitulada “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
Seção intitulada “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
Seção intitulada “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: trueRegistro em Tempo de Execução
Seção intitulada “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
Seção intitulada “API Lua”Veja Módulo SQL para API de operações de banco de dados.
Veja Também
Seção intitulada “Veja Também”- Módulo SQL - Referência da API Lua
- Store - Armazenamento chave-valor baseado em
database.sql - Queue - Handler de fila baseado em SQL