Operations

# Separate database

Run pgbus in a dedicated database, isolating queue churn from your primary.

## Primary or dedicated

pgbus runs in your primary database by default. For high-volume deployments you can give it a dedicated database — the same pattern SolidQueue uses — so the queue tables' heavy write/vacuum churn doesn't compete with your application's working set.

## Point pgbus at the database

config.connects_to.

`config.connects_to` follows Rails' multiple-databases API. Leave it `nil` for the primary; set the `writing` role for a dedicated database:

```ruby
Pgbus.configure do |c|
  c.connects_to = { database: { writing: :pgbus } }
end
```

## Route migrations to db/pgbus_migrate

Pass `--database=pgbus` to any pgbus generator and its migrations go to `db/pgbus_migrate/` instead of `db/migrate/`:

```shell
rails generate pgbus:install --database=pgbus
rails generate pgbus:add_recurring --database=pgbus
rails db:migrate:pgbus
```

> **Tip:** The `pgbus:update` generator detects a separate-database config automatically (from `connects_to` or by scanning your initializer), so you don't re-specify `--database=pgbus` on every run.

## Wire up database.yml

Declare the second database with its migrations path so `db:migrate:pgbus` knows where to look:

```yaml
production:
  primary:
    <<: *default
    database: myapp_production
  pgbus:
    <<: *default
    database: myapp_pgbus_production
    migrations_paths: db/pgbus_migrate
```