2015-05-25 4 views
2

У меня есть приложение ruby ​​on rails, размещенное на heroku, используя postgresql в качестве его базы данных. Поскольку база данных становится довольно большой, мне было интересно, есть ли способ загрузить только определенную часть ее с героку. Например, можно загрузить только одну конкретную таблицу или загрузить только строки с parent_id == x.Загрузить частичную базу данных от heroku

ответ

2

В дополнение к совершенно правильный ответ Стива, у вас также есть возможность подключения с помощью psql к DATABASE_URL и используя \copy, например,

$ 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) 

Вы можете извлечь целые таблицы или выходные данные произвольных запросов (включая объединения и т. Д.). Определение таблицы (DDL) не экспортируется таким образом, но может быть сброшено с pg_dump --schema-only -t ....

+0

Есть ли способ, которым я мог бы поместить все это в какой-то скрипт (часто буду делать это «выборочное резервное копирование»)? А также, поскольку я буду получать несколько таблиц, есть ли способ получить их все в каком-то файле .dump (вместо .csv), поэтому его легче импортировать? – Robert

+0

@Robert Конечно. Любой скриптовый язык будет делать, если вы хотите вызывать 'psql' из оболочки. Или вы можете использовать копию 'copy' Ruby' pg' '' 'COPY ... TO STDOUT' вместо использования' psql' и '\ copy'; существуют существующие ответы о том, как «КОПИРОВАТЬ» непосредственно из «Pg' gem в Ruby. –

3

Используя настройку конфигурации DATABASE_URL, вы можете использовать pg_dump для доступа к своей базе данных и использовать переключатель -t, чтобы указать определенную таблицу.

Например, чтобы экспортировать таблицу my_table в файл с именем db.sql:

pg_dump -t my_table `heroku config:get DATABASE_URL` > db.sql 

Если необходимо ограничить загрузку в определенные строки, то я не думаю, что pg_dump будет делать эту работу на своем собственном. Вы можете создать другую таблицу в своей базе данных Heroku, чтобы сначала определить подмножество строк, которые вы хотите загрузить, а затем указать pg_dump дамп только этой таблицы. Смотрите этот вопрос для некоторых идей о том, как сделать это: Export specific rows from a PostgreSQL table as INSERT SQL script

+0

Итак, если я правильно понимаю это, я создаю конкретные таблицы экспорта в базе данных Heroku, а затем загружаю их с помощью pg_dump? Есть ли способ написать какой-то скрипт, чтобы все это сделать? Я в основном хочу, чтобы иметь возможность запускать скрипт, который будет работать на heroku, создавать различные экспортируемые файлы, которые мне нужны, а затем загружать их. – Robert

+0

@Robert вы можете написать сценарий для запуска на Heroku для экспорта требуемых данных. Вы могли бы запустить сценарий с планировщика Heroku, если хотите, чтобы он запускался регулярно и загружал эти дампы на S3. Если вам просто нужен одноразовый скрипт, вероятно, лучше всего написать что-то, чтобы запускаться локально с помощью вашего локального pg-клиента, как предлагает Крейг. – Steve

Смежные вопросы