BetterStructureSql is configured via config/initializers/better_structure_sql.rb.
# config/initializers/better_structure_sql.rb
BetterStructureSql.configure do |config|
# ========================================
# Core Settings
# ========================================
# Replace Rails' default rake db:schema:dump task (opt-in)
# Default: false
# When false, use explicit task: rails db:schema:dump_better
config.replace_default_dump = false
# Output file path (relative to Rails.root)
# Default: 'db/structure.sql'
config.output_path = 'db/structure.sql'
# Schema search path
# Default: '"$user", public'
config.search_path = '"$user", public'
# ========================================
# Schema Components
# ========================================
# Include PostgreSQL extensions (e.g., pgcrypto, uuid-ossp)
# Default: true
config.include_extensions = true
# Include database functions
# Default: true
config.include_functions = true
# Include triggers
# Default: true
config.include_triggers = true
# Include views
# Default: true
config.include_views = true
# Include materialized views (PostgreSQL only)
# Default: true
config.include_materialized_views = true
# Include sequences (PostgreSQL only, auto-generated sequences always included)
# Default: true
config.include_sequences = true
# Include custom types and enums (PostgreSQL ENUM, MySQL ENUM/SET)
# Default: true
config.include_custom_types = true
# Include domains (PostgreSQL only)
# Default: true
config.include_domains = true
# Include rules (PostgreSQL only, experimental)
# Default: false
config.include_rules = false
# Include database object comments (PostgreSQL only)
# Default: false
config.include_comments = false
# ========================================
# Schema Versioning (Optional)
# ========================================
# Enable schema version storage
# Default: false
config.enable_schema_versions = true
# Number of schema versions to keep (0 = unlimited)
# Default: 10
config.schema_versions_limit = 10
# Table name for schema versions
# Default: 'better_structure_sql_schema_versions'
config.schema_versions_table = 'better_structure_sql_schema_versions'
# ========================================
# Formatting
# ========================================
# Number of spaces for indentation
# Default: 2
config.indent_size = 2
# Add blank lines between major sections
# Default: true
config.add_section_spacing = true
# Sort tables alphabetically
# Default: true
config.sort_tables = true
# Sort indexes alphabetically within each table
# Default: true
config.sort_indexes = true
# ========================================
# Multi-File Output (Optional)
# ========================================
# Set output_path to directory for multi-file mode
# Example: 'db/schema' (instead of 'db/structure.sql')
# This enables automatic splitting into numbered directories
# Maximum lines per file in multi-file mode
# Default: 500
config.max_lines_per_file = 500
# Overflow threshold (1.1 = allow 10% overflow before splitting)
# Default: 1.1
config.overflow_threshold = 1.1
# Generate _manifest.json with metadata
# Default: true
config.generate_manifest = true
# ========================================
# Database Adapter (Auto-Detected)
# ========================================
# Adapter is automatically detected from ActiveRecord connection
# No configuration needed - works with PostgreSQL, MySQL, SQLite
# Adapter-specific features are automatically enabled/disabled
endType: Boolean
Default: false
When true, replaces Rails' rake db:schema:dump task with BetterStructureSql.
config.replace_default_dump = true
# Now `rails db:schema:dump` uses BetterStructureSqlType: String
Default: 'db/structure.sql'
Path where the structure file will be written (relative to Rails.root).
config.output_path = 'db/better_structure.sql'Type: String
Default: '"$user", public'
PostgreSQL search path to set in the generated structure file.
config.search_path = 'public, shared'Control which database objects are included in the dump.
Type: Boolean
Default: true
Include PostgreSQL extensions (e.g., pgcrypto, uuid-ossp, hstore).
config.include_extensions = true
# Output: CREATE EXTENSION IF NOT EXISTS pgcrypto;Type: Boolean
Default: true
Include database functions.
config.include_functions = trueType: Boolean
Default: true
Include triggers.
config.include_triggers = trueType: Boolean
Default: true
Include both regular and materialized views.
config.include_views = trueType: Boolean
Default: true
Include standalone sequences (sequences created by serial columns are always included).
config.include_sequences = trueType: Boolean
Default: true
Include custom types and enums.
config.include_custom_types = trueType: Boolean
Default: false
Enable schema version storage in the database.
config.enable_schema_versions = trueWhen enabled:
- Each
db:schema:dump_betterordb:schema:storecreates a version record - Versions include PostgreSQL version, type (SQL/Ruby), timestamp
- Old versions are automatically cleaned up based on
schema_versions_limit
Type: Integer
Default: 10
Number of schema versions to retain. Set to 0 for unlimited.
config.schema_versions_limit = 20 # Keep last 20 versions
config.schema_versions_limit = 0 # Keep all versionsType: String
Default: 'better_structure_sql_schema_versions'
Table name for storing schema versions.
config.schema_versions_table = 'schema_versions'Type: Integer
Default: 2
Number of spaces for indentation.
config.indent_size = 4Type: Boolean
Default: true
Add blank lines between sections (extensions, tables, views, etc.).
config.add_section_spacing = false # More compact outputType: Boolean
Default: true
Sort tables alphabetically in the output.
config.sort_tables = trueType: Boolean
Default: true
Sort indexes alphabetically within each table.
config.sort_indexes = trueClean schema dumps without extra features:
BetterStructureSql.configure do |config|
config.replace_default_dump = true
config.enable_schema_versions = false
endStore versions for easy sharing:
BetterStructureSql.configure do |config|
config.replace_default_dump = true
config.enable_schema_versions = true
config.schema_versions_limit = 10
endFast dumps with minimal features:
BetterStructureSql.configure do |config|
config.replace_default_dump = true
config.enable_schema_versions = false
config.include_functions = false
config.include_triggers = false
config.include_views = false
endOnly tables and indexes:
BetterStructureSql.configure do |config|
config.include_extensions = false
config.include_functions = false
config.include_triggers = false
config.include_views = false
config.include_sequences = false
config.include_custom_types = false
endFor large schemas (100+ tables), use directory-based output:
BetterStructureSql.configure do |config|
# Use directory instead of file
config.output_path = 'db/schema'
# Chunking settings
config.max_lines_per_file = 500 # Lines per file
config.overflow_threshold = 1.1 # 10% overflow allowed
config.generate_manifest = true # Create _manifest.json
# Enable versioning with ZIP storage
config.enable_schema_versions = true
config.schema_versions_limit = 10
endThis creates:
db/schema/
├── _header.sql
├── _manifest.json
├── 01_extensions/
├── 02_types/
├── 03_functions/
├── 04_sequences/
├── 05_tables/
│ ├── 000001.sql
│ └── 000002.sql
├── 06_indexes/
├── 07_foreign_keys/
├── 08_views/
├── 09_triggers/
└── 10_migrations/
You can configure per environment:
BetterStructureSql.configure do |config|
config.replace_default_dump = true
if Rails.env.production?
config.enable_schema_versions = true
config.schema_versions_limit = 50
elsif Rails.env.development?
config.enable_schema_versions = true
config.schema_versions_limit = 5
else
config.enable_schema_versions = false
end
endBetterStructureSql.configure do |config|
# All features available
config.include_extensions = true # pgcrypto, uuid-ossp, etc.
config.include_materialized_views = true # PostgreSQL only
config.include_domains = true # PostgreSQL only
config.include_sequences = true # PostgreSQL only
config.include_custom_types = true # ENUM, composite types
config.include_functions = true # plpgsql, sql
config.include_triggers = true
config.include_views = true
endBetterStructureSql.configure do |config|
# MySQL-compatible features
config.include_functions = true # Stored procedures
config.include_triggers = true
config.include_views = true
config.include_custom_types = true # MySQL ENUM/SET
# PostgreSQL-only features (ignored for MySQL)
config.include_extensions = false # Not supported
config.include_materialized_views = false # Not supported
config.include_domains = false # Not supported
config.include_sequences = false # Uses AUTO_INCREMENT
endBetterStructureSql.configure do |config|
# SQLite-compatible features
config.include_triggers = true # BEFORE/AFTER only
config.include_views = true
# Not supported by SQLite
config.include_extensions = false # Uses PRAGMA instead
config.include_functions = false # No stored procedures
config.include_materialized_views = false # Not supported
config.include_domains = false # Not supported
config.include_sequences = false # Uses AUTOINCREMENT
config.include_custom_types = false # Uses CHECK constraints
endNote: Adapter is auto-detected from ActiveRecord::Base.connection.adapter_name. No manual adapter configuration needed!