Skip to content
No description, website, or topics provided.
Ruby
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
lib
.gitignore
.rubocop.yml
Gemfile
Gemfile.lock
MIT-LICENSE
README.mkd
Rakefile
pg_tasks.gemspec

README.mkd

PostgreSQL Tasks and Functions for Ruby on Rails

Installation

Add this line to your application's Gemfile:

gem 'pg_tasks', '>= 1.1.0', '< 2.0.0'

Usage

Rake Tasks

The following rake tasks are available:

rake db:pg:structure_and_data:dump FILE=...
rake db:pg:structure_and_data:restore FILE=...
rake db:pg:data:restore FILE=...
rake db:pg:terminate_connections
rake db:pg:truncate_tables

The meaning should be clear from the names.

The FILE environment variable is optional. There are defaults.

Access from Ruby Code

PgTasks.structure_and_data_dump(filename = nil)
PgTasks.structure_and_data_restore(filename = nil)
PgTasks.data_restore(filename = nil)
PgTasks.terminate_connections()
PgTasks.truncate_tables()

Breaking Changes from Version 1.x to 2.x

The task db:pg:data:dump and the corresponding command PgTasks.data_dump has been removed.

The task db:pg:data:restore and the corresponding command PgTasks.data_restore operate now only on dumps also including the schema.

The task db:pg:data:restore and the corresponding command PgTasks.data_restore do not disable triggers!

Motivation

  • The integrity of the data is now checked also when restoring data only.

  • Most use cases require now only one dump (structure_and_data) instead of two. This translates in ½ the time to create dumps and ½ the space required to store them.

You might ask why it hasn't been this way from the start? The facilities PostgreSQL provides clashes a bit with how ActiveRecord works with respect the schema_migrations table and you have to perform "a bit of a dance" to make it work this way.

Internals and Caveats

This library uses and extends ActiveRecord::Tasks::DatabaseTasks as well as ActiveRecord::Tasks::PostgreSQLDatabaseTasks.

The dump and restore tasks communicate with Postgresql via the system binaries pg_dump and pg_restore (in the same way as some of the original rails tasks do). truncate_tables uses ActiveRecord::Base.connection.

Restoring a complete database doesn't play well if there are open connections. Restore is carried out in a single transaction add will abort immediately if there is a problem.

data_restore as well as truncate_tables leaves the schema_migrations table alone. This is the desired behavior for a library designed to interact with ruby on rails respectively active record.

Calling PgTasks.terminate_connections() will also terminate the current connection.

You can’t perform that action at this time.