Создание дампа базы данных для конкретных таблиц и записей Postgres


94

У меня есть база данных с сотнями таблиц, и мне нужно экспортировать указанные таблицы и вставить операторы для данных в один файл sql.

Единственное, что я знаю, может достичь этого:

pg_dump -D -a -t zones_seq interway > /tmp/zones_seq.sql

Должен ли я запускать этот оператор для каждой таблицы или есть способ запустить аналогичный оператор для экспорта всех выбранных таблиц в один большой sql big. Приведенный выше pg_dump не экспортирует только вставки схемы таблицы, мне нужны оба

Любая помощь будет оценена по достоинству.

Ответы:


160

Прямо из руководства : « Несколько таблиц можно выбрать, написав несколько ключей -t »

Итак, вам нужно перечислить все свои таблицы

pg_dump --column-inserts -a -t zones_seq -t interway -t table_3 ... > /tmp/zones_seq.sql  

Обратите внимание, что если у вас есть несколько таблиц с одинаковым префиксом (или суффиксом), вы также можете использовать подстановочные знаки, чтобы выбрать их с помощью -tпараметра:

" Кроме того, параметр таблицы интерпретируется как шаблон в соответствии с теми же правилами, которые используются командами psql \ d "


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

4
Эта -Dопция, кажется, исчезла в PG 9.1 и
новее

5
-DВариант был удален в версии 8.4 . --column-insertsВместо этого вы должны использовать сейчас.
mlovic

1
Попробуйте pg_dump --host 127.0.0.1 --port 5432 --username "<username>" --column-Insert --verbose --file "/ tmp / <filename.sql>" --table "^ <regex> * "" <tablename> "
Таринду Джаясурия

22

Если эти конкретные таблицы соответствуют определенному регулярному выражению, вы можете использовать параметр регулярного выражения в -t в pg_dump.

pg_dump -D -a -t zones_seq -t interway -t "<regex>" -f /tmp/zones_seq.sql <DBNAME>

Например, чтобы вывести таблицы, которые начинались с "test", вы можете использовать

pg_dump -D -a -t zones_seq -t interway -t "^test*" -f /tmp/zones_seq.sql <DBNAME>

3
если это было регулярное выражение, разве не должно быть ^test.*вместо ^test*?
msrd0

5
Это не регулярное выражение, оно использует "шаблоны" postgres, так что это действительно должно быть "test*": postgresql.org/docs/current/app-psql.html#APP-PSQL-PATTERNS
elliotcm

Нетривиально использовать регулярное выражение, генерирующее недопустимое регулярное выражение: недопустимая ошибка операнда квантификатора . Но регулярное выражение правильное ... Действительны только очень простые регулярные выражения
Питер Краусс
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.