2015-01-29 5 views
-1

Я пытаюсь написать команду pg_restore для восстановления только определенных таблиц (и их данных) в моей базе данных.pg_restore только некоторые таблицы

Примечание: каждая команда описана начинается с меня сбрасыванием и повторным создания базы данных и заканчивается: -v -x -O -j 8 -h localhost -U username -d database file.dump (Для любопытных, я не хочу использовать --clean, поскольку база данных, что свалка пришла имеет другие . название)

с pg_restore отлично работает для меня (с выше аргументами), я посмотрел на pg_restore documentation, и пытался что-то вроде этого:

pg_restore -t table1 -t table2 ... (есть 121 таблицы I указать таким образом).

Однако я получаю сообщение об ошибке, как следующее:

pg_restore: creating TABLE people 
pg_restore: [archiver (db)] Error from TOC entry 123; 1234 12345 TABLE people dumped_table_username 
pg_restore: [archiver (db)] could not execute query: ERROR: type "hstore" does not exist 
LINE 14:  extra_data hstore, 
         ^
    Command was: CREATE TABLE people (
    id integer NOT NULL, 
    name string, 
    age integer, 
    date_of_birt... 

Я не понимаю, почему это будет проблемой только тогда, когда -t флаг установлен, но это, кажется.

Что происходит?


Edit: выглядит это дубликат pg_restore on table failing because of hstore, который был недавно спросил и не имеет общепринятый ответа как в это время.

+0

'... начинается со мной, отбрасывая и воссоздавая базу данных и заканчивая ...' Вы имеете в виду «отбрасывание и воссоздание * таблицы *»? – joop

+0

Нет, я имею в виду всю базу данных. Я использую Rails, поэтому 'rake db: drop && rake db: create'. – JacobEvelyn

+0

Ну, если вы отбрасываете * базу данных *, то также расширяется расширение 'hstore'. Вы запускаете 'create extension hstore' после того, как вы заново создали базу данных (и до восстановления дампа)? –

ответ

0

По-видимому, pg_restore с установленным флагом -t/--table не запускается CREATE EXTENSION команды, которые находятся в файле дампа (потому что они не являются технически частью этой таблицы). Моя проблема была решена путем ручного запуска psql database -c "CREATE EXTENSION hstore;" перед командой pg_restore.

+0

Если вы делаете это регулярно, вы можете создать расширение hstore в базе данных template1. Таким образом, каждая новая база данных автоматически устанавливает расширение hstore. –

+0

Ах, не знал об этом! Если вы ответите, я соглашусь. – JacobEvelyn

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

  • Нет связанных вопросов^_^