2016-05-04 4 views
8

(PostgreSQL) 9.4.4Исключить таблицу во время pg_restore

Кто знает, как исключить таблицу при выполнении pg_restore? Я могу найти, как это сделать, когда делаю pg_dump. Однако я не тот, кто делает дамп и не могу их исключить.

В дампе есть 2 таблицы, которые действительно большие, и навсегда сохраняйте, когда я делаю восстановление, поэтому я хочу пропустить их.

ответ

3

pg_restore не имеет параметра таблицы исключений, то, что у него есть, есть параметр таблицы include.

-t таблица

--table = таблица

Восстановить определение и/или данные только по имени таблицы. Несколько таблиц могут быть указаны с несколькими ключами -t. Это может быть быть объединенным с опцией -n, чтобы указать схему.

Если у вас есть большое количество таблиц, он вызывает набор символов, но он позволяет исключать определенные таблицы, просто оставляя их имена вне списка.

+1

Спасибо. Да, у нас много таблиц, но я делаю задачу грабли, чтобы автоматизировать это, поэтому мне просто нужно сделать это один раз. Может перебирать таблицы и иметь список исключений из двух таблиц. – covard

17

У меня была та же проблема. Список длинной таблицы, и я хочу исключить данные из нескольких таблиц.

Что я сделал следующее:

Run

pg_restore -l $pgdump_file > restore.pgdump.list 

Открыть что restore.pgdump.list файл в редакторе и вставить в передней линии в ; говоря

;2429; 0 27550 TABLE DATA public <table_to_explore> <database> 

После сохранения этот файл теперь можно использовать для импорта, когда все строки, начинающиеся с ;, игнорируются.

pg_restore -L restore.pgdump.list | psql 

Вы могли бы сделать один-лайнер, чтобы добавить ; перед линиями, имеющими конкретное имя таблицы, если вы полностью хотите игнорировать определенную таблицу.

man pg_restore также сообщается об этом в примере, приведенном в конце документации.

+0

Спасибо, что за жизнь! Как отмечено в 'man pg_restore', как только вы отредактировали файл' restore.pgdump.list' (из вашего примера), вы можете вызвать 'pg_restore -L db.list db.dump' (в вашем примере вы вызываете 'pg_restore' и передать его в' psql' - однако вы не укажете путь к файлу дампа.?) –

+0

Обратите внимание, что это спасло меня, потому что я пытался исключить 2 таблицы из списка из 99 таблиц, которые были импортирован. 'pg_restore' не позволяет указывать таблицы для исключения во время импорта, поэтому мне пришлось называть это:' pg_restore -t a_table -t another_table -t yet_another_table' и т. д. Попытка вызвать его с помощью аргументов '' '' '' t сломалась с Сообщение «слишком много аргументов» ... :-) Решение 'restore.pgdump.list' работало! –

+0

Это было очень полезно! Мне нужно было только исключить данные из одной таблицы: 'reports'.При создании файла списка я смог сделать встроенный 'grep -v'. '' 'pg_restore -l $ pgdump_file | grep -v "TABLE DATA public reports"> restore.pgdump.list''' –