activerecord8-redshift-adapter

Test Gem Version License

Amazon Redshift adapter for ActiveRecord 8.1 (Rails 8.1).

Forked from charitywater/activerecord-redshift-adapter (which itself descends from the original fiksu/activerecord-redshift-adapter). The prior forks targeted Rails 8.0; this gem updates the adapter to work with the changes introduced in ActiveRecord 8.1. Thanks to all the prior authors.

Installation

Add to your Gemfile:

gem 'activerecord8-redshift-adapter', '~> 1.0'

Then:

bundle install

Or install it directly:

gem install activerecord8-redshift-adapter

Usage

In config/database.yml:

development:
  adapter: redshift
  host: host
  port: port
  database: db
  username: user
  password: password
  encoding: utf8

Or via a connection URL:

class SomeModel < ApplicationRecord
  establish_connection('redshift://username:password@host/database')
end

Typical pattern: Redshift as a secondary read-only connection

Most apps use Redshift alongside a primary OLTP database (Postgres, MySQL). With ActiveRecord multi-database support:

production:
  primary:
    adapter: postgresql
    database: app_production
    # ...
  warehouse:
    adapter: redshift
    host: my-cluster.xxxxxx.us-east-1.redshift.amazonaws.com
    port: 5439
    database: analytics
    username: app_reader
    password: <%= ENV["REDSHIFT_PASSWORD"] %>
    replica: true
class AnalyticsRecord < ApplicationRecord
  self.abstract_class = true
  connects_to database: { reading: :warehouse }
end

class PageView < AnalyticsRecord
  self.table_name = "page_views"
end

Compatibility

  • Ruby >= 3.2 (tested on 3.2, 3.3, 3.4)
  • ActiveRecord >= 8.1, < 9.0 (Rails 8.1)
  • pg ~> 1.0

For older Rails versions, use the matching gem in the same family: activerecord7-redshift-adapter, activerecord6-redshift-adapter, activerecord5-redshift-adapter. For Rails 8.0, the upstream activerecord-redshift-adapter 8.0.x still works.

Development

bundle install
gem build activerecord8-redshift-adapter.gemspec

To release a new version (maintainers), bump s.version in the gemspec, tag the commit, then:

gem push activerecord8-redshift-adapter-<version>.gem

Testing

The test suite runs against a local PostgreSQL database (Redshift is wire-compatible with Postgres 8.0, so most adapter behavior can be exercised locally). For Redshift-specific behavior — RETURNING, identity columns, distribution keys, system catalogs — run the smoke script against a real cluster (see below).

Prerequisites

  • PostgreSQL running locally (any reasonably modern version)
  • A database the test user can connect to and create tables in
createdb redshift_adapter_test

Running the suite

bundle install
bundle exec rake test

Connection settings come from standard PG* environment variables, with sensible defaults:

Variable Default
PGHOST localhost
PGPORT 5432
PGDATABASE redshift_adapter_test
PGUSER $USER
PGPASSWORD (unset)

Override any of them inline, e.g.:

PGUSER=postgres PGPASSWORD=secret bundle exec rake test

Smoke-testing against real Redshift

test/smoke.rb is a small ad-hoc script (not part of the rake task) that connects to a real Redshift cluster using the same env vars and exercises basic queries. Use it to validate the adapter against your actual cluster before deploying:

PGHOST=my-cluster.xxxxxx.us-east-1.redshift.amazonaws.com \
PGPORT=5439 \
PGDATABASE=analytics \
PGUSER=myuser \
PGPASSWORD=... \
bundle exec ruby test/smoke.rb

License

Dual-licensed under MIT (Rails-derived code) and BSD-3-Clause (Fiksu Redshift-specific portions). See LICENSE for full text.