Postgres на Heroku и сброс одной таблицы в файл дампа

Я использую Postgres на Heroku, и мне нужно сбросить одну таблицу из моей производственной БД и сбросить ее в мою промежуточную БД. У меня установлен пояс инструментов heroku, но я не уверен, как сбросить одну таблицу базы данных для импорта в мою промежуточную базу данных.


person dennismonsewicz    schedule 03.04.2013    source источник


Ответы (3)


Вы можете сбросить одну таблицу данных следующим образом:

$ pg_dump --no-acl --no-owner -h [host ip].compute-1.amazonaws.com -U [user name] -t [table name] --data-only [database name] > table.dump

Вы можете получить все необходимые значения с помощью этого:

$ heroku pg:credentials:url [DATABASE] -a [app_name]
Connection info string:
   "dbname=[database name] host=[host ip].compute-1.amazonaws.com port=5432 user=[user name] password=[password] sslmode=require"
Connection URL:
    postgres://[username]:[password]@[host ip].compute-1.amazonaws.com:5432/[database name]

Это запросит у вас пароль. Введите его, после чего вы должны перейти к получению файла table.dump на локальном диске.

Вероятно, вы захотите обрезать таблицу при подготовке:

$ echo "truncate [table];" | heroku pg:psql [DATABASE] -a staging_app

С этим файлом вы можете использовать psql с Connection URL:выводом нового вызова pg:credentials для промежуточного приложения и восстановить только эту таблицу.

$ psql "[pasted postgres:// from pg:credentials:url of staging app]" < table.dump
SET
SET
...
...
...
...
$ 
person catsby    schedule 22.04.2013
comment
Большое спасибо за Вашу помощь! - person dennismonsewicz; 22.04.2013
comment
Если вам нужно несколько таблиц, добавьте переключатель -t для каждой таблицы. Таким образом, 1_ - person vansan; 18.11.2013
comment
Это сработало отлично, спасибо. Для других, которые делают это: после выполнения вышеуказанных шагов не забудьте сбросить последовательность первичного ключа PG, чтобы он знал, с какого первичного ключа начинать. stackoverflow.com/questions/244243/ - person umezo; 30.07.2014
comment
Спасибо! ты спас мою задницу ;) - person ecleel; 27.10.2014
comment
Отличная информация, но я немного озадачен глупым вопросом: можете ли вы подтвердить, какой пользователь/пароль использовать? Я попробовал пользователя, указанного в строке информации о соединении, которая выглядит как хешированное значение, вместе с паролем базы данных, определенным в config/database.yml; также попробовал пользователя, определенного в этом файле (railsapp), с паролем. Я пробовал свой пароль heroku с различными комбинациями имен пользователей (предоставленный хэш, имя пользователя heroku в открытом виде, имя пользователя dB). Нет успеха. Получите FATAL: password authenticate failed for user [user] во всех случаях. - person Scro; 30.07.2015
comment
Возможно, [DATABASE] не должно быть квадратных скобок в команде pg:credential. - person Rn2dy; 24.03.2016
comment
В моем случае нужно было добавить номер порта в команду pg_dump, вот так: -p [port number] - person mrt; 12.07.2016
comment
Это говорит о том, что \N по команде неправильно снова и снова. выходной файл находится в текстовом виде с \N везде, поэтому мне интересно, неправильный ли вывод файла или ему нужен переключатель при импорте для правильной интерпретации? - person Nick Res; 16.03.2017

@catsbys ответ

Мне также нужно было добавить порт

pg_dump --no-acl --no-owner -h [ip-адрес хоста].compute-1.amazonaws.com -p [порт] -U [имя пользователя] -t [имя таблицы] --data-only [имя базы данных ] > таблица.dump

person Nicolai    schedule 17.03.2014

Взгляните на taps (db:pull), ваш вариант использования описан в это ответ на вопрос, я полагаю.

person friism    schedule 03.04.2013
comment
Когда я запускаю команду heroku db:pull --tables tbl_name --app dbname, я получаю следующую ошибку: Неверный URL-адрес базы данных - person dennismonsewicz; 20.04.2013
comment
это уже невозможно. - person Pak; 16.12.2016