I have a ruby on rails application hosted on heroku using postgresql as its database. Since the database is getting pretty large, I was wondering if there's a way to download only a specific part of it off of heroku. For example, is it possible to download only one specific table, or download only rows with parent_id == x.
In addition to Steve's quite correct answer, you also have the option of connecting using psql
to the DATABASE_URL
and using \copy
, e.g.
$ psql "$(heroku config:get DATABASE_URL)"
mydb=> \copy mytable TO 'mytable.csv' WITH (FORMAT CSV, HEADER)
mydb=> \copy (SELECT col1, col2 FROM mytable2 WHERE ...) TO 'mytable2_partial.csv' WITH (FORMAT CSV, HEADER)
You can extract whole tables, or the output of arbitrary queries (including joins etc). The table definition (DDL) is not exported this way, but can be dumped with pg_dump --schema-only -t ...
.
psql
from the shell. Or you could use the Ruby pg
gem's copy
support to COPY ... TO STDOUT
instead of using psql
and \copy
; there are existing answers on how to COPY
directly from the Pg
gem in Ruby. –
Swimming Using the DATABASE_URL
config setting you can use pg_dump
to access your database and use the -t
switch to specify a certain table.
For example, to export the table my_table
into file called db.sql
:
pg_dump -t my_table `heroku config:get DATABASE_URL` > db.sql
If you need to limit the download to certain rows then I don't think pg_dump
will do the job on it's own. You could create another table in your Heroku database to first define the subset of rows that you want to download and then have pg_dump
dump only that table. See this question for some ideas about how to do that: Export specific rows from a PostgreSQL table as INSERT SQL script
In addition to Steve's quite correct answer, you also have the option of connecting using psql
to the DATABASE_URL
and using \copy
, e.g.
$ psql "$(heroku config:get DATABASE_URL)"
mydb=> \copy mytable TO 'mytable.csv' WITH (FORMAT CSV, HEADER)
mydb=> \copy (SELECT col1, col2 FROM mytable2 WHERE ...) TO 'mytable2_partial.csv' WITH (FORMAT CSV, HEADER)
You can extract whole tables, or the output of arbitrary queries (including joins etc). The table definition (DDL) is not exported this way, but can be dumped with pg_dump --schema-only -t ...
.
psql
from the shell. Or you could use the Ruby pg
gem's copy
support to COPY ... TO STDOUT
instead of using psql
and \copy
; there are existing answers on how to COPY
directly from the Pg
gem in Ruby. –
Swimming © 2022 - 2024 — McMap. All rights reserved.