SQLDump

A command line tool to dump the data in a database table as INSERT or UPDATE statements, or in CSV format.

Installation

Just install the gem with

$ gem install sqldump

This will make the executable sqldump available from your command line.

Requires Ruby 1.9.2 or later.

Usage

Simplest case (SQLite3 is default). Dumps in csv format.

$ sqldump -d mydatabase.sqlite3 mytable

Dump as INSERT statements

$ sqldump -d mydatabase.sqlite3 -i mytable

Postgres database with username and password

$ sqldump -T pg -d mypostgresdb -U username -P password -i mytable

Show all options

$ sqldump -h

Development

Questions or problems? Please post them on the issue tracker. You can contribute changes by forking the project and submitting a pull request. You can ensure the tests passing by running bundle and rake.

This gem is created by Mats Sigge and is under the MIT License.

Roadmap

Immediate goals

  • More databases. At least MySQL and SQL Server.
  • Selecting only some columns
  • Support for UPDATEs
  • Pretty-printing SQL on multiple lines
  • Suppressing NULL columns in output
  • Handling auto-incrementing columns, e.g. nextval('sequence_name') in PostgreSQL

Longer-term goals / pipe dreams

  • Configuration system, e.g. .sqldump file ** Default user, password, host, database
  • "Column handlers", e.g. some way of saying that the column CREATED_AT should get the value now() or getDate() instead of whatever value is actually in the database.
  • Other hooks, e.g. being able to append SELECT @id = @@IDENTITY after a select on SQL Server.

Done

  • Initial support for dumping INSERTs
  • Support for SQLite3
  • Support for PostgreSQL

History

Once, at a company where I worked, there was a whole lot of DB scripting. So much that I got tired of writing all that SQL by hand. At first, there were some SQL scripts that generated SQL as output, i.e. something like

SELECT 'INSERT INTO ' + ... 

but that gets tired really quickly. So after a while, I started hacking on a perl tool called SQLDump. It would query the database and output the results as INSERT (or UPDATE) statements directly. More and more options were added on, and it got to be quite powerful. It could take a command line like

$ sqldump -S testserver -d test_db_14 -irtl -f SPROCKET_ID RATCHET WHERE RATCHET_DATE = '2012-01-02'

and output

INSERT INTO RATCHET (
    SPROCKET_ID,
    RATCHET_NAME,
    RATCHET_DATE
    CREATED_AT
)
VALUES (
    @SPROCKET_ID,
    'My ratchet rocks!',
    '2012-01-02',
    getDate()
)

which was pretty useful at the time. I could chain together sequences of calls and dump whole hierarchies of data. I used it a lot.

It also ended up a big smelly mess. And while it's possible to make a mess in any language, it's one of the things that Perl does best. (Don't get me wrong, I love Perl, and can't imagĂ­ne life without it, but I've also written some of my worst code in it.) So I decided that I wanted to rewrite it in Ruby, and at least attempting to keep the code clean. Also, the initial tool was specific to both SQL Server and the idiosynchracies of the system I worked on (i.e. special handling of some column names and other stuff). My vision of this rewrite is to be able to support the same kind of special handling, but through some form of hooks instead of hard coding that logic into the guts of the tool.

Mats Sigge