Project

pg_tasks

0.0
No release in over 3 years
Low commit activity in last 3 years
PostgreSQL Tasks and Functions for Ruby on Rails
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

>= 0

Runtime

< 5.0.0, >= 4.1.0
 Project Readme

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.