schema_caching.rb

lib/sequel/extensions/schema_caching.rb
Last Update: 2023-08-17 13:01:31 -0700

The schema_caching extension adds a few methods to Sequel::Database that make it easy to dump the parsed schema information to a file, and load it from that file. Loading the schema information from a dumped file is faster than parsing it from the database, so this can save bootup time for applications with large numbers of models.

Basic usage in application code:

DB = Sequel.connect('...')
DB.extension :schema_caching
DB.load_schema_cache('/path/to/schema.dump')

# load model files

Then, whenever the database schema is modified, write a new cached file. You can do that with bin/sequel‘s -S option:

bin/sequel -S /path/to/schema.dump postgres://...

Alternatively, if you don’t want to dump the schema information for all tables, and you don’t worry about race conditions, you can choose to use the following in your application code:

DB = Sequel.connect('...')
DB.extension :schema_caching
DB.load_schema_cache?('/path/to/schema.dump')

# load model files

DB.dump_schema_cache?('/path/to/schema.dump')

With this method, you just have to delete the schema dump file if the schema is modified, and the application will recreate it for you using just the tables that your models use.

Note that it is up to the application to ensure that the dumped cached schema reflects the current state of the database. Sequel does no checking to ensure this, as checking would take time and the purpose of this code is to take a shortcut.

The cached schema is dumped in Marshal format, since it is the fastest and it handles all ruby objects used in the schema hash. Because of this, you should not attempt to load the schema from a untrusted file.

Related module: Sequel::SchemaCaching