Как pg_restore одной таблицы и ее схемы из дампа Postgres?

У меня возникли трудности с восстановлением схемы таблицы. Я сбросил свою базу данных Heroku Postgres и использовал pg_restore для восстановления одной таблицы из нее в мою локальную базу данных (у нее более 20 таблиц). Он был успешно восстановлен, но у меня возникли проблемы, когда я попытался вставить новые данные в таблицу.

Когда я открыл свою базу данных с помощью psql, я обнаружил, что восстановленная таблица доступна со всеми данными, но в ее схеме нет строк. Можно ли как-нибудь импортировать и таблицу, и ее схему из дампа? Большое тебе спасибо.

Вот как я восстановил таблицу в своей локальной базе данных:

pg_restore -U postgres --dbname my_db --table=message latest.dump

Редактировать:

Я пробовал что-то подобное, следуя официальной документации, но он просто блокируется, и ничего не происходит. Моя база данных мала, не более пары мегабайт, а в схеме таблицы, которую я пытаюсь восстановить, не более 100 строк.

pg_restore -U postgres --dbname mydb --table=message --schema=message_id_seq latest.dump

person Murphy Adam    schedule 24.09.2019    source источник
comment
Под схемой вы подразумеваете данные таблицы, последовательность или объект, созданный CREATE SCHEMA?   -  person Laurenz Albe    schedule 25.09.2019


Ответы (2)


В качестве более общего ответа (мне нужно было восстановить одну таблицу из огромной резервной копии) вы можете взглянуть на этот пост: https://thequantitative.medium.com/restoring-Individual-tables-from-postgresql-pg-dump-using-pg-restore-options-ef3ce2b41ab6

# run the schema-only restore as root
pg_restore -U postgres --schema-only -d new_db /directory/path/db-dump-name.dump

# Restore per table data using something like
pg_restore -U postgres --data-only -d target-db-name -t table_name /directory/path/dump-name.dump
person Haroldo_OK    schedule 02.12.2020

Из Heroku DevCenter здесь

Heroku Postgres интегрирован непосредственно в интерфейс командной строки Heroku и предлагает множество полезных команд, упрощающих общие задачи базы данных.

Вы можете проверить здесь, правильно ли настроена ваша среда.

Таким образом, вы можете использовать команду Heroku CLI pg: pull для извлечения удаленных данных из базы данных Heroku Postgres в локальную базу данных на вашем компьютере.

Например:

$ heroku pg:pull HEROKU_POSTGRESQL_MAGENTA mylocaldb --app sushi
person Andrea    schedule 24.09.2019
comment
Это не отвечает на конкретный вопрос. Использование pg:pull восстановит всю базу данных локально, тогда как OP хочет восстановить одну таблицу. - person RangerRanger; 25.09.2019
comment
@RangerRanger Это правда, но я предложил напрямую использовать инструменты Heroku по двум причинам: 1) БД занимает всего «пару МБ», тогда в основном нет различий - иначе я бы не предложил 2) если пользователь не имеет большого опыта работы с дампом / восстановлением PG, это может быть для него более простым и безопасным способом - person Andrea; 25.09.2019
comment
@Andrea, я уже перенес свою удаленную базу данных в свою локальную; и я pg_restored желаемую таблицу, проблема с таблицей последовательности, они не восстанавливаются со своими таблицами автоматически. Мне пришлось вручную отредактировать таблицу последовательности, чтобы она соответствовала таблице данных. Не лучший подход, но сработал. Спасибо за Ваш ответ. - person Murphy Adam; 25.09.2019