64

I have a ton of postgresql dump files I need to peruse through for data. Do I have to install Postgresql and "recover" each one of them into new databases one by one? Or I'm hoping there's a postgresql client that can simply open them up and I can peek at the data, maybe even run a simple SQL query?

The dump files are all from a Postgresql v9.1.9 server.

Or maybe there's a tool that can easily make a database "connection" to the dump files?

UPDATE: These are not text files. They are binary. They come from Heroku's backup mechanism, this is what Heroku says about how they create their backups:

PG Backups uses the native pg_dump PostgreSQL tool to create its backup files, making it trivial to export to other PostgreSQL installations.

at.
  • 50,922
  • 104
  • 292
  • 461

7 Answers7

77

This was what I was looking for:

pg_restore db.bin > db.sql

Thanks @andrewtweber

jcuenod
  • 55,835
  • 14
  • 65
  • 102
  • 3
    The dump file might be large. If that is the case, I suggest you to try `pg_restore db.bin | less`, if you only want to take a look or execute `pg_restore db.bin | psql dbname > log 2> error` if you want to restore it. – Rodrigo Hjort May 18 '17 at 17:29
  • 1
    Now what? `pg_restore: [archiver] unsupported version (1.13) in file header` – Chloe Sep 14 '19 at 00:19
  • 1
    @Chloe that means that your `pg_restore` version is too low for the backup you're trying to restore. – Jeff Jan 27 '21 at 01:43
  • 15
    With Postgres 13, I had to do `pg_restore db.bin -f db.sql` instead, see also @AlexDev's [answer](https://stackoverflow.com/a/59378860/715870) – hangler Mar 05 '21 at 03:26
39

Try opening the files with text editor - the default dump format is plain text.

If the dump is not plain text - try using pg_restore -l your_db_dump.file command. It will list all objects in the database dump (like tables, indexes ...).

Another possible way (may not work, haven't tried it) is to grep through the output of pg_restore your_db_dump.file command. If I understood correctly the manual - the output of pg_restore is just a sequence of SQL queries, that will rebuild the db.

Ihor Romanchenko
  • 26,995
  • 8
  • 48
  • 44
  • 1
    is `pg_restore` a command that's installed when installing the Postgresql server? Or can I easily grab that command from somewhere? – at. Apr 25 '13 at 22:42
  • 1
    `pg_restore -l` only gives you the tables and other metadata, not the actual data. Your last suggestion worked perfect for me, however. – at. Apr 26 '13 at 01:57
25

In newer versions you need to specify the -f flag with a filename or '-' for stdout

pg_restore -f - dump_file.bin
AlexDev
  • 4,049
  • 31
  • 36
15

I had this same problem and I ended up doing this:

  1. Install Postgresql and PGAdmin3.
  2. Open PGAdmin3 and create a database.
  3. Right click the db and click restore.
  4. Ignore file type.
  5. Select the database dump file from Heroku.
  6. Click Restore.
Aaron Gray
  • 11,283
  • 7
  • 55
  • 61
1
pg_restore -f - db.bin > db.sql
Camille Goudeseune
  • 2,934
  • 2
  • 35
  • 56
0

Dump files are usually text file, if Not compressed, and you can open them with a text editor. Inside you will find all the queries that allow the reconstruction of the database ...

aleroot
  • 71,077
  • 30
  • 176
  • 213
0

If you use pgAdmin on Windows, can just backup the file as plain text, there is one option when you do backup instead of pg_dump in command line prompt.

TonyTony
  • 1,344
  • 15
  • 23